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] Get rid of current_gdbarch in amd64


Hi,

this patch removes all but one remaining occurence of current_gdbarch in AMD64 targets.
I dont have access to an AMD64 machine. Maybe someone from this list has and could do a testrun
with this patch to see if there are regressions? Thanks a lot.

Would this be ok to commit?

ChangeLog:

* amd64-nat.h (amd64_native_gregset_supplies_p): Add gdbarch as parameter.
* amd64-nat.c (amd64_native_gregset_supplies_p): Likewise.


	(amd64_native_gregset_reg_offset): Add gdbarch as parameter. Replace
	current_gdbarch by gdbarch. Update caller.

	* amd64-linux-nat.c (amd64_linux_fetch_inferior_registers)
	(amd64_linux_store_inferior_registers): Use get_regcache_arch to get at
	the current architecture. Update calls of
	amd64_native_gregset_supplies_p.
	* amd64bsd-nat.c (amd64bsd_fetch_inferior_registers)
	(amd64bsd_store_inferior_registers): Likewise.


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

diff -urpN src/gdb/amd64bsd-nat.c dev/gdb/amd64bsd-nat.c
--- src/gdb/amd64bsd-nat.c	2008-01-01 23:53:09.000000000 +0100
+++ dev/gdb/amd64bsd-nat.c	2008-01-11 18:04:56.000000000 +0100
@@ -41,7 +41,9 @@
 static void
 amd64bsd_fetch_inferior_registers (struct regcache *regcache, int regnum)
 {
-  if (regnum == -1 || amd64_native_gregset_supplies_p (regnum))
+  struct gdbarch *gdbarch = get_regcache_arch (regcache);
+
+  if (regnum == -1 || amd64_native_gregset_supplies_p (gdbarch, regnum))
     {
       struct reg regs;
 
@@ -54,7 +56,7 @@ amd64bsd_fetch_inferior_registers (struc
 	return;
     }
 
-  if (regnum == -1 || !amd64_native_gregset_supplies_p (regnum))
+  if (regnum == -1 || !amd64_native_gregset_supplies_p (gdbarch, regnum))
     {
       struct fpreg fpregs;
 
@@ -72,7 +74,9 @@ amd64bsd_fetch_inferior_registers (struc
 static void
 amd64bsd_store_inferior_registers (struct regcache *regcache, int regnum)
 {
-  if (regnum == -1 || amd64_native_gregset_supplies_p (regnum))
+  struct gdbarch *gdbarch = get_regcache_arch (regcache);
+
+  if (regnum == -1 || amd64_native_gregset_supplies_p (gdbarch, regnum))
     {
       struct reg regs;
 
@@ -90,7 +94,7 @@ amd64bsd_store_inferior_registers (struc
 	return;
     }
 
-  if (regnum == -1 || !amd64_native_gregset_supplies_p (regnum))
+  if (regnum == -1 || !amd64_native_gregset_supplies_p (gdbarch, regnum))
     {
       struct fpreg fpregs;
 
diff -urpN src/gdb/amd64-linux-nat.c dev/gdb/amd64-linux-nat.c
--- src/gdb/amd64-linux-nat.c	2008-01-01 23:53:09.000000000 +0100
+++ dev/gdb/amd64-linux-nat.c	2008-01-11 18:03:17.000000000 +0100
@@ -157,6 +157,7 @@ fill_fpregset (const struct regcache *re
 static void
 amd64_linux_fetch_inferior_registers (struct regcache *regcache, int regnum)
 {
+  struct gdbarch *gdbarch = get_regcache_arch (regcache);
   int tid;
 
   /* GNU/Linux LWP ID's are process ID's.  */
@@ -164,7 +165,7 @@ amd64_linux_fetch_inferior_registers (st
   if (tid == 0)
     tid = PIDGET (inferior_ptid); /* Not a threaded program.  */
 
-  if (regnum == -1 || amd64_native_gregset_supplies_p (regnum))
+  if (regnum == -1 || amd64_native_gregset_supplies_p (gdbarch, regnum))
     {
       elf_gregset_t regs;
 
@@ -176,7 +177,7 @@ amd64_linux_fetch_inferior_registers (st
 	return;
     }
 
-  if (regnum == -1 || !amd64_native_gregset_supplies_p (regnum))
+  if (regnum == -1 || !amd64_native_gregset_supplies_p (gdbarch, regnum))
     {
       elf_fpregset_t fpregs;
 
@@ -194,6 +195,7 @@ amd64_linux_fetch_inferior_registers (st
 static void
 amd64_linux_store_inferior_registers (struct regcache *regcache, int regnum)
 {
+  struct gdbarch *gdbarch = get_regcache_arch (regcache);
   int tid;
 
   /* GNU/Linux LWP ID's are process ID's.  */
@@ -201,7 +203,7 @@ amd64_linux_store_inferior_registers (st
   if (tid == 0)
     tid = PIDGET (inferior_ptid); /* Not a threaded program.  */
 
-  if (regnum == -1 || amd64_native_gregset_supplies_p (regnum))
+  if (regnum == -1 || amd64_native_gregset_supplies_p (gdbarch, regnum))
     {
       elf_gregset_t regs;
 
@@ -217,7 +219,7 @@ amd64_linux_store_inferior_registers (st
 	return;
     }
 
-  if (regnum == -1 || !amd64_native_gregset_supplies_p (regnum))
+  if (regnum == -1 || !amd64_native_gregset_supplies_p (gdbarch, regnum))
     {
       elf_fpregset_t fpregs;
 
diff -urpN src/gdb/amd64-nat.c dev/gdb/amd64-nat.c
--- src/gdb/amd64-nat.c	2008-01-01 23:53:09.000000000 +0100
+++ dev/gdb/amd64-nat.c	2008-01-11 18:00:35.000000000 +0100
@@ -51,23 +51,23 @@ int amd64_native_gregset64_num_regs = AM
    general-purpose register set.  */
 
 static int
-amd64_native_gregset_reg_offset (int regnum)
+amd64_native_gregset_reg_offset (struct gdbarch *gdbarch, int regnum)
 {
   int *reg_offset = amd64_native_gregset64_reg_offset;
   int num_regs = amd64_native_gregset64_num_regs;
 
   gdb_assert (regnum >= 0);
 
-  if (gdbarch_ptr_bit (current_gdbarch) == 32)
+  if (gdbarch_ptr_bit (gdbarch) == 32)
     {
       reg_offset = amd64_native_gregset32_reg_offset;
       num_regs = amd64_native_gregset32_num_regs;
     }
 
-  if (num_regs > gdbarch_num_regs (current_gdbarch))
-    num_regs = gdbarch_num_regs (current_gdbarch);
+  if (num_regs > gdbarch_num_regs (gdbarch))
+    num_regs = gdbarch_num_regs (gdbarch);
 
-  if (regnum < num_regs && regnum < gdbarch_num_regs (current_gdbarch))
+  if (regnum < num_regs && regnum < gdbarch_num_regs (gdbarch))
     return reg_offset[regnum];
 
   return -1;
@@ -77,9 +77,9 @@ amd64_native_gregset_reg_offset (int reg
    register REGNUM.  */
 
 int
-amd64_native_gregset_supplies_p (int regnum)
+amd64_native_gregset_supplies_p (struct gdbarch *gdbarch, int regnum)
 {
-  return (amd64_native_gregset_reg_offset (regnum) != -1);
+  return (amd64_native_gregset_reg_offset (gdbarch, regnum) != -1);
 }
 
 
@@ -105,7 +105,7 @@ amd64_supply_native_gregset (struct regc
     {
       if (regnum == -1 || regnum == i)
 	{
-	  int offset = amd64_native_gregset_reg_offset (i);
+	  int offset = amd64_native_gregset_reg_offset (gdbarch, i);
 
 	  if (offset != -1)
 	    regcache_raw_supply (regcache, i, regs + offset);
@@ -135,13 +135,13 @@ amd64_collect_native_gregset (const stru
       for (i = 0; i <= I386_EIP_REGNUM; i++)
 	{
 	  if (regnum == -1 || regnum == i)
-	    memset (regs + amd64_native_gregset_reg_offset (i), 0, 8);
+	    memset (regs + amd64_native_gregset_reg_offset (gdbarch, i), 0, 8);
 	}
       /* Ditto for %cs, %ss, %ds, %es, %fs, and %gs.  */
       for (i = I386_CS_REGNUM; i <= I386_GS_REGNUM; i++)
 	{
 	  if (regnum == -1 || regnum == i)
-	    memset (regs + amd64_native_gregset_reg_offset (i), 0, 8);
+	    memset (regs + amd64_native_gregset_reg_offset (gdbarch, i), 0, 8);
 	}
     }
 
@@ -152,7 +152,7 @@ amd64_collect_native_gregset (const stru
     {
       if (regnum == -1 || regnum == i)
 	{
-	  int offset = amd64_native_gregset_reg_offset (i);
+	  int offset = amd64_native_gregset_reg_offset (gdbarch, i);
 
 	  if (offset != -1)
 	    regcache_raw_collect (regcache, i, regs + offset);
diff -urpN src/gdb/amd64-nat.h dev/gdb/amd64-nat.h
--- src/gdb/amd64-nat.h	2008-01-01 23:53:09.000000000 +0100
+++ dev/gdb/amd64-nat.h	2008-01-11 17:57:41.000000000 +0100
@@ -33,7 +33,8 @@ extern int amd64_native_gregset64_num_re
 /* Return whether the native general-purpose register set supplies
    register REGNUM.  */
 
-extern int amd64_native_gregset_supplies_p (int regnum);
+extern int amd64_native_gregset_supplies_p (struct gdbarch *gdbarch,
+					    int regnum);
 
 /* Supply register REGNUM, whose contents are store in BUF, to
    REGCACHE.  If REGNUM is -1, supply all appropriate registers.  */

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