aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2007-10-21 02:43:01 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2007-10-21 02:43:01 +0200
commitbe1d7465396d551bfec8c7396babf8c82761f440 (patch)
treed93220e33034a8bedb967b984cebe6d47d39b5d5
parent6e8d3b8ae179d751dfee4a3cf0ac9e4bc9529dac (diff)
downloadgcc-be1d7465396d551bfec8c7396babf8c82761f440.zip
gcc-be1d7465396d551bfec8c7396babf8c82761f440.tar.gz
gcc-be1d7465396d551bfec8c7396babf8c82761f440.tar.bz2
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
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/rs6000/linux-unwind.h5
2 files changed, 10 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6abb0ae..bf90912 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2007-10-20 Jakub Jelinek <jakub@redhat.com>
+
+ * 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 <eweddington@cso.atmel.com>
* 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 f3d76c0..4cd961c 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) &regs->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) &regs->ccr - new_cfa
+ + sizeof (long) - 4;
fs->regs.reg[R_LR].how = REG_SAVED_OFFSET;
fs->regs.reg[R_LR].loc.offset = (long) &regs->link - new_cfa;