2005-05-22 Andrew Cagney <cagney@gnu.org>
[external/binutils.git] / gdb / trad-frame.c
index 58f6c1b..ff2765c 100644 (file)
@@ -98,6 +98,23 @@ trad_frame_set_value (struct trad_frame_saved_reg this_saved_regs[],
 }
 
 void
+trad_frame_set_reg_value (struct trad_frame_cache *this_trad_cache,
+                         int regnum, LONGEST val)
+{
+  /* External interface for users of trad_frame_cache
+     (who cannot access the prev_regs object directly).  */
+  trad_frame_set_value (this_trad_cache->prev_regs, regnum, val);
+}
+
+void
+trad_frame_set_reg_realreg (struct trad_frame_cache *this_trad_cache,
+                           int regnum, int realreg)
+{
+  this_trad_cache->prev_regs[regnum].realreg = realreg;
+  this_trad_cache->prev_regs[regnum].addr = -1;
+}
+
+void
 trad_frame_set_reg_addr (struct trad_frame_cache *this_trad_cache,
                         int regnum, CORE_ADDR addr)
 {
@@ -118,7 +135,7 @@ trad_frame_get_prev_register (struct frame_info *next_frame,
                              struct trad_frame_saved_reg this_saved_regs[],
                              int regnum, int *optimizedp,
                              enum lval_type *lvalp, CORE_ADDR *addrp,
-                             int *realregp, void *bufferp)
+                             int *realregp, gdb_byte *bufferp)
 {
   struct gdbarch *gdbarch = get_frame_arch (next_frame);
   if (trad_frame_addr_p (this_saved_regs, regnum))
@@ -137,9 +154,13 @@ trad_frame_get_prev_register (struct frame_info *next_frame,
     }
   else if (trad_frame_realreg_p (this_saved_regs, regnum))
     {
+      *optimizedp = 0;
+      *lvalp = lval_register;
+      *addrp = 0;
+      *realregp = this_saved_regs[regnum].realreg;
       /* Ask the next frame to return the value of the register.  */
-      frame_register_unwind (next_frame, this_saved_regs[regnum].realreg,
-                            optimizedp, lvalp, addrp, realregp, bufferp);
+      if (bufferp)
+       frame_unwind_register (next_frame, (*realregp), bufferp);
     }
   else if (trad_frame_value_p (this_saved_regs, regnum))
     {
@@ -154,7 +175,7 @@ trad_frame_get_prev_register (struct frame_info *next_frame,
     }
   else
     {
-      error ("Register %s not available",
+      error (_("Register %s not available"),
             gdbarch_register_name (gdbarch, regnum));
     }
 }
@@ -164,7 +185,7 @@ trad_frame_get_register (struct trad_frame_cache *this_trad_cache,
                         struct frame_info *next_frame,
                         int regnum, int *optimizedp,
                         enum lval_type *lvalp, CORE_ADDR *addrp,
-                        int *realregp, void *bufferp)
+                        int *realregp, gdb_byte *bufferp)
 {
   trad_frame_get_prev_register (next_frame, this_trad_cache->prev_regs,
                                regnum, optimizedp, lvalp, addrp, realregp,
@@ -184,3 +205,16 @@ trad_frame_get_id (struct trad_frame_cache *this_trad_cache,
 {
   (*this_id) = this_trad_cache->this_id;
 }
+
+void
+trad_frame_set_this_base (struct trad_frame_cache *this_trad_cache,
+                         CORE_ADDR this_base)
+{
+  this_trad_cache->this_base = this_base;
+}
+
+CORE_ADDR
+trad_frame_get_this_base (struct trad_frame_cache *this_trad_cache)
+{
+  return this_trad_cache->this_base;
+}