This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[RFC 4/5] Convert trad-frame / tramp-frame


As it says.  This doesn't convert their callers, though, which need to
be updated individually.  Next message will do the x86 ones.

-- 
Daniel Jacobowitz
CodeSourcery

2008-03-31  Daniel Jacobowitz  <dan@codesourcery.com>

	* trad-frame.c (struct trad_frame_cache): Rename next_frame to this_frame.
	(trad_frame_cache_zalloc, trad_frame_alloc_saved_regs): Expect
	this_frame.
	(trad_frame_get_prev_register, trad_frame_get_register): Update signature.
	* trad-frame.h (trad_frame_cache_zalloc, trad_frame_get_register)
	(trad_frame_alloc_saved_regs, trad_frame_get_prev_register): Update
	signature.
	* tramp-frame.c (tramp_frame_cache, tramp_frame_start): Expect
	this_frame.
	(tramp_frame_this_id, tramp_frame_prev_register, tramp_frame_sniffer):
	Update signature.
	* tramp-frame.h (struct tramp_frame): Update signature of init.
	* Makefile.in (trad-frame.o): Update.

---
 gdb/Makefile.in   |    2 -
 gdb/trad-frame.c  |   84 +++++++++++++++++-------------------------------------
 gdb/trad-frame.h  |   20 +++++-------
 gdb/tramp-frame.c |   37 ++++++++++-------------
 gdb/tramp-frame.h |    2 -
 5 files changed, 53 insertions(+), 92 deletions(-)

Index: src/gdb/trad-frame.c
===================================================================
--- src.orig/gdb/trad-frame.c	2008-03-31 14:40:20.000000000 -0400
+++ src/gdb/trad-frame.c	2008-03-31 14:47:43.000000000 -0400
@@ -21,23 +21,25 @@
 #include "frame.h"
 #include "trad-frame.h"
 #include "regcache.h"
+#include "frame-unwind.h"
+#include "value.h"
 
 struct trad_frame_cache
 {
-  struct frame_info *next_frame;
+  struct frame_info *this_frame;
   CORE_ADDR this_base;
   struct trad_frame_saved_reg *prev_regs;
   struct frame_id this_id;
 };
 
 struct trad_frame_cache *
-trad_frame_cache_zalloc (struct frame_info *next_frame)
+trad_frame_cache_zalloc (struct frame_info *this_frame)
 {
   struct trad_frame_cache *this_trad_cache;
 
   this_trad_cache = FRAME_OBSTACK_ZALLOC (struct trad_frame_cache);
-  this_trad_cache->prev_regs = trad_frame_alloc_saved_regs (next_frame);
-  this_trad_cache->next_frame = next_frame;
+  this_trad_cache->prev_regs = trad_frame_alloc_saved_regs (this_frame);
+  this_trad_cache->this_frame = this_frame;
   return this_trad_cache;
 }
 
@@ -47,10 +49,10 @@ trad_frame_cache_zalloc (struct frame_in
    for all potential instruction sequences).  */
 
 struct trad_frame_saved_reg *
-trad_frame_alloc_saved_regs (struct frame_info *next_frame)
+trad_frame_alloc_saved_regs (struct frame_info *this_frame)
 {
   int regnum;
-  struct gdbarch *gdbarch = get_frame_arch (next_frame);
+  struct gdbarch *gdbarch = get_frame_arch (this_frame);
   int numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
   struct trad_frame_saved_reg *this_saved_regs
     = FRAME_OBSTACK_CALLOC (numregs, struct trad_frame_saved_reg);
@@ -128,66 +130,34 @@ trad_frame_set_unknown (struct trad_fram
   this_saved_regs[regnum].addr = -1;
 }
 
-void
-trad_frame_get_prev_register (struct frame_info *next_frame,
+struct value *
+trad_frame_get_prev_register (struct frame_info *this_frame,
 			      struct trad_frame_saved_reg this_saved_regs[],
-			      int regnum, int *optimizedp,
-			      enum lval_type *lvalp, CORE_ADDR *addrp,
-			      int *realregp, gdb_byte *bufferp)
+			      int regnum)
 {
-  struct gdbarch *gdbarch = get_frame_arch (next_frame);
+  struct gdbarch *gdbarch = get_frame_arch (this_frame);
   if (trad_frame_addr_p (this_saved_regs, regnum))
-    {
-      /* The register was saved in memory.  */
-      *optimizedp = 0;
-      *lvalp = lval_memory;
-      *addrp = this_saved_regs[regnum].addr;
-      *realregp = -1;
-      if (bufferp != NULL)
-	{
-	  /* Read the value in from memory.  */
-	  get_frame_memory (next_frame, this_saved_regs[regnum].addr, bufferp,
-			    register_size (gdbarch, regnum));
-	}
-    }
+    /* The register was saved in memory.  */
+    return frame_unwind_got_memory (this_frame, regnum,
+				    this_saved_regs[regnum].addr);
   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.  */
-      if (bufferp)
-	frame_unwind_register (next_frame, (*realregp), bufferp);
-    }
+    return frame_unwind_got_register (this_frame, regnum,
+				      this_saved_regs[regnum].realreg);
   else if (trad_frame_value_p (this_saved_regs, regnum))
-    {
-      /* The register's value is available.  */
-      *optimizedp = 0;
-      *lvalp = not_lval;
-      *addrp = 0;
-      *realregp = -1;
-      if (bufferp != NULL)
-	store_unsigned_integer (bufferp, register_size (gdbarch, regnum),
-				this_saved_regs[regnum].addr);
-    }
+    /* The register's value is available.  */
+    return frame_unwind_got_constant (this_frame, regnum,
+				      this_saved_regs[regnum].addr);
   else
-    {
-      error (_("Register %s not available"),
-	     gdbarch_register_name (gdbarch, regnum));
-    }
+    return frame_unwind_got_optimized (this_frame, regnum);
 }
 
-void
+struct value *
 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, gdb_byte *bufferp)
-{
-  trad_frame_get_prev_register (next_frame, this_trad_cache->prev_regs,
-				regnum, optimizedp, lvalp, addrp, realregp,
-				bufferp);
+			 struct frame_info *this_frame,
+			 int regnum)
+{
+  return trad_frame_get_prev_register (this_frame, this_trad_cache->prev_regs,
+				       regnum);
 }
 
 void
Index: src/gdb/trad-frame.h
===================================================================
--- src.orig/gdb/trad-frame.h	2008-03-31 14:40:20.000000000 -0400
+++ src/gdb/trad-frame.h	2008-03-31 14:47:23.000000000 -0400
@@ -30,7 +30,7 @@ struct trad_frame_cache;
    The entire cache is populated in a single pass and then generic
    routines are used to extract the various cache values.  */
 
-struct trad_frame_cache *trad_frame_cache_zalloc (struct frame_info *next_frame);
+struct trad_frame_cache *trad_frame_cache_zalloc (struct frame_info *this_frame);
 
 /* This frame's ID.  */
 void trad_frame_set_id (struct trad_frame_cache *this_trad_cache,
@@ -50,11 +50,9 @@ void trad_frame_set_reg_addr (struct tra
 void trad_frame_set_reg_value (struct trad_frame_cache *this_cache,
 			       int regnum, LONGEST val);
 
-void 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, gdb_byte *bufferp);
+struct value *trad_frame_get_register (struct trad_frame_cache *this_trad_cache,
+				       struct frame_info *this_frame,
+				       int regnum);
 
 /* A traditional saved regs table, indexed by REGNUM, encoding where
    the value of REGNUM for the previous frame can be found in this
@@ -107,14 +105,12 @@ int trad_frame_realreg_p (struct trad_fr
 
 
 /* Return a freshly allocated (and initialized) trad_frame array.  */
-struct trad_frame_saved_reg *trad_frame_alloc_saved_regs (struct frame_info *next_frame);
+struct trad_frame_saved_reg *trad_frame_alloc_saved_regs (struct frame_info *this_frame);
 
 /* Given the trad_frame info, return the location of the specified
    register.  */
-void 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, gdb_byte *bufferp);
+struct value *trad_frame_get_prev_register (struct frame_info *this_frame,
+					    struct trad_frame_saved_reg this_saved_regs[],
+					    int regnum);
 
 #endif
Index: src/gdb/tramp-frame.c
===================================================================
--- src.orig/gdb/tramp-frame.c	2008-03-31 14:40:20.000000000 -0400
+++ src/gdb/tramp-frame.c	2008-03-31 14:47:23.000000000 -0400
@@ -41,16 +41,16 @@ struct tramp_frame_cache
 };
 
 static struct trad_frame_cache *
-tramp_frame_cache (struct frame_info *next_frame,
+tramp_frame_cache (struct frame_info *this_frame,
 		   void **this_cache)
 {
-  CORE_ADDR pc = frame_pc_unwind (next_frame);
+  CORE_ADDR pc = get_frame_pc (this_frame);
   struct tramp_frame_cache *tramp_cache = (*this_cache);
   if (tramp_cache->trad_cache == NULL)
     {
-      tramp_cache->trad_cache = trad_frame_cache_zalloc (next_frame);
+      tramp_cache->trad_cache = trad_frame_cache_zalloc (this_frame);
       tramp_cache->tramp_frame->init (tramp_cache->tramp_frame,
-				      next_frame,
+				      this_frame,
 				      tramp_cache->trad_cache,
 				      tramp_cache->func);
     }
@@ -58,33 +58,28 @@ tramp_frame_cache (struct frame_info *ne
 }
 
 static void
-tramp_frame_this_id (struct frame_info *next_frame,
+tramp_frame_this_id (struct frame_info *this_frame,
 		     void **this_cache,
 		     struct frame_id *this_id)
 {
   struct trad_frame_cache *trad_cache
-    = tramp_frame_cache (next_frame, this_cache);
+    = tramp_frame_cache (this_frame, this_cache);
   trad_frame_get_id (trad_cache, this_id);
 }
 
-static void
-tramp_frame_prev_register (struct frame_info *next_frame,
+static struct value *
+tramp_frame_prev_register (struct frame_info *this_frame,
 			   void **this_cache,
-			   int prev_regnum,
-			   int *optimizedp,
-			   enum lval_type * lvalp,
-			   CORE_ADDR *addrp,
-			   int *realnump, gdb_byte *valuep)
+			   int prev_regnum)
 {
   struct trad_frame_cache *trad_cache
-    = tramp_frame_cache (next_frame, this_cache);
-  trad_frame_get_register (trad_cache, next_frame, prev_regnum, optimizedp,
-			   lvalp, addrp, realnump, valuep);
+    = tramp_frame_cache (this_frame, this_cache);
+  return trad_frame_get_register (trad_cache, this_frame, prev_regnum);
 }
 
 static CORE_ADDR
 tramp_frame_start (const struct tramp_frame *tramp,
-		   struct frame_info *next_frame, CORE_ADDR pc)
+		   struct frame_info *this_frame, CORE_ADDR pc)
 {
   int ti;
   /* Search through the trampoline for one that matches the
@@ -99,7 +94,7 @@ tramp_frame_start (const struct tramp_fr
 	  ULONGEST insn;
 	  if (tramp->insn[i].bytes == TRAMP_SENTINEL_INSN)
 	    return func;
-	  if (!safe_frame_unwind_memory (next_frame,
+	  if (!safe_frame_unwind_memory (this_frame,
 					 func + i * tramp->insn_size,
 					 buf, tramp->insn_size))
 	    break;
@@ -114,11 +109,11 @@ tramp_frame_start (const struct tramp_fr
 
 static int
 tramp_frame_sniffer (const struct frame_unwind *self,
-		     struct frame_info *next_frame,
+		     struct frame_info *this_frame,
 		     void **this_cache)
 {
   const struct tramp_frame *tramp = self->unwind_data->tramp_frame;
-  CORE_ADDR pc = frame_pc_unwind (next_frame);
+  CORE_ADDR pc = get_frame_pc (this_frame);
   CORE_ADDR func;
   struct tramp_frame_cache *tramp_cache;
 
@@ -126,7 +121,7 @@ tramp_frame_sniffer (const struct frame_
      section, then this is not a trampoline.  However, this assumption is
      false on HPUX which has a signal trampoline that has a name; it can
      also be false when using an alternative signal stack.  */
-  func = tramp_frame_start (tramp, next_frame, pc);
+  func = tramp_frame_start (tramp, this_frame, pc);
   if (func == 0)
     return 0;
   tramp_cache = FRAME_OBSTACK_ZALLOC (struct tramp_frame_cache);
Index: src/gdb/tramp-frame.h
===================================================================
--- src.orig/gdb/tramp-frame.h	2008-03-31 14:40:20.000000000 -0400
+++ src/gdb/tramp-frame.h	2008-03-31 14:47:23.000000000 -0400
@@ -66,7 +66,7 @@ struct tramp_frame
   /* Initialize a trad-frame cache corresponding to the tramp-frame.
      FUNC is the address of the instruction TRAMP[0] in memory.  */
   void (*init) (const struct tramp_frame *self,
-		struct frame_info *next_frame,
+		struct frame_info *this_frame,
 		struct trad_frame_cache *this_cache,
 		CORE_ADDR func);
 };
Index: src/gdb/Makefile.in
===================================================================
--- src.orig/gdb/Makefile.in	2008-03-31 14:40:20.000000000 -0400
+++ src/gdb/Makefile.in	2008-03-31 14:47:23.000000000 -0400
@@ -2901,7 +2901,7 @@ tracepoint.o: tracepoint.c $(defs_h) $(s
 	$(block_h) $(dictionary_h) $(ax_h) $(ax_gdb_h) $(readline_h) \
 	$(readline_history_h)
 trad-frame.o: trad-frame.c $(defs_h) $(frame_h) $(trad_frame_h) \
-	$(regcache_h)
+	$(regcache_h) $(frame_unwind_h) $(value_h)
 tramp-frame.o: tramp-frame.c $(defs_h) $(tramp_frame_h) $(frame_unwind_h) \
 	$(gdbcore_h) $(symtab_h) $(objfiles_h) $(target_h) $(trad_frame_h) \
 	$(frame_base_h) $(gdb_assert_h)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]