aboutsummaryrefslogtreecommitdiff
path: root/gdb/frame.h
diff options
context:
space:
mode:
authorAndrew Cagney <cagney@redhat.com>2002-11-18 22:19:33 +0000
committerAndrew Cagney <cagney@redhat.com>2002-11-18 22:19:33 +0000
commit5a203e440538bfe04bb982e79a45d00a88a5fec4 (patch)
tree2e58b68ec024b9d81549acc11f28a1081fad08f4 /gdb/frame.h
parentbf4ae8b20cfcab37be62dbb12aed10a997a09616 (diff)
downloadgdb-5a203e440538bfe04bb982e79a45d00a88a5fec4.zip
gdb-5a203e440538bfe04bb982e79a45d00a88a5fec4.tar.gz
gdb-5a203e440538bfe04bb982e79a45d00a88a5fec4.tar.bz2
2002-11-18 Andrew Cagney <ac131313@redhat.com>
* frame.h (enum frame_type): Define. (get_frame_type): Declare. (struct frame_info): Add field `type'. Delete field signal_handler_caller. (deprecated_set_frame_signal_handler_caller): Declare. * frame.c (get_frame_type): New function. (deprecated_set_frame_type): New function. (create_new_frame): Set the frame's type. (get_prev_frame): Similar. * sparc-tdep.c: Use get_frame_type instead of signal_handler_caller. * s390-tdep.c: Ditto. * m68klinux-nat.c: Ditto. * ns32k-tdep.c: Ditto. * x86-64-linux-tdep.c: Ditto. * vax-tdep.c: Ditto. * rs6000-tdep.c: Ditto. * ppc-linux-tdep.c: Ditto. * i386-interix-tdep.c: Ditto. * mips-tdep.c: Ditto. * m68k-tdep.c: Ditto. * hppa-tdep.c: Ditto. * ia64-tdep.c: Ditto. * cris-tdep.c: Ditto. * arm-tdep.c: Ditto. * alpha-tdep.c: Ditto. * i386-tdep.c: Ditto. * stack.c: Ditto. * ada-lang.c: Ditto. * blockframe.c: Update. * i386-interix-tdep.c (i386_interix_back_one_frame): Use deprecated_set_frame_type instead of signal_handler_caller. * ppc-linux-tdep.c (ppc_linux_init_extra_frame_info): Ditto. * rs6000-tdep.c (rs6000_init_extra_frame_info): Ditto. * breakpoint.h: Delete FIXME suggesting get_frame_type. Index: tui/ChangeLog 2002-11-18 Andrew Cagney <ac131313@redhat.com> * tuiStack.c (tuiShowFrameInfo): Use get_frame_type instead of signal_handler_caller.
Diffstat (limited to 'gdb/frame.h')
-rw-r--r--gdb/frame.h40
1 files changed, 31 insertions, 9 deletions
diff --git a/gdb/frame.h b/gdb/frame.h
index 1872f4f..269f11e 100644
--- a/gdb/frame.h
+++ b/gdb/frame.h
@@ -93,6 +93,35 @@ extern void get_frame_id (struct frame_info *fi, struct frame_id *id);
for an invalid frame). */
extern int frame_relative_level (struct frame_info *fi);
+/* Return the frame's type. Some are real, some are signal
+ trampolines, and some are completly artificial (dummy). */
+
+enum frame_type
+{
+ /* A true stack frame, created by the target program during normal
+ execution. */
+ NORMAL_FRAME,
+ /* A fake frame, created by GDB when performing an inferior function
+ call. */
+ DUMMY_FRAME,
+ /* In a signal handler, various OSs handle this in various ways.
+ The main thing is that the frame may be far from normal. */
+ SIGTRAMP_FRAME
+};
+extern enum frame_type get_frame_type (struct frame_info *);
+
+/* FIXME: cagney/2002-11-10: Some targets want to directly mark a
+ frame as being of a specific type. This shouldn't be necessary.
+ PC_IN_SIGTRAMP() indicates a SIGTRAMP_FRAME and PC_IN_CALL_DUMMY()
+ indicates a DUMMY_FRAME. I suspect the real problem here is that
+ get_prev_frame() only sets initialized after INIT_EXTRA_FRAME_INFO
+ as been called. Consequently, some targets found that the frame's
+ type was wrong and tried to fix it. The correct fix is to modify
+ get_prev_frame() so that it initializes the frame's type before
+ calling any other functions. */
+extern void deprecated_set_frame_type (struct frame_info *,
+ enum frame_type type);
+
/* Unwind the stack frame so that the value of REGNUM, in the previous
(up, older) frame is returned. If VALUEP is NULL, don't
fetch/compute the value. Instead just return the location of the
@@ -227,15 +256,8 @@ struct frame_info
moment leave this as speculation. */
int level;
- /* Nonzero if this is a frame associated with calling a signal handler.
-
- Set by machine-dependent code. On some machines, if
- the machine-dependent code fails to check for this, the backtrace
- will look relatively normal. For example, on the i386
- #3 0x158728 in sighold ()
- On other machines (e.g. rs6000), the machine-dependent code better
- set this to prevent us from trying to print it like a normal frame. */
- int signal_handler_caller;
+ /* The frame's type. */
+ enum frame_type type;
/* For each register, address of where it was saved on entry to
the frame, or zero if it was not saved on entry to this frame.