diff options
author | Andrew Waterman <waterman@cs.berkeley.edu> | 2015-09-02 13:24:50 -0700 |
---|---|---|
committer | Andrew Waterman <waterman@cs.berkeley.edu> | 2015-09-02 13:24:50 -0700 |
commit | 7166f472e2f9a3621402d28f50f6b1dcb5983c37 (patch) | |
tree | c348b23a60a6e363718b0c779625093aed04fef6 /gcc | |
parent | a1cd49f104d880d9ea5e8cc6ac59d3dea4ecd008 (diff) | |
download | riscv-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.c | 20 |
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); + } } } |