Browse Source

Fix C++ exception regression

We were generating incorrect DWARF frame info.

This seems to resolve #85.
pull/86/head
Andrew Waterman 11 years ago
parent
commit
7166f472e2
  1. 20
      gcc/gcc/config/riscv/riscv.c

20
gcc/gcc/config/riscv/riscv.c

@ -3437,23 +3437,23 @@ riscv_expand_prologue (void)
if (size > 0)
{
if (SMALL_OPERAND (-size))
emit_insn (gen_add3_insn (stack_pointer_rtx, stack_pointer_rtx,
GEN_INT (-size)));
{
insn = gen_add3_insn (stack_pointer_rtx, stack_pointer_rtx,
GEN_INT (-size));
RTX_FRAME_RELATED_P (emit_insn (insn)) = 1;
}
else
{
riscv_emit_move (RISCV_PROLOGUE_TEMP (Pmode), GEN_INT (-size));
emit_insn (gen_add3_insn (stack_pointer_rtx,
stack_pointer_rtx,
RISCV_PROLOGUE_TEMP (Pmode)));
}
}
if (frame->total_size > 0)
{
/* Describe the effect of the instructions that adjusted sp. */
insn = plus_constant (Pmode, stack_pointer_rtx, -frame->total_size);
insn = gen_rtx_SET (VOIDmode, stack_pointer_rtx, insn);
riscv_set_frame_expr (insn);
/* Describe the effect of the previous instructions. */
insn = plus_constant (Pmode, stack_pointer_rtx, -size);
insn = gen_rtx_SET (VOIDmode, stack_pointer_rtx, insn);
riscv_set_frame_expr (insn);
}
}
}

Loading…
Cancel
Save