From be1d7465396d551bfec8c7396babf8c82761f440 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Sun, 21 Oct 2007 02:43:01 +0200 Subject: [PATCH] linux-unwind.h (ppc_fallback_frame_state): Point saved CR2 offset to low 32 bits of regs->ccr rather than the whole 64-bit... * config/rs6000/linux-unwind.h (ppc_fallback_frame_state): Point saved CR2 offset to low 32 bits of regs->ccr rather than the whole 64-bit register in 64-bit libgcc. From-SVN: r129520 --- gcc/ChangeLog | 6 ++++++ gcc/config/rs6000/linux-unwind.h | 5 ++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6abb0ae87e1..bf909124960 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2007-10-20 Jakub Jelinek + + * config/rs6000/linux-unwind.h (ppc_fallback_frame_state): Point + saved CR2 offset to low 32 bits of regs->ccr rather than the whole + 64-bit register in 64-bit libgcc. + 2007-10-20 Eric B. Weddington * config/avr/avr.c (avr_mcu_types): Add at90pwm2b, at90pwm3b. diff --git a/gcc/config/rs6000/linux-unwind.h b/gcc/config/rs6000/linux-unwind.h index f3d76c0df14..4cd961cf9a8 100644 --- a/gcc/config/rs6000/linux-unwind.h +++ b/gcc/config/rs6000/linux-unwind.h @@ -250,7 +250,10 @@ ppc_fallback_frame_state (struct _Unwind_Context *context, } fs->regs.reg[R_CR2].how = REG_SAVED_OFFSET; - fs->regs.reg[R_CR2].loc.offset = (long) ®s->ccr - new_cfa; + /* CR? regs are always 32-bit and PPC is big-endian, so in 64-bit + libgcc loc.offset needs to point to the low 32 bits of regs->ccr. */ + fs->regs.reg[R_CR2].loc.offset = (long) ®s->ccr - new_cfa + + sizeof (long) - 4; fs->regs.reg[R_LR].how = REG_SAVED_OFFSET; fs->regs.reg[R_LR].loc.offset = (long) ®s->link - new_cfa; -- 2.30.2