aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAndrew Waterman <waterman@cs.berkeley.edu>2015-09-02 13:24:50 -0700
committerAndrew Waterman <waterman@cs.berkeley.edu>2015-09-02 13:24:50 -0700
commit7166f472e2f9a3621402d28f50f6b1dcb5983c37 (patch)
treec348b23a60a6e363718b0c779625093aed04fef6 /gcc
parenta1cd49f104d880d9ea5e8cc6ac59d3dea4ecd008 (diff)
downloadriscv-gnu-toolchain-7166f472e2f9a3621402d28f50f6b1dcb5983c37.zip
riscv-gnu-toolchain-7166f472e2f9a3621402d28f50f6b1dcb5983c37.tar.gz
riscv-gnu-toolchain-7166f472e2f9a3621402d28f50f6b1dcb5983c37.tar.bz2
Fix C++ exception regression
We were generating incorrect DWARF frame info. This seems to resolve #85.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/gcc/config/riscv/riscv.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/gcc/gcc/config/riscv/riscv.c b/gcc/gcc/config/riscv/riscv.c
index 3ccb56d..ba4ee70 100644
--- a/gcc/gcc/config/riscv/riscv.c
+++ b/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);
+ }
}
}