aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorUlrich Weigand <uweigand@gcc.gnu.org>2014-07-30 16:26:15 +0000
committerUlrich Weigand <uweigand@gcc.gnu.org>2014-07-30 16:26:15 +0000
commit87cb0c0cdbb3387a7964950751ef2dbab33254aa (patch)
tree57f3cc9e5f416ad89cc5891a65172ed17a41e0eb /gcc
parente58d3b417cef2189f53a7e5923280ae8524970b8 (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/config/s390/s390.c5
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);
}