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]

[commit] Unbreak MIPS port


There's no gdbarch argument to mips_xfer_register and there is a
regcache argument - but the regcache may be NULL so calling
get_regcache_arch on it is unsafe.  Pass the gdbarch instead.

Tested on mips-linux, checked in.

-- 
Daniel Jacobowitz
CodeSourcery

2007-10-18  Daniel Jacobowitz  <dan@codesourcery.com>

	* mips-tdep.c (mips_xfer_register): Take a gdbarch argument.
	(mips_n32n64_return_value, mips_o32_return_value)
	(mips_o64_return_value): Update calls to mips_xfer_register.

Index: mips-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/mips-tdep.c,v
retrieving revision 1.453
diff -u -p -r1.453 mips-tdep.c
--- mips-tdep.c	15 Oct 2007 19:45:30 -0000	1.453
+++ mips-tdep.c	18 Oct 2007 15:20:01 -0000
@@ -343,12 +343,12 @@ msymbol_is_special (struct minimal_symbo
    things accordingly.  */
 
 static void
-mips_xfer_register (struct regcache *regcache, int reg_num, int length,
+mips_xfer_register (struct gdbarch *gdbarch, struct regcache *regcache,
+		    int reg_num, int length,
 		    enum bfd_endian endian, gdb_byte *in,
 		    const gdb_byte *out, int buf_offset)
 {
   int reg_offset = 0;
-  struct gdbarch *gdbarch = get_regcache_arch (regcache);
 
   gdb_assert (reg_num >= gdbarch_num_regs (gdbarch));
   /* Need to transfer the left or right part of the register, based on
@@ -3110,12 +3110,12 @@ mips_n32n64_return_value (struct gdbarch
 	 eight bytes with the lower memory address are in $f0.  */
       if (mips_debug)
 	fprintf_unfiltered (gdb_stderr, "Return float in $f0 and $f2\n");
-      mips_xfer_register (regcache,
+      mips_xfer_register (gdbarch, regcache,
 			  gdbarch_num_regs (gdbarch)
 			  + mips_regnum (gdbarch)->fp0,
 			  8, gdbarch_byte_order (gdbarch),
 			  readbuf, writebuf, 0);
-      mips_xfer_register (regcache,
+      mips_xfer_register (gdbarch, regcache,
 			  gdbarch_num_regs (gdbarch)
 			  + mips_regnum (gdbarch)->fp0 + 2,
 			  8, gdbarch_byte_order (gdbarch),
@@ -3129,7 +3129,7 @@ mips_n32n64_return_value (struct gdbarch
       /* A single or double floating-point value that fits in FP0.  */
       if (mips_debug)
 	fprintf_unfiltered (gdb_stderr, "Return float in $fp0\n");
-      mips_xfer_register (regcache,
+      mips_xfer_register (gdbarch, regcache,
 			  gdbarch_num_regs (gdbarch)
 			  + mips_regnum (gdbarch)->fp0,
 			  TYPE_LENGTH (type),
@@ -3163,8 +3163,8 @@ mips_n32n64_return_value (struct gdbarch
 	  if (mips_debug)
 	    fprintf_unfiltered (gdb_stderr, "Return float struct+%d\n",
 				offset);
-	  mips_xfer_register (regcache, gdbarch_num_regs (gdbarch)
-					+ regnum,
+	  mips_xfer_register (gdbarch, regcache,
+			      gdbarch_num_regs (gdbarch) + regnum,
 			      TYPE_LENGTH (TYPE_FIELD_TYPE (type, field)),
 			      gdbarch_byte_order (gdbarch),
 			      readbuf, writebuf, offset);
@@ -3189,7 +3189,8 @@ mips_n32n64_return_value (struct gdbarch
 	  if (mips_debug)
 	    fprintf_unfiltered (gdb_stderr, "Return struct+%d:%d in $%d\n",
 				offset, xfer, regnum);
-	  mips_xfer_register (regcache, gdbarch_num_regs (gdbarch) + regnum,
+	  mips_xfer_register (gdbarch, regcache,
+			      gdbarch_num_regs (gdbarch) + regnum,
 			      xfer, BFD_ENDIAN_UNKNOWN, readbuf, writebuf,
 			      offset);
 	}
@@ -3211,7 +3212,8 @@ mips_n32n64_return_value (struct gdbarch
 	  if (mips_debug)
 	    fprintf_unfiltered (gdb_stderr, "Return scalar+%d:%d in $%d\n",
 				offset, xfer, regnum);
-	  mips_xfer_register (regcache, gdbarch_num_regs (gdbarch) + regnum,
+	  mips_xfer_register (gdbarch, regcache,
+			      gdbarch_num_regs (gdbarch) + regnum,
 			      xfer, gdbarch_byte_order (gdbarch),
 			      readbuf, writebuf, offset);
 	}
@@ -3543,7 +3545,7 @@ mips_o32_return_value (struct gdbarch *g
          least significant part of FP0.  */
       if (mips_debug)
 	fprintf_unfiltered (gdb_stderr, "Return float in $fp0\n");
-      mips_xfer_register (regcache,
+      mips_xfer_register (gdbarch, regcache,
 			  gdbarch_num_regs (gdbarch)
 			    + mips_regnum (gdbarch)->fp0,
 			  TYPE_LENGTH (type),
@@ -3562,24 +3564,24 @@ mips_o32_return_value (struct gdbarch *g
       switch (gdbarch_byte_order (gdbarch))
 	{
 	case BFD_ENDIAN_LITTLE:
-	  mips_xfer_register (regcache,
+	  mips_xfer_register (gdbarch, regcache,
 			      gdbarch_num_regs (gdbarch)
 				+ mips_regnum (gdbarch)->fp0 +
 			      0, 4, gdbarch_byte_order (gdbarch),
 			      readbuf, writebuf, 0);
-	  mips_xfer_register (regcache,
+	  mips_xfer_register (gdbarch, regcache,
 			      gdbarch_num_regs (gdbarch)
 				+ mips_regnum (gdbarch)->fp0 + 1,
 			      4, gdbarch_byte_order (gdbarch),
 			      readbuf, writebuf, 4);
 	  break;
 	case BFD_ENDIAN_BIG:
-	  mips_xfer_register (regcache,
+	  mips_xfer_register (gdbarch, regcache,
 			      gdbarch_num_regs (gdbarch)
 				+ mips_regnum (gdbarch)->fp0 + 1,
 			      4, gdbarch_byte_order (gdbarch),
 			      readbuf, writebuf, 0);
-	  mips_xfer_register (regcache,
+	  mips_xfer_register (gdbarch, regcache,
 			      gdbarch_num_regs (gdbarch)
 				+ mips_regnum (gdbarch)->fp0 + 0,
 			      4, gdbarch_byte_order (gdbarch),
@@ -3618,8 +3620,8 @@ mips_o32_return_value (struct gdbarch *g
 	  if (mips_debug)
 	    fprintf_unfiltered (gdb_stderr, "Return float struct+%d\n",
 				offset);
-	  mips_xfer_register (regcache, gdbarch_num_regs (gdbarch)
-					+ regnum,
+	  mips_xfer_register (gdbarch, regcache,
+			      gdbarch_num_regs (gdbarch) + regnum,
 			      TYPE_LENGTH (TYPE_FIELD_TYPE (type, field)),
 			      gdbarch_byte_order (gdbarch),
 			      readbuf, writebuf, offset);
@@ -3646,8 +3648,8 @@ mips_o32_return_value (struct gdbarch *g
 	  if (mips_debug)
 	    fprintf_unfiltered (gdb_stderr, "Return struct+%d:%d in $%d\n",
 				offset, xfer, regnum);
-	  mips_xfer_register (regcache, gdbarch_num_regs (gdbarch)
-					+ regnum, xfer,
+	  mips_xfer_register (gdbarch, regcache,
+			      gdbarch_num_regs (gdbarch) + regnum, xfer,
 			      BFD_ENDIAN_UNKNOWN, readbuf, writebuf, offset);
 	}
       return RETURN_VALUE_REGISTER_CONVENTION;
@@ -3670,8 +3672,8 @@ mips_o32_return_value (struct gdbarch *g
 	  if (mips_debug)
 	    fprintf_unfiltered (gdb_stderr, "Return scalar+%d:%d in $%d\n",
 				offset, xfer, regnum);
-	  mips_xfer_register (regcache, gdbarch_num_regs (gdbarch)
-					+ regnum, xfer,
+	  mips_xfer_register (gdbarch, regcache,
+			      gdbarch_num_regs (gdbarch) + regnum, xfer,
 			      gdbarch_byte_order (gdbarch),
 			      readbuf, writebuf, offset);
 	}
@@ -3931,7 +3933,7 @@ mips_o64_return_value (struct gdbarch *g
          part of FP0.  */
       if (mips_debug)
 	fprintf_unfiltered (gdb_stderr, "Return float in $fp0\n");
-      mips_xfer_register (regcache,
+      mips_xfer_register (gdbarch, regcache,
 			  gdbarch_num_regs (gdbarch)
 			    + mips_regnum (gdbarch)->fp0,
 			  TYPE_LENGTH (type),
@@ -3955,7 +3957,8 @@ mips_o64_return_value (struct gdbarch *g
 	  if (mips_debug)
 	    fprintf_unfiltered (gdb_stderr, "Return scalar+%d:%d in $%d\n",
 				offset, xfer, regnum);
-	  mips_xfer_register (regcache, gdbarch_num_regs (gdbarch) + regnum,
+	  mips_xfer_register (gdbarch, regcache,
+			      gdbarch_num_regs (gdbarch) + regnum,
 			      xfer, gdbarch_byte_order (gdbarch),
 			      readbuf, writebuf, offset);
 	}


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