diff options
author | John David Anglin <dave.anglin@nrc-cnrc.gc.ca> | 2006-05-17 15:35:36 +0000 |
---|---|---|
committer | John David Anglin <danglin@gcc.gnu.org> | 2006-05-17 15:35:36 +0000 |
commit | edbaf6a24d220fe50ec0bbb245952bf9a19a3561 (patch) | |
tree | c07bef3c2aa765203944beda977592a8bcc0237f | |
parent | 9e6fb77dba8c47d6b6e8792900ab507d60e0bcc1 (diff) | |
download | gcc-edbaf6a24d220fe50ec0bbb245952bf9a19a3561.zip gcc-edbaf6a24d220fe50ec0bbb245952bf9a19a3561.tar.gz gcc-edbaf6a24d220fe50ec0bbb245952bf9a19a3561.tar.bz2 |
unwind-dw2.c: Add declarations for uw_update_context and uw_frame_state_for.
* 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.
From-SVN: r113865
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/pa/hpux-unwind.h | 12 | ||||
-rw-r--r-- | gcc/unwind-dw2.c | 4 |
3 files changed, 21 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9baecb1..d71b1b4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/config/pa/hpux-unwind.h b/gcc/config/pa/hpux-unwind.h index 383b072..d521498 100644 --- a/gcc/config/pa/hpux-unwind.h +++ b/gcc/config/pa/hpux-unwind.h @@ -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 diff --git a/gcc/unwind-dw2.c b/gcc/unwind-dw2.c index 55a6143..d205122 100644 --- a/gcc/unwind-dw2.c +++ b/gcc/unwind-dw2.c @@ -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; } |