diff options
| author | danglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-05-17 15:35:36 +0000 |
|---|---|---|
| committer | danglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-05-17 15:35:36 +0000 |
| commit | 68528f68521054d8a84b41856096937bbae42aa1 (patch) | |
| tree | c07bef3c2aa765203944beda977592a8bcc0237f | |
| parent | 4704510a34152b6dae59763a606376bc5ef63545 (diff) | |
| download | ppe42-gcc-68528f68521054d8a84b41856096937bbae42aa1.tar.gz ppe42-gcc-68528f68521054d8a84b41856096937bbae42aa1.zip | |
* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@113865 138bc75d-0d04-0410-961f-82ee72b054a4
| -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 9baecb1796a..d71b1b4c276 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 383b07216ae..d52149889e3 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 55a6143d370..d205122263d 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; } |

