]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
linux-unwind.h (ppc_fallback_frame_state): Correct location of CR save area for 64...
authorUlrich Weigand <uweigand@de.ibm.com>
Thu, 14 Nov 2013 18:25:33 +0000 (18:25 +0000)
committerUlrich Weigand <uweigand@gcc.gnu.org>
Thu, 14 Nov 2013 18:25:33 +0000 (18:25 +0000)
2013-11-14  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
    Alan Modra  <amodra@gmail.com>

* config/rs6000/linux-unwind.h (ppc_fallback_frame_state): Correct
location of CR save area for 64-bit little-endian systems.

Co-Authored-By: Alan Modra <amodra@gmail.com>
From-SVN: r204800

libgcc/ChangeLog
libgcc/config/rs6000/linux-unwind.h

index 81556a300e924214b36db215883b4d5c3f7875f2..ba72c24a082bb188695ddcd9d844f63608808ebb 100644 (file)
@@ -1,3 +1,9 @@
+2013-11-14  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
+           Alan Modra  <amodra@gmail.com>
+
+       * config/rs6000/linux-unwind.h (ppc_fallback_frame_state): Correct
+       location of CR save area for 64-bit little-endian systems.
+
 2013-11-11  Eric Botcazou  <ebotcazou@adacore.com>
 
        * config.host (arm-wrs-vxworks): Replace arm/t-vxworks with arm/t-elf
index c9273c404e2d00f4642675b5e163b9640057800d..c481e06dd24dea66fc91dfa3a06c77b59537f50f 100644 (file)
@@ -185,6 +185,7 @@ ppc_fallback_frame_state (struct _Unwind_Context *context,
 {
   struct gcc_regs *regs = get_regs (context);
   struct gcc_vregs *vregs;
+  long cr_offset;
   long new_cfa;
   int i;
 
@@ -206,11 +207,13 @@ ppc_fallback_frame_state (struct _Unwind_Context *context,
       fs->regs.reg[i].loc.offset = (long) &regs->gpr[i] - new_cfa;
     }
 
+  /* The CR is saved in the low 32 bits of regs->ccr.  */
+  cr_offset = (long) &regs->ccr - new_cfa;
+#ifndef __LITTLE_ENDIAN__
+  cr_offset += sizeof (long) - 4;
+#endif
   fs->regs.reg[R_CR2].how = REG_SAVED_OFFSET;
-  /* 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_CR2].loc.offset = cr_offset;
 
   fs->regs.reg[R_LR].how = REG_SAVED_OFFSET;
   fs->regs.reg[R_LR].loc.offset = (long) &regs->link - new_cfa;