Don't emit symbols seen only in dynamic object, don't read duplicate
[deliverable/binutils-gdb.git] / gdb / sentinel-frame.c
index 961e0300ea61725da9f7a3b5932f01cd9803131a..07a0c7f7f4cc14bb6a9b0818a5749710e99c76c5 100644 (file)
@@ -1,6 +1,6 @@
 /* Code dealing with register stack frames, for GDB, the GNU debugger.
 
 /* Code dealing with register stack frames, for GDB, the GNU debugger.
 
-   Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
+   Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
    1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software
    Foundation, Inc.
 
    1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software
    Foundation, Inc.
 
@@ -18,8 +18,8 @@
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
 
 
 #include "defs.h"
 
 
 #include "defs.h"
@@ -44,19 +44,19 @@ sentinel_frame_cache (struct regcache *regcache)
 
 /* Here the register value is taken direct from the register cache.  */
 
 
 /* Here the register value is taken direct from the register cache.  */
 
-void
-sentinel_frame_register_unwind (struct frame_info *frame,
-                               void **unwind_cache,
-                               int regnum, int *optimized,
-                               enum lval_type *lvalp, CORE_ADDR *addrp,
-                               int *realnum, void *bufferp)
+static void
+sentinel_frame_prev_register (struct frame_info *next_frame,
+                             void **this_prologue_cache,
+                             int regnum, int *optimized,
+                             enum lval_type *lvalp, CORE_ADDR *addrp,
+                             int *realnum, gdb_byte *bufferp)
 {
 {
-  struct frame_unwind_cache *cache = *unwind_cache;
+  struct frame_unwind_cache *cache = *this_prologue_cache;
   /* Describe the register's location.  A reg-frame maps all registers
      onto the corresponding hardware register.  */
   *optimized = 0;
   *lvalp = lval_register;
   /* Describe the register's location.  A reg-frame maps all registers
      onto the corresponding hardware register.  */
   *optimized = 0;
   *lvalp = lval_register;
-  *addrp = REGISTER_BYTE (regnum);
+  *addrp = register_offset_hack (current_gdbarch, regnum);
   *realnum = regnum;
 
   /* If needed, find and return the value of the register.  */
   *realnum = regnum;
 
   /* If needed, find and return the value of the register.  */
@@ -70,23 +70,33 @@ sentinel_frame_register_unwind (struct frame_info *frame,
     }
 }
 
     }
 }
 
-void
-sentinel_frame_id_unwind (struct frame_info *frame,
-                         void **cache,
-                         struct frame_id *id)
+static void
+sentinel_frame_this_id (struct frame_info *next_frame,
+                       void **this_prologue_cache,
+                       struct frame_id *this_id)
 {
 {
-  /* FIXME: cagney/2003-01-08: This should be using a per-architecture
-     method that doesn't suffer from DECR_PC_AFTER_BREAK problems.
-     Such a method would take unwind_cache, regcache and stop reason
-     parameters.  */
-  id->base = read_fp ();
-  id->pc = read_pc ();
+  /* The sentinel frame is used as a starting point for creating the
+     previous (inner most) frame.  That frame's THIS_ID method will be
+     called to determine the inner most frame's ID.  Not this one.  */
+  internal_error (__FILE__, __LINE__, _("sentinel_frame_this_id called"));
+}
+
+static CORE_ADDR
+sentinel_frame_prev_pc (struct frame_info *next_frame,
+                       void **this_prologue_cache)
+{
+  struct gdbarch *gdbarch = get_frame_arch (next_frame);
+  return gdbarch_unwind_pc (gdbarch, next_frame);
 }
 
 const struct frame_unwind sentinel_frame_unwinder =
 {
 }
 
 const struct frame_unwind sentinel_frame_unwinder =
 {
-  sentinel_frame_id_unwind,
-  sentinel_frame_register_unwind
+  SENTINEL_FRAME,
+  sentinel_frame_this_id,
+  sentinel_frame_prev_register,
+  NULL, /* unwind_data */
+  NULL, /* sniffer */
+  sentinel_frame_prev_pc,
 };
 
 const struct frame_unwind *const sentinel_frame_unwind = &sentinel_frame_unwinder;
 };
 
 const struct frame_unwind *const sentinel_frame_unwind = &sentinel_frame_unwinder;
This page took 0.028778 seconds and 4 git commands to generate.