linux-unwind.h (mips_fallback_frame_state): Adjust offsets for the big-endian 32...
authorDaniel Jacobowitz <dan@codesourcery.com>
Fri, 11 Feb 2005 20:18:59 +0000 (20:18 +0000)
committerDaniel Jacobowitz <drow@gcc.gnu.org>
Fri, 11 Feb 2005 20:18:59 +0000 (20:18 +0000)
* config/mips/linux-unwind.h (mips_fallback_frame_state): Adjust
offsets for the big-endian 32-bit case.

From-SVN: r94888

gcc/ChangeLog
gcc/config/mips/linux-unwind.h

index dd6defd9463ed4e5b1c68447581ba0ebb29eba3f..f41bfac366b784aaae87670d2a3f6112a4d47d61 100644 (file)
@@ -1,3 +1,8 @@
+2005-02-11  Daniel Jacobowitz  <dan@codesourcery.com>
+
+       * config/mips/linux-unwind.h (mips_fallback_frame_state): Adjust
+       offsets for the big-endian 32-bit case.
+
 2005-02-11  Joseph S. Myers  <joseph@codesourcery.com>
 
        * config/ia64/hpux.h (WCHAR_TYPE, WCHAR_TYPE_SIZE): Define.
index afe06cbff246de54e316f4ea257100bd4cafed4b..8a41c8c77570e8474b2e6dd3e9ebca2b82c86843 100644 (file)
@@ -86,6 +86,13 @@ mips_fallback_frame_state (struct _Unwind_Context *context,
   fs->cfa_reg = STACK_POINTER_REGNUM;
   fs->cfa_offset = new_cfa - (_Unwind_Ptr) context->cfa;
 
+#if _MIPS_SIM == _ABIO32 && defined __MIPSEB__
+  /* On o32 Linux, the register save slots in the sigcontext are
+     eight bytes.  We need the lower half of each register slot,
+     so slide our view of the structure back four bytes.  */
+  new_cfa -= 4;
+#endif
+
   for (i = 0; i < 32; i++) {
     fs->regs.reg[i].how = REG_SAVED_OFFSET;
     fs->regs.reg[i].loc.offset