diff options
author | Mark Kettenis <kettenis@gnu.org> | 2001-03-28 11:36:23 +0000 |
---|---|---|
committer | Mark Kettenis <kettenis@gnu.org> | 2001-03-28 11:36:23 +0000 |
commit | b05f243280c921455098656b2fdafecdd58f9cb4 (patch) | |
tree | d21f91508baa5286547daaf456c10e96ff4614ac /gdb/config/i386 | |
parent | 0eebe06ae61dcaabe4e917a4ab5c3823528af1f5 (diff) | |
download | gdb-b05f243280c921455098656b2fdafecdd58f9cb4.zip gdb-b05f243280c921455098656b2fdafecdd58f9cb4.tar.gz gdb-b05f243280c921455098656b2fdafecdd58f9cb4.tar.bz2 |
* i386-linux-tdep.c (FRAMELESS_SIGNAL): Moved here from
config/i386/nm-linux.h (including comment).
(i386_linux_frame_chain): New function implementing guts of the
former FRAME_CHAIN macro, but using read_memory_unsigned_integer
instead of read_memory_integer.
(i386_linux_frame_saved_pc): Removed doc pointing to
i386/tm-linux.h for an explanation of FRAMELESS_SIGNAL since that
now lives in this file.
* config/i386/tm-linux.h (FRAMELESS_SIGNAL): Moved to
i386-linux-tdep.c (including comment).
(FRAME_CHAIN): Redefined in terms of i386_linux_frame_chain.
(i386_linux_frame_chain): New prototype.
Diffstat (limited to 'gdb/config/i386')
-rw-r--r-- | gdb/config/i386/tm-linux.h | 36 |
1 files changed, 2 insertions, 34 deletions
diff --git a/gdb/config/i386/tm-linux.h b/gdb/config/i386/tm-linux.h index 6c34498..acfecf5 100644 --- a/gdb/config/i386/tm-linux.h +++ b/gdb/config/i386/tm-linux.h @@ -46,41 +46,9 @@ extern struct link_map_offsets *i386_linux_svr4_fetch_link_map_offsets (void); #define IN_SIGTRAMP(pc, name) i386_linux_in_sigtramp (pc, name) extern int i386_linux_in_sigtramp (CORE_ADDR, char *); -/* Signal trampolines don't have a meaningful frame. As in tm-i386.h, - the frame pointer value we use is actually the frame pointer of the - calling frame--that is, the frame which was in progress when the - signal trampoline was entered. gdb mostly treats this frame - pointer value as a magic cookie. We detect the case of a signal - trampoline by looking at the SIGNAL_HANDLER_CALLER field, which is - set based on IN_SIGTRAMP. - - When a signal trampoline is invoked from a frameless function, we - essentially have two frameless functions in a row. In this case, - we use the same magic cookie for three frames in a row. We detect - this case by seeing whether the next frame has - SIGNAL_HANDLER_CALLER set, and, if it does, checking whether the - current frame is actually frameless. In this case, we need to get - the PC by looking at the SP register value stored in the signal - context. - - This should work in most cases except in horrible situations where - a signal occurs just as we enter a function but before the frame - has been set up. */ - -#define FRAMELESS_SIGNAL(FRAME) \ - ((FRAME)->next != NULL \ - && (FRAME)->next->signal_handler_caller \ - && frameless_look_for_prologue (FRAME)) - #undef FRAME_CHAIN -#define FRAME_CHAIN(FRAME) \ - ((FRAME)->signal_handler_caller \ - ? (FRAME)->frame \ - : (FRAMELESS_SIGNAL (FRAME) \ - ? (FRAME)->frame \ - : (!inside_entry_file ((FRAME)->pc) \ - ? read_memory_integer ((FRAME)->frame, 4) \ - : 0))) +#define FRAME_CHAIN(frame) i386_linux_frame_chain (frame) +extern CORE_ADDR i386_linux_frame_chain (struct frame_info *frame); #undef FRAME_SAVED_PC #define FRAME_SAVED_PC(frame) i386_linux_frame_saved_pc (frame) |