diff options
author | Ulrich Weigand <uweigand@gcc.gnu.org> | 2014-07-30 16:26:15 +0000 |
---|---|---|
committer | Ulrich Weigand <uweigand@gcc.gnu.org> | 2014-07-30 16:26:15 +0000 |
commit | 87cb0c0cdbb3387a7964950751ef2dbab33254aa (patch) | |
tree | 57f3cc9e5f416ad89cc5891a65172ed17a41e0eb /gcc | |
parent | e58d3b417cef2189f53a7e5923280ae8524970b8 (diff) | |
download | gcc-87cb0c0cdbb3387a7964950751ef2dbab33254aa.zip gcc-87cb0c0cdbb3387a7964950751ef2dbab33254aa.tar.gz gcc-87cb0c0cdbb3387a7964950751ef2dbab33254aa.tar.bz2 |
s390.c (s390_emit_tpf_eh_return): Pass original return address as second parameter to __tpf_eh_return routine.
gcc/
2014-07-30 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
* config/s390/s390.c (s390_emit_tpf_eh_return): Pass original return
address as second parameter to __tpf_eh_return routine.
libgcc/
2014-07-30 J. D. Johnston <jjohnst@us.ibm.com>
* config/s390/tpf-unwind.h: Include <stdbool.h>.
(__tpf_eh_return): Add original return address as second parameter.
Handle cases where unwinder routines were called directly, instead
of from within the C++ library.
From-SVN: r213305
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/s390/s390.c | 5 |
2 files changed, 9 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1bb3d33..04b0d3c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2014-07-30 Ulrich Weigand <Ulrich.Weigand@de.ibm.com> + + * config/s390/s390.c (s390_emit_tpf_eh_return): Pass original return + address as second parameter to __tpf_eh_return routine. + 2014-07-30 Jiong Wang <jiong.wang@arm.com> * config/arm/arm.c (arm_get_frame_offsets): Adjust condition for diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index bc6206e..03b85ff 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -10850,17 +10850,20 @@ static GTY(()) rtx s390_tpf_eh_return_symbol; void s390_emit_tpf_eh_return (rtx target) { - rtx insn, reg; + rtx insn, reg, orig_ra; if (!s390_tpf_eh_return_symbol) s390_tpf_eh_return_symbol = gen_rtx_SYMBOL_REF (Pmode, "__tpf_eh_return"); reg = gen_rtx_REG (Pmode, 2); + orig_ra = gen_rtx_REG (Pmode, 3); emit_move_insn (reg, target); + emit_move_insn (orig_ra, get_hard_reg_initial_val (Pmode, RETURN_REGNUM)); insn = s390_emit_call (s390_tpf_eh_return_symbol, NULL_RTX, reg, gen_rtx_REG (Pmode, RETURN_REGNUM)); use_reg (&CALL_INSN_FUNCTION_USAGE (insn), reg); + use_reg (&CALL_INSN_FUNCTION_USAGE (insn), orig_ra); emit_move_insn (EH_RETURN_HANDLER_RTX, reg); } |