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]

Re: [rfc] [06/09] Get rid of current_gdbarch (trivial replacements)


Ulrich Weigand schrieb:
Markus Deuling wrote:

	* shnbsd-tdep.c (shnbsd_supply_gregset, shnbsd_collect_gregset): Use
	get_regcache_arch to get at the current architecture by regcache.
	* xstormy16-tdep.c (xstormy16_frame_prev_register): Use get_frame_arch
	to get at the current architecture by frame_info.
	* fbsd-nat.c (fbsd_make_corefile_notes): Use get_regcache_arch to get
	at the current architecture by regcache.
	* gnu-v3-abi.c (gnuv3_skip_trampoline): Use get_frame_arch to get at
	the current architecture by frame_info.
	(build_gdb_vtable_type): Replace current_gdbarch by gdbarch.
	* aix-thread.c (special_register_p): Add gdbarch as parameter.
	(fetch_regs_kernel_thread, store_regs_kernel_thread): Add gdbarch to
	caller of special_register_p.

This is OK, except that


    We use this function as the gdbarch per-architecture data
    initialization function.  We assume that the gdbarch framework
    calls the per-architecture data initialization functions after it
-   sets current_gdbarch to the new architecture.  */
+   sets gdbarch to the new architecture.  */

after this change the comment no longer makes sense, as there is no particular assumption about current_gdbarch left in the code. You should simply remove the sentence starting with "We assume ...".

Bye,
Ulrich


I've corrected the comments and committed following patch. Thank you very much.


-- Markus Deuling GNU Toolchain for Linux on Cell BE deuling@de.ibm.com

diff -urpN src/gdb/aix-thread.c dev/gdb/aix-thread.c
--- src/gdb/aix-thread.c	2007-10-08 14:58:04.000000000 +0200
+++ dev/gdb/aix-thread.c	2007-11-06 08:59:57.000000000 +0100
@@ -1060,11 +1060,11 @@ supply_fprs (struct regcache *regcache, 
 
 /* Predicate to test whether given register number is a "special" register.  */
 static int
-special_register_p (int regno)
+special_register_p (struct gdbarch *gdbarch, int regno)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
+  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
 
-  return regno == gdbarch_pc_regnum (current_gdbarch)
+  return regno == gdbarch_pc_regnum (gdbarch)
       || regno == tdep->ppc_ps_regnum
       || regno == tdep->ppc_cr_regnum
       || regno == tdep->ppc_lr_regnum
@@ -1237,7 +1237,7 @@ fetch_regs_kernel_thread (struct regcach
 
   /* Special-purpose registers.  */
 
-  if (regno == -1 || special_register_p (regno))
+  if (regno == -1 || special_register_p (gdbarch, regno))
     {
       if (arch64)
 	{
@@ -1554,7 +1554,7 @@ store_regs_kernel_thread (const struct r
 
   /* Special-purpose registers.  */
 
-  if (regno == -1 || special_register_p (regno))
+  if (regno == -1 || special_register_p (gdbarch, regno))
     {
       if (arch64)
 	{
diff -urpN src/gdb/fbsd-nat.c dev/gdb/fbsd-nat.c
--- src/gdb/fbsd-nat.c	2007-08-23 20:08:31.000000000 +0200
+++ dev/gdb/fbsd-nat.c	2007-11-06 08:59:57.000000000 +0100
@@ -143,8 +143,8 @@ fbsd_find_memory_regions (int (*func) (C
 char *
 fbsd_make_corefile_notes (bfd *obfd, int *note_size)
 {
-  struct gdbarch *gdbarch = current_gdbarch;
   const struct regcache *regcache = get_current_regcache ();
+  struct gdbarch *gdbarch = get_regcache_arch (regcache);
   gregset_t gregs;
   fpregset_t fpregs;
   char *note_data = NULL;
diff -urpN src/gdb/gnu-v3-abi.c dev/gdb/gnu-v3-abi.c
--- src/gdb/gnu-v3-abi.c	2007-09-23 18:25:05.000000000 +0200
+++ dev/gdb/gnu-v3-abi.c	2007-11-06 09:01:01.000000000 +0100
@@ -98,9 +98,7 @@ enum {
    described above, laid out appropriately for ARCH.
 
    We use this function as the gdbarch per-architecture data
-   initialization function.  We assume that the gdbarch framework
-   calls the per-architecture data initialization functions after it
-   sets current_gdbarch to the new architecture.  */
+   initialization function.  */
 static void *
 build_gdb_vtable_type (struct gdbarch *arch)
 {
@@ -116,7 +114,7 @@ build_gdb_vtable_type (struct gdbarch *a
   /* ARCH can't give us the true ptrdiff_t type, so we guess.  */
   struct type *ptrdiff_type
     = init_type (TYPE_CODE_INT,
-		 gdbarch_ptr_bit (current_gdbarch) / TARGET_CHAR_BIT, 0,
+		 gdbarch_ptr_bit (arch) / TARGET_CHAR_BIT, 0,
                  "ptrdiff_t", 0);
 
   /* We assume no padding is necessary, since GDB doesn't know
@@ -680,12 +678,12 @@ static CORE_ADDR 
 gnuv3_skip_trampoline (struct frame_info *frame, CORE_ADDR stop_pc)
 {
   CORE_ADDR real_stop_pc, method_stop_pc;
+  struct gdbarch *gdbarch = get_frame_arch (frame);
   struct minimal_symbol *thunk_sym, *fn_sym;
   struct obj_section *section;
   char *thunk_name, *fn_name;
   
-  real_stop_pc = gdbarch_skip_trampoline_code
-		   (current_gdbarch, frame, stop_pc);
+  real_stop_pc = gdbarch_skip_trampoline_code (gdbarch, frame, stop_pc);
   if (real_stop_pc == 0)
     real_stop_pc = stop_pc;
 
@@ -709,7 +707,7 @@ gnuv3_skip_trampoline (struct frame_info
 
   method_stop_pc = SYMBOL_VALUE_ADDRESS (fn_sym);
   real_stop_pc = gdbarch_skip_trampoline_code
-		   (current_gdbarch, frame, method_stop_pc);
+		   (gdbarch, frame, method_stop_pc);
   if (real_stop_pc == 0)
     real_stop_pc = method_stop_pc;
 
diff -urpN src/gdb/shnbsd-tdep.c dev/gdb/shnbsd-tdep.c
--- src/gdb/shnbsd-tdep.c	2007-08-23 20:08:38.000000000 +0200
+++ dev/gdb/shnbsd-tdep.c	2007-11-06 08:59:57.000000000 +0100
@@ -67,14 +67,14 @@ shnbsd_supply_gregset (const struct regs
 		       struct regcache *regcache,
 		       int regnum, const void *gregs, size_t len)
 {
+  struct gdbarch *gdbarch = get_regcache_arch (regcache);
   const gdb_byte *regs = gregs;
   int i;
 
   gdb_assert (len >= SHNBSD_SIZEOF_GREGS);
 
-  if (regnum == gdbarch_pc_regnum (current_gdbarch) || regnum == -1)
-    regcache_raw_supply (regcache,
-			 gdbarch_pc_regnum (current_gdbarch),
+  if (regnum == gdbarch_pc_regnum (gdbarch) || regnum == -1)
+    regcache_raw_supply (regcache, gdbarch_pc_regnum (gdbarch),
 			 regs + (0 * 4));
 
   if (regnum == SR_REGNUM || regnum == -1)
@@ -106,13 +106,14 @@ shnbsd_collect_gregset (const struct reg
 			const struct regcache *regcache,
 			int regnum, void *gregs, size_t len)
 {
+  struct gdbarch *gdbarch = get_regcache_arch (regcache);
   gdb_byte *regs = gregs;
   int i;
 
   gdb_assert (len >= SHNBSD_SIZEOF_GREGS);
 
-  if (regnum == gdbarch_pc_regnum (current_gdbarch) || regnum == -1)
-    regcache_raw_collect (regcache, gdbarch_pc_regnum (current_gdbarch),
+  if (regnum == gdbarch_pc_regnum (gdbarch) || regnum == -1)
+    regcache_raw_collect (regcache, gdbarch_pc_regnum (gdbarch),
 			  regs + (0 * 4));
 
   if (regnum == SR_REGNUM || regnum == -1)
diff -urpN src/gdb/xstormy16-tdep.c dev/gdb/xstormy16-tdep.c
--- src/gdb/xstormy16-tdep.c	2007-11-05 05:32:22.000000000 +0100
+++ dev/gdb/xstormy16-tdep.c	2007-11-06 08:59:57.000000000 +0100
@@ -705,7 +705,7 @@ xstormy16_frame_prev_register (struct fr
         {
           /* Read the value in from memory.  */
           read_memory (*addrp, valuep,
-                       register_size (current_gdbarch, regnum));
+                       register_size (get_frame_arch (next_frame), regnum));
         }
       return;
     }

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