aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Cagney <cagney@redhat.com>2004-04-02 20:21:07 +0000
committerAndrew Cagney <cagney@redhat.com>2004-04-02 20:21:07 +0000
commitadb54772d26f3651310c78860ccb383433a46337 (patch)
treec7ba2b0a6259f2e8803ef7ecd99760145ce7c8f8
parent304396fba9a40662a849f6a116351f3b508bcd68 (diff)
downloadgdb-adb54772d26f3651310c78860ccb383433a46337.zip
gdb-adb54772d26f3651310c78860ccb383433a46337.tar.gz
gdb-adb54772d26f3651310c78860ccb383433a46337.tar.bz2
2004-04-02 Andrew Cagney <cagney@redhat.com>
* frame.c (get_prev_frame_1): Exclude signal trampolines from the "previous frame inner to this frame" test.
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/frame.c7
2 files changed, 9 insertions, 3 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index cf9cbdd..151ade1 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,10 @@
2004-04-02 Andrew Cagney <cagney@redhat.com>
+ * frame.c (get_prev_frame_1): Exclude signal trampolines from the
+ "previous frame inner to this frame" test.
+
+2004-04-02 Andrew Cagney <cagney@redhat.com>
+
* frame.c (safe_frame_unwind_memory): New function.
* frame.h (safe_frame_unwind_memory): Declare. Update description
of /safe_/ methods.
diff --git a/gdb/frame.c b/gdb/frame.c
index bc04397..1f45e8e 100644
--- a/gdb/frame.c
+++ b/gdb/frame.c
@@ -1792,9 +1792,10 @@ get_prev_frame_1 (struct frame_info *this_frame)
/* Check that this frame's ID isn't inner to (younger, below, next)
the next frame. This happens when a frame unwind goes backwards.
- Since the sentinel frame doesn't really exist, don't compare the
- inner-most against that sentinel. */
- if (this_frame->level > 0
+ Exclude signal trampolines (due to sigaltstack the frame ID can
+ go backwards) and sentinel frames (the test is meaningless). */
+ if (this_frame->next->level >= 0
+ && this_frame->next->type != SIGTRAMP_FRAME
&& frame_id_inner (get_frame_id (this_frame),
get_frame_id (this_frame->next)))
error ("Previous frame inner to this frame (corrupt stack?)");