]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
2004-05-01 Andrew Cagney <cagney@redhat.com>
authorAndrew Cagney <cagney@redhat.com>
Sat, 1 May 2004 19:35:22 +0000 (19:35 +0000)
committerAndrew Cagney <cagney@redhat.com>
Sat, 1 May 2004 19:35:22 +0000 (19:35 +0000)
* frame.c (create_sentinel_frame): Set type to SENTINEL_FRAME.
* dummy-frame.c (dummy_frame_this_id): Use get_frame_type, instead
of frame_relative_level.
* sentinel-frame.c (sentinel_frame_unwinder): Set unwinder's type
to SENTINEL_FRAME.
* frame.h (enum frame_type): Add SENTINEL_FRAME.
* s390-tdep.c (s390_prologue_frame_unwind_cache): Delete calls to
frame_relative_level.

gdb/ChangeLog
gdb/dummy-frame.c
gdb/frame.c
gdb/frame.h
gdb/s390-tdep.c
gdb/sentinel-frame.c

index 17fc35fe8b693fd38c963833ac7fb1158e362caa..fe6552b251df19faa519abd56a67c21d5cf3c571 100644 (file)
@@ -1,3 +1,14 @@
+2004-05-01  Andrew Cagney  <cagney@redhat.com>
+
+       * frame.c (create_sentinel_frame): Set type to SENTINEL_FRAME.
+       * dummy-frame.c (dummy_frame_this_id): Use get_frame_type, instead
+       of frame_relative_level.
+       * sentinel-frame.c (sentinel_frame_unwinder): Set unwinder's type
+       to SENTINEL_FRAME.
+       * frame.h (enum frame_type): Add SENTINEL_FRAME.
+       * s390-tdep.c (s390_prologue_frame_unwind_cache): Delete calls to
+       frame_relative_level.
+
 2004-05-01  Andrew Cagney  <cagney@redhat.com>
 
        * frame.h (deprecated_set_frame_type): Delete declaration.
index af8e0017fbf6899c3ba6db3fbf09676102c687c0..216db678ba9f69162aeaeeda52542c140a8efef6 100644 (file)
@@ -353,7 +353,7 @@ dummy_frame_this_id (struct frame_info *next_frame,
         determine the dummy frame's ID.  */
       (*this_id) = gdbarch_unwind_dummy_id (current_gdbarch, next_frame);
     }
-  else if (frame_relative_level (next_frame) < 0)
+  else if (get_frame_type (next_frame) == SENTINEL_FRAME)
     {
       /* We're unwinding a sentinel frame, the PC of which is pointing
         at a stack dummy.  Fake up the dummy frame's ID using the
index f120a160dbb15b2563e3d129f180d85bd9d63bf7..5359fd323a10d9d5558cd1025ce5e3a3eb4ea8bf 100644 (file)
@@ -767,7 +767,7 @@ static struct frame_info *
 create_sentinel_frame (struct regcache *regcache)
 {
   struct frame_info *frame = FRAME_OBSTACK_ZALLOC (struct frame_info);
-  frame->type = NORMAL_FRAME;
+  frame->type = SENTINEL_FRAME;
   frame->level = -1;
   /* Explicitly initialize the sentinel frame's cache.  Provide it
      with the underlying regcache.  In the future additional
index 617d3a1d3b639a5fc9b0882fe2fbd4dada4e06ae..a6e84a6c94786f544202cb108834ed0b6e50b595 100644 (file)
@@ -355,7 +355,10 @@ enum frame_type
   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
+  SIGTRAMP_FRAME,
+  /* Sentinel or registers frame.  This frame obtains register values
+     direct from the inferior's registers.  */
+  SENTINEL_FRAME
 };
 extern enum frame_type get_frame_type (struct frame_info *);
 
index 0f8f65d2f769f8ccf200e5eb2361ad700a257d84..6a5cd50857b248032c6c3edb64fb264fbea17396 100644 (file)
@@ -1803,10 +1803,10 @@ s390_prologue_frame_unwind_cache (struct frame_info *next_frame,
       /* If the next frame is a NORMAL_FRAME, this frame *cannot* have frame 
         size zero.  This is only possible if the next frame is a sentinel 
         frame, a dummy frame, or a signal trampoline frame.  */
-      if (get_frame_type (next_frame) == NORMAL_FRAME
-         /* For some reason, sentinel frames are NORMAL_FRAMEs
-            -- but they have negative frame level.  */
-         && frame_relative_level (next_frame) >= 0)
+      /* FIXME: cagney/2004-05-01: This sanity check shouldn't be
+        needed, instead the code should simpliy rely on its
+        analysis.  */
+      if (get_frame_type (next_frame) == NORMAL_FRAME)
        return 0;
 
       /* If we really have a frameless function, %r14 must be valid
@@ -1850,9 +1850,9 @@ s390_prologue_frame_unwind_cache (struct frame_info *next_frame,
      treat it as frameless if we're currently within the function epilog 
      code at a point where the frame pointer has already been restored.  
      This can only happen in an innermost frame.  */
-  if (size > 0
-      && (get_frame_type (next_frame) != NORMAL_FRAME
-         || frame_relative_level (next_frame) < 0))
+  /* FIXME: cagney/2004-05-01: This sanity check shouldn't be needed,
+     instead the code should simpliy rely on its analysis.  */
+  if (size > 0 && get_frame_type (next_frame) != NORMAL_FRAME)
     {
       /* See the comment in s390_in_function_epilogue_p on why this is
         not completely reliable ...  */
index 94c1ee31311ecd873e67ef9a0d26aaacf88f0f84..f1e5c7fcc2c6c587c352b0fa63ea67e764b749ce 100644 (file)
@@ -83,8 +83,7 @@ sentinel_frame_this_id (struct frame_info *next_frame,
 
 const struct frame_unwind sentinel_frame_unwinder =
 {
-  /* Should the sentinel frame be given a special type?  */
-  NORMAL_FRAME,
+  SENTINEL_FRAME,
   sentinel_frame_this_id,
   sentinel_frame_prev_register
 };