OSDN Git Service

* unwind-dw2.c: Add declarations for uw_update_context and
authordanglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 17 May 2006 15:35:36 +0000 (15:35 +0000)
committerdanglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 17 May 2006 15:35:36 +0000 (15:35 +0000)
uw_frame_state_for.
* pa/hpux-unwind.h (pa_fallback_frame_state): When an export stub is
detected, advance frame state and context once to skip over stub.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@113865 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/pa/hpux-unwind.h
gcc/unwind-dw2.c

index 9baecb1..d71b1b4 100644 (file)
@@ -1,3 +1,10 @@
+2006-05-17  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+
+       * unwind-dw2.c: Add declarations for uw_update_context and
+       uw_frame_state_for.
+       * pa/hpux-unwind.h (pa_fallback_frame_state): When an export stub is
+       detected, advance frame state and context once to skip over stub.
+
 2006-05-17  Sebastian Pop  <pop@cri.ensmp.fr>
 
        PR middle-end/20256
index 383b072..d521498 100644 (file)
@@ -155,7 +155,11 @@ pa_fallback_frame_state (struct _Unwind_Context *context,
       fs->regs.reg[0].how = REG_SAVED_OFFSET;
       fs->regs.reg[0].loc.offset = -24;
 
-      return _URC_NO_REASON;
+      /* Update context to describe the stub frame.  */
+      uw_update_context (context, fs);
+
+      /* Set up fs to describe the FDE for the caller of this stub.  */
+      return uw_frame_state_for (context, fs);
     }
   /* Check if the return address points to a relocation stub.  */
   else if (!TARGET_64BIT
@@ -171,7 +175,11 @@ pa_fallback_frame_state (struct _Unwind_Context *context,
       fs->regs.reg[0].how = REG_SAVED_OFFSET;
       fs->regs.reg[0].loc.offset = -8;
 
-      return _URC_NO_REASON;
+      /* Update context to describe the stub frame.  */
+      uw_update_context (context, fs);
+
+      /* Set up fs to describe the FDE for the caller of this stub.  */
+      return uw_frame_state_for (context, fs);
     }
 
   /* Check if the return address is an export stub as signal handlers
index 55a6143..d205122 100644 (file)
@@ -92,6 +92,10 @@ union unaligned
   signed s8 __attribute__ ((mode (DI)));
 } __attribute__ ((packed));
 
+static void uw_update_context (struct _Unwind_Context *, _Unwind_FrameState *);
+static _Unwind_Reason_Code uw_frame_state_for (struct _Unwind_Context *,
+                                              _Unwind_FrameState *);
+
 static inline void *
 read_pointer (const void *p) { const union unaligned *up = p; return up->p; }