2005-05-01 Andrew Cagney <cagney@gnu.org>
[deliverable/binutils-gdb.git] / gdb / trad-frame.c
index f51998d42b8f5ef27223f524ca8a22050bc46e71..339ee34c6ecb57ca3bbc67b3125f88d4f398e6f9 100644 (file)
@@ -97,6 +97,23 @@ trad_frame_set_value (struct trad_frame_saved_reg this_saved_regs[],
   this_saved_regs[regnum].addr = val;
 }
 
+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)
@@ -114,11 +131,11 @@ trad_frame_set_unknown (struct trad_frame_saved_reg this_saved_regs[],
 }
 
 void
-trad_frame_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)
+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)
 {
   struct gdbarch *gdbarch = get_frame_arch (next_frame);
   if (trad_frame_addr_p (this_saved_regs, regnum))
@@ -137,9 +154,13 @@ trad_frame_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_prev_register (struct frame_info *next_frame,
     }
   else
     {
-      error ("Register %s not available",
+      error (_("Register %s not available"),
             gdbarch_register_name (gdbarch, regnum));
     }
 }
@@ -166,9 +187,9 @@ trad_frame_get_register (struct trad_frame_cache *this_trad_cache,
                         enum lval_type *lvalp, CORE_ADDR *addrp,
                         int *realregp, void *bufferp)
 {
-  trad_frame_prev_register (next_frame, this_trad_cache->prev_regs,
-                           regnum, optimizedp, lvalp, addrp, realregp,
-                           bufferp);
+  trad_frame_get_prev_register (next_frame, this_trad_cache->prev_regs,
+                               regnum, optimizedp, lvalp, addrp, realregp,
+                               bufferp);
 }
 
 void
@@ -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;
+}
This page took 0.024255 seconds and 4 git commands to generate.