From: Jakub Jelinek Date: Sun, 21 Oct 2007 00:51:31 +0000 (+0200) Subject: linux-unwind.h (ppc_fallback_frame_state): Point saved CR2 offset to low 32 bits... X-Git-Tag: prereleases/gcc-4.2.3-rc1~169 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fe332526da8c9f22a7364654458f89df4a1df848;p=thirdparty%2Fgcc.git 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: r129521 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7acfc843ec3e..38279fe60f9c 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-18 Uros Bizjak PR target/32961 diff --git a/gcc/config/rs6000/linux-unwind.h b/gcc/config/rs6000/linux-unwind.h index 6a59a544b172..61b4b742c469 100644 --- a/gcc/config/rs6000/linux-unwind.h +++ b/gcc/config/rs6000/linux-unwind.h @@ -244,7 +244,10 @@ ppc_fallback_frame_state (struct _Unwind_Context *context, } fs->regs.reg[CR2_REGNO].how = REG_SAVED_OFFSET; - fs->regs.reg[CR2_REGNO].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[CR2_REGNO].loc.offset = (long) ®s->ccr - new_cfa + + sizeof (long) - 4; fs->regs.reg[LINK_REGISTER_REGNUM].how = REG_SAVED_OFFSET; fs->regs.reg[LINK_REGISTER_REGNUM].loc.offset = (long) ®s->link - new_cfa;