2004-04-02 Andrew Cagney <cagney@redhat.com>
authorAndrew Cagney <cagney@redhat.com>
Fri, 2 Apr 2004 20:21:07 +0000 (20:21 +0000)
committerAndrew Cagney <cagney@redhat.com>
Fri, 2 Apr 2004 20:21:07 +0000 (20:21 +0000)
* frame.c (get_prev_frame_1): Exclude signal trampolines from the
"previous frame inner to this frame" test.

gdb/ChangeLog
gdb/frame.c

index cf9cbdd426b69c522f455046e33042ef0d8dbb7c..151ade1e4438dfa54a54d6f76dad5626a0736acb 100644 (file)
@@ -1,3 +1,8 @@
+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.
index bc04397947389cb90c2fbd633447003fba27ccc8..1f45e8e09934dff385a984f355cf595038a8f377 100644 (file)
@@ -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?)");