aboutsummaryrefslogtreecommitdiff
path: root/gdb/config/i386/tm-linux.h
diff options
context:
space:
mode:
authorMark Kettenis <kettenis@gnu.org>2001-03-28 11:36:23 +0000
committerMark Kettenis <kettenis@gnu.org>2001-03-28 11:36:23 +0000
commitb05f243280c921455098656b2fdafecdd58f9cb4 (patch)
treed21f91508baa5286547daaf456c10e96ff4614ac /gdb/config/i386/tm-linux.h
parent0eebe06ae61dcaabe4e917a4ab5c3823528af1f5 (diff)
downloadgdb-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/tm-linux.h')
-rw-r--r--gdb/config/i386/tm-linux.h36
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)