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] [06/12] Get rid of current_gdbarch in mips-tdep.c


Hi,

this patch gets rid of some of the current_gdbarch's in mips-tdep.c

Is this ok to commit?

ChangeLog:

	* mips-tdep.c (mips_xfer_register, mips2_fp_compat, mips32_next_pc)
	(mips16_scan_prologue, mips_insn16_frame_cache, mips32_scan_prologue)
	(mips_insn32_frame_cache, mips_stub_frame_cache,mips_print_fp_register)
	(mips_read_fp_register_single, mips_read_fp_register_double)
	(mips_print_register, print_gp_register_row): Use FRAME or REGCACHE
	to recognize current architecture.
	(mips_register_reggroup_p, mips_pseudo_register_read, mips_unwind_pc)
	(mips_pseudo_register_write, mips_register_type, mips_unwind_sp)
	(mips_unwind_dummy_id, mips_eabi_push_dummy_call)
	(mips_n32n64_push_dummy_call, mips_n32n64_return_value)
	(mips_o32_push_dummy_call, mips_o32_return_value
	(mips_o64_push_dummy_call, mips_o64_return_value
	(mips_print_registers_info, mips_dump_tdep): Replace current_gdbarch by
	gdbarch.

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





diff -urN src/gdb/mips-tdep.c dev/gdb/mips-tdep.c
--- src/gdb/mips-tdep.c	2007-07-23 05:57:46.000000000 +0200
+++ dev/gdb/mips-tdep.c	2007-08-03 08:00:58.000000000 +0200
@@ -346,14 +346,15 @@
 		    enum bfd_endian endian, gdb_byte *in,
 		    const gdb_byte *out, int buf_offset)
 {
+  struct gdbarch *gdbarch = get_regcache_arch (regcache);
   int reg_offset = 0;
-  gdb_assert (reg_num >= gdbarch_num_regs (current_gdbarch));
+  gdb_assert (reg_num >= gdbarch_num_regs (gdbarch));
   /* Need to transfer the left or right part of the register, based on
      the targets byte order.  */
   switch (endian)
     {
     case BFD_ENDIAN_BIG:
-      reg_offset = register_size (current_gdbarch, reg_num) - length;
+      reg_offset = register_size (gdbarch, reg_num) - length;
       break;
     case BFD_ENDIAN_LITTLE:
       reg_offset = 0;
@@ -399,10 +400,10 @@
 static int
 mips2_fp_compat (struct frame_info *frame)
 {
+  struct gdbarch *gdbarch = get_frame_arch (frame);
   /* MIPS1 and MIPS2 have only 32 bit FPRs, and the FR bit is not
      meaningful.  */
-  if (register_size (current_gdbarch, mips_regnum (current_gdbarch)->fp0) ==
-      4)
+  if (register_size (gdbarch, mips_regnum (gdbarch)->fp0) == 4)
     return 0;
 
 #if 0
@@ -548,17 +549,17 @@
   int vector_p;
   int float_p;
   int raw_p;
-  int rawnum = regnum % gdbarch_num_regs (current_gdbarch);
-  int pseudo = regnum / gdbarch_num_regs (current_gdbarch);
+  int rawnum = regnum % gdbarch_num_regs (gdbarch);
+  int pseudo = regnum / gdbarch_num_regs (gdbarch);
   if (reggroup == all_reggroup)
     return pseudo;
   vector_p = TYPE_VECTOR (register_type (gdbarch, regnum));
   float_p = TYPE_CODE (register_type (gdbarch, regnum)) == TYPE_CODE_FLT;
   /* FIXME: cagney/2003-04-13: Can't yet use gdbarch_num_regs
      (gdbarch), as not all architectures are multi-arch.  */
-  raw_p = rawnum < gdbarch_num_regs (current_gdbarch);
-  if (gdbarch_register_name (current_gdbarch, regnum) == NULL
-      || gdbarch_register_name (current_gdbarch, regnum)[0] == '\0')
+  raw_p = rawnum < gdbarch_num_regs (gdbarch);
+  if (gdbarch_register_name (gdbarch, regnum) == NULL
+      || gdbarch_register_name (gdbarch, regnum)[0] == '\0')
     return 0;
   if (reggroup == float_reggroup)
     return float_p && pseudo;
@@ -614,16 +615,16 @@
 mips_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
 			   int cookednum, gdb_byte *buf)
 {
-  int rawnum = cookednum % gdbarch_num_regs (current_gdbarch);
-  gdb_assert (cookednum >= gdbarch_num_regs (current_gdbarch)
-	      && cookednum < 2 * gdbarch_num_regs (current_gdbarch));
+  int rawnum = cookednum % gdbarch_num_regs (gdbarch);
+  gdb_assert (cookednum >= gdbarch_num_regs (gdbarch)
+	      && cookednum < 2 * gdbarch_num_regs (gdbarch));
   if (register_size (gdbarch, rawnum) == register_size (gdbarch, cookednum))
     regcache_raw_read (regcache, rawnum, buf);
   else if (register_size (gdbarch, rawnum) >
 	   register_size (gdbarch, cookednum))
     {
       if (gdbarch_tdep (gdbarch)->mips64_transfers_32bit_regs_p
-	  || gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_LITTLE)
+	  || gdbarch_byte_order (gdbarch) == BFD_ENDIAN_LITTLE)
 	regcache_raw_read_part (regcache, rawnum, 0, 4, buf);
       else
 	regcache_raw_read_part (regcache, rawnum, 4, 4, buf);
@@ -637,16 +638,16 @@
 			    struct regcache *regcache, int cookednum,
 			    const gdb_byte *buf)
 {
-  int rawnum = cookednum % gdbarch_num_regs (current_gdbarch);
-  gdb_assert (cookednum >= gdbarch_num_regs (current_gdbarch)
-	      && cookednum < 2 * gdbarch_num_regs (current_gdbarch));
+  int rawnum = cookednum % gdbarch_num_regs (gdbarch);
+  gdb_assert (cookednum >= gdbarch_num_regs (gdbarch)
+	      && cookednum < 2 * gdbarch_num_regs (gdbarch));
   if (register_size (gdbarch, rawnum) == register_size (gdbarch, cookednum))
     regcache_raw_write (regcache, rawnum, buf);
   else if (register_size (gdbarch, rawnum) >
 	   register_size (gdbarch, cookednum))
     {
       if (gdbarch_tdep (gdbarch)->mips64_transfers_32bit_regs_p
-	  || gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_LITTLE)
+	  || gdbarch_byte_order (gdbarch) == BFD_ENDIAN_LITTLE)
 	regcache_raw_write_part (regcache, rawnum, 0, 4, buf);
       else
 	regcache_raw_write_part (regcache, rawnum, 4, 4, buf);
@@ -722,11 +723,11 @@
 static struct type *
 mips_register_type (struct gdbarch *gdbarch, int regnum)
 {
-  gdb_assert (regnum >= 0 && regnum < 2 * gdbarch_num_regs (current_gdbarch));
-  if ((regnum % gdbarch_num_regs (current_gdbarch))
-	>= mips_regnum (current_gdbarch)->fp0
-      && (regnum % gdbarch_num_regs (current_gdbarch))
-	< mips_regnum (current_gdbarch)->fp0 + 32)
+  gdb_assert (regnum >= 0 && regnum < 2 * gdbarch_num_regs (gdbarch));
+  if ((regnum % gdbarch_num_regs (gdbarch))
+	>= mips_regnum (gdbarch)->fp0
+      && (regnum % gdbarch_num_regs (gdbarch))
+	< mips_regnum (gdbarch)->fp0 + 32)
     {
       /* The floating-point registers raw, or cooked, always match
          mips_isa_regsize(), and also map 1:1, byte for byte.  */
@@ -735,7 +736,7 @@
       else
 	return builtin_type_ieee_double;
     }
-  else if (regnum < gdbarch_num_regs (current_gdbarch))
+  else if (regnum < gdbarch_num_regs (gdbarch))
     {
       /* The raw or ISA registers.  These are all sized according to
 	 the ISA regsize.  */
@@ -748,9 +749,9 @@
     {
       /* The cooked or ABI registers.  These are sized according to
 	 the ABI (with a few complications).  */
-      if (regnum >= (gdbarch_num_regs (current_gdbarch)
-		     + mips_regnum (current_gdbarch)->fp_control_status)
-	  && regnum <= gdbarch_num_regs (current_gdbarch)
+      if (regnum >= (gdbarch_num_regs (gdbarch)
+		     + mips_regnum (gdbarch)->fp_control_status)
+	  && regnum <= gdbarch_num_regs (gdbarch)
 		       + MIPS_LAST_EMBED_REGNUM)
 	/* The pseudo/cooked view of the embedded registers is always
 	   32-bit.  The raw view is handled below.  */
@@ -908,7 +909,7 @@
 mips_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
 {
   return frame_unwind_register_signed (next_frame,
-				       gdbarch_num_regs (current_gdbarch)
+				       gdbarch_num_regs (gdbarch)
 				       + mips_regnum (gdbarch)->pc);
 }
 
@@ -916,7 +917,7 @@
 mips_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
 {
   return frame_unwind_register_signed (next_frame,
-				       gdbarch_num_regs (current_gdbarch)
+				       gdbarch_num_regs (gdbarch)
 				       + MIPS_SP_REGNUM);
 }
 
@@ -930,7 +931,7 @@
 {
   return frame_id_build
 	   (frame_unwind_register_signed (next_frame,
-					  gdbarch_num_regs (current_gdbarch)
+					  gdbarch_num_regs (gdbarch)
 					  + MIPS_SP_REGNUM),
 					  frame_pc_unwind (next_frame));
 }
@@ -1022,8 +1023,8 @@
 	  int tf = itype_rt (inst) & 0x01;
 	  int cnum = itype_rt (inst) >> 2;
 	  int fcrcs =
-	    get_frame_register_signed (frame, mips_regnum (current_gdbarch)->
-						fp_control_status);
+	    get_frame_register_signed
+	      (frame, mips_regnum (get_frame_arch (frame))->fp_control_status);
 	  int cond = ((fcrcs >> 24) & 0x0e) | ((fcrcs >> 23) & 0x01);
 
 	  if (((cond >> cnum) & 0x01) == tf)
@@ -1523,6 +1524,7 @@
                       struct frame_info *next_frame,
                       struct mips_frame_cache *this_cache)
 {
+  struct gdbarch *gdbarch = get_frame_arch (next_frame);
   CORE_ADDR cur_pc;
   CORE_ADDR frame_addr = 0;	/* Value of $r17, used as frame pointer */
   CORE_ADDR sp;
@@ -1542,7 +1544,7 @@
      NEXT_FRAME.  */
   if (next_frame != NULL)
     sp = frame_unwind_register_signed (next_frame,
-				       gdbarch_num_regs (current_gdbarch)
+				       gdbarch_num_regs (gdbarch)
 				       + MIPS_SP_REGNUM);
   else
     sp = 0;
@@ -1673,7 +1675,7 @@
       for (reg = 4, offset = 0; reg < areg_count + 4; reg++)
 	{
 	  set_reg_offset (this_cache, reg, sp + offset);
-	  offset += mips_abi_regsize (current_gdbarch);
+	  offset += mips_abi_regsize (gdbarch);
 	}
 
       /* Check if the ra register was pushed on the stack.  */
@@ -1681,14 +1683,14 @@
       if (entry_inst & 0x20)
 	{
 	  set_reg_offset (this_cache, MIPS_RA_REGNUM, sp + offset);
-	  offset -= mips_abi_regsize (current_gdbarch);
+	  offset -= mips_abi_regsize (gdbarch);
 	}
 
       /* Check if the s0 and s1 registers were pushed on the stack.  */
       for (reg = 16; reg < sreg_count + 16; reg++)
 	{
 	  set_reg_offset (this_cache, reg, sp + offset);
-	  offset -= mips_abi_regsize (current_gdbarch);
+	  offset -= mips_abi_regsize (gdbarch);
 	}
     }
 
@@ -1696,16 +1698,14 @@
     {
       this_cache->base =
         (frame_unwind_register_signed (next_frame,
-				       gdbarch_num_regs (current_gdbarch)
-				       + frame_reg)
+				       gdbarch_num_regs (gdbarch) + frame_reg)
          + frame_offset - frame_adjust);
       /* FIXME: brobecker/2004-10-10: Just as in the mips32 case, we should
          be able to get rid of the assignment below, evetually. But it's
          still needed for now.  */
-      this_cache->saved_regs[gdbarch_num_regs (current_gdbarch)
-			     + mips_regnum (current_gdbarch)->pc]
-        = this_cache->saved_regs[gdbarch_num_regs (current_gdbarch)
-				 + MIPS_RA_REGNUM];
+      this_cache->saved_regs[gdbarch_num_regs (gdbarch)
+			     + mips_regnum (gdbarch)->pc]
+        = this_cache->saved_regs[gdbarch_num_regs (gdbarch) + MIPS_RA_REGNUM];
     }
 
   /* If we didn't reach the end of the prologue when scanning the function
@@ -1750,8 +1750,9 @@
   }
   
   /* gdbarch_sp_regnum contains the value and not the address.  */
-  trad_frame_set_value (cache->saved_regs, gdbarch_num_regs (current_gdbarch)
-					   + MIPS_SP_REGNUM, cache->base);
+  trad_frame_set_value (cache->saved_regs,
+			gdbarch_num_regs (get_frame_arch (next_frame))
+			  + MIPS_SP_REGNUM, cache->base);
 
   return (*this_cache);
 }
@@ -1850,6 +1851,7 @@
                       struct frame_info *next_frame,
                       struct mips_frame_cache *this_cache)
 {
+  struct gdbarch *gdbarch = get_frame_arch (next_frame);
   CORE_ADDR cur_pc;
   CORE_ADDR frame_addr = 0; /* Value of $r30. Used by gcc for frame-pointer */
   CORE_ADDR sp;
@@ -1864,7 +1866,7 @@
      NEXT_FRAME.  */
   if (next_frame != NULL)
     sp = frame_unwind_register_signed (next_frame,
-				       gdbarch_num_regs (current_gdbarch)
+				       gdbarch_num_regs (gdbarch)
 				       + MIPS_SP_REGNUM);
   else
     sp = 0;
@@ -1921,8 +1923,7 @@
 
 	      frame_reg = 30;
 	      frame_addr = frame_unwind_register_signed
-			     (next_frame,
-			      gdbarch_num_regs (current_gdbarch) + 30);
+			     (next_frame, gdbarch_num_regs (gdbarch) + 30);
 
 	      alloca_adjust = (unsigned) (frame_addr - (sp + low_word));
 	      if (alloca_adjust > 0)
@@ -1952,8 +1953,7 @@
 
 	      frame_reg = 30;
 	      frame_addr = frame_unwind_register_signed
-			     (next_frame,
-			      gdbarch_num_regs (current_gdbarch) + 30);
+			     (next_frame, gdbarch_num_regs (gdbarch) + 30);
 
 	      alloca_adjust = (unsigned) (frame_addr - sp);
 	      if (alloca_adjust > 0)
@@ -2020,15 +2020,14 @@
     {
       this_cache->base = 
         (frame_unwind_register_signed (next_frame,
-				       gdbarch_num_regs (current_gdbarch)
-				       + frame_reg)
+				       gdbarch_num_regs (gdbarch) + frame_reg)
          + frame_offset);
       /* FIXME: brobecker/2004-09-15: We should be able to get rid of
          this assignment below, eventually.  But it's still needed
          for now.  */
-      this_cache->saved_regs[gdbarch_num_regs (current_gdbarch)
-			     + mips_regnum (current_gdbarch)->pc]
-        = this_cache->saved_regs[gdbarch_num_regs (current_gdbarch)
+      this_cache->saved_regs[gdbarch_num_regs (gdbarch)
+			     + mips_regnum (gdbarch)->pc]
+        = this_cache->saved_regs[gdbarch_num_regs (gdbarch)
 				 + MIPS_RA_REGNUM];
     }
 
@@ -2086,7 +2085,8 @@
   
   /* gdbarch_sp_regnum contains the value and not the address.  */
   trad_frame_set_value (cache->saved_regs,
-			gdbarch_num_regs (current_gdbarch) + MIPS_SP_REGNUM,
+			gdbarch_num_regs (get_frame_arch (next_frame))
+			  + MIPS_SP_REGNUM,
 			cache->base);
 
   return (*this_cache);
@@ -2172,7 +2172,7 @@
 
   /* The return address is in the link register.  */
   trad_frame_set_reg_realreg (this_trad_cache,
-			      gdbarch_pc_regnum (current_gdbarch),
+			      gdbarch_pc_regnum (get_frame_arch (next_frame)),
 			      MIPS_RA_REGNUM);
 
   /* Frame ID, since it's a frameless / stackless function, no stack
@@ -2543,7 +2543,7 @@
 
   /* Initialize the integer and float register pointers.  */
   argreg = MIPS_A0_REGNUM;
-  float_argreg = mips_fpa0_regnum (current_gdbarch);
+  float_argreg = mips_fpa0_regnum (gdbarch);
 
   /* The struct_return pointer occupies the first parameter-passing reg.  */
   if (struct_return)
@@ -2620,7 +2620,7 @@
 	     making the ABI determination.  */
 	  if (len == 8 && mips_abi (gdbarch) == MIPS_ABI_EABI32)
 	    {
-	      int low_offset = gdbarch_byte_order (current_gdbarch)
+	      int low_offset = gdbarch_byte_order (gdbarch)
 			       == BFD_ENDIAN_BIG ? 4 : 0;
 	      unsigned long regval;
 
@@ -2685,7 +2685,7 @@
 		  int longword_offset = 0;
 		  CORE_ADDR addr;
 		  stack_used_p = 1;
-		  if (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG)
+		  if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
 		    {
 		      if (regsize == 8
 			  && (typecode == TYPE_CODE_INT
@@ -2824,7 +2824,7 @@
 
   /* Initialize the integer and float register pointers.  */
   argreg = MIPS_A0_REGNUM;
-  float_argreg = mips_fpa0_regnum (current_gdbarch);
+  float_argreg = mips_fpa0_regnum (gdbarch);
 
   /* The struct_return pointer occupies the first parameter-passing reg.  */
   if (struct_return)
@@ -2906,7 +2906,7 @@
 		  int longword_offset = 0;
 		  CORE_ADDR addr;
 		  stack_used_p = 1;
-		  if (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG)
+		  if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
 		    {
 		      if ((typecode == TYPE_CODE_INT
 			   || typecode == TYPE_CODE_PTR
@@ -2959,7 +2959,7 @@
 		     It does not seem to be necessary to do the
 		     same for integral types.  */
 
-		  if (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG
+		  if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG
 		      && partial_len < MIPS64_REGSIZE
 		      && (typecode == TYPE_CODE_STRUCT
 			  || typecode == TYPE_CODE_UNION))
@@ -3002,7 +3002,7 @@
 			  struct type *type, struct regcache *regcache,
 			  gdb_byte *readbuf, const gdb_byte *writebuf)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
+  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
   if (TYPE_CODE (type) == TYPE_CODE_STRUCT
       || TYPE_CODE (type) == TYPE_CODE_UNION
       || TYPE_CODE (type) == TYPE_CODE_ARRAY
@@ -3018,14 +3018,14 @@
       if (mips_debug)
 	fprintf_unfiltered (gdb_stderr, "Return float in $f0 and $f2\n");
       mips_xfer_register (regcache,
-			  gdbarch_num_regs (current_gdbarch)
-			  + mips_regnum (current_gdbarch)->fp0,
-			  8, gdbarch_byte_order (current_gdbarch),
+			  gdbarch_num_regs (gdbarch)
+			    + mips_regnum (gdbarch)->fp0,
+			  8, gdbarch_byte_order (gdbarch),
 			  readbuf, writebuf, 0);
       mips_xfer_register (regcache,
-			  gdbarch_num_regs (current_gdbarch)
-			  + mips_regnum (current_gdbarch)->fp0 + 2,
-			  8, gdbarch_byte_order (current_gdbarch),
+			  gdbarch_num_regs (gdbarch)
+			  + mips_regnum (gdbarch)->fp0 + 2,
+			  8, gdbarch_byte_order (gdbarch),
 			  readbuf ? readbuf + 8 : readbuf,
 			  writebuf ? writebuf + 8 : writebuf, 0);
       return RETURN_VALUE_REGISTER_CONVENTION;
@@ -3038,10 +3038,10 @@
       if (mips_debug)
 	fprintf_unfiltered (gdb_stderr, "Return float in $fp0\n");
       mips_xfer_register (regcache,
-			  gdbarch_num_regs (current_gdbarch)
-			  + mips_regnum (current_gdbarch)->fp0,
+			  gdbarch_num_regs (gdbarch)
+			  + mips_regnum (gdbarch)->fp0,
 			  TYPE_LENGTH (type),
-			  gdbarch_byte_order (current_gdbarch),
+			  gdbarch_byte_order (gdbarch),
 			  readbuf, writebuf, 0);
       return RETURN_VALUE_REGISTER_CONVENTION;
     }
@@ -3063,7 +3063,7 @@
          register..  */
       int regnum;
       int field;
-      for (field = 0, regnum = mips_regnum (current_gdbarch)->fp0;
+      for (field = 0, regnum = mips_regnum (gdbarch)->fp0;
 	   field < TYPE_NFIELDS (type); field++, regnum += 2)
 	{
 	  int offset = (FIELD_BITPOS (TYPE_FIELDS (type)[field])
@@ -3071,10 +3071,10 @@
 	  if (mips_debug)
 	    fprintf_unfiltered (gdb_stderr, "Return float struct+%d\n",
 				offset);
-	  mips_xfer_register (regcache, gdbarch_num_regs (current_gdbarch)
-					+ regnum,
+	  mips_xfer_register (regcache,
+			      gdbarch_num_regs (gdbarch) + regnum,
 			      TYPE_LENGTH (TYPE_FIELD_TYPE (type, field)),
-			      gdbarch_byte_order (current_gdbarch),
+			      gdbarch_byte_order (gdbarch),
 			      readbuf, writebuf, offset);
 	}
       return RETURN_VALUE_REGISTER_CONVENTION;
@@ -3089,16 +3089,16 @@
       int regnum;
       for (offset = 0, regnum = MIPS_V0_REGNUM;
 	   offset < TYPE_LENGTH (type);
-	   offset += register_size (current_gdbarch, regnum), regnum++)
+	   offset += register_size (gdbarch, regnum), regnum++)
 	{
-	  int xfer = register_size (current_gdbarch, regnum);
+	  int xfer = register_size (gdbarch, regnum);
 	  if (offset + xfer > TYPE_LENGTH (type))
 	    xfer = TYPE_LENGTH (type) - offset;
 	  if (mips_debug)
 	    fprintf_unfiltered (gdb_stderr, "Return struct+%d:%d in $%d\n",
 				offset, xfer, regnum);
-	  mips_xfer_register (regcache, gdbarch_num_regs (current_gdbarch)
-					+ regnum, xfer,
+	  mips_xfer_register (regcache,
+			      gdbarch_num_regs (gdbarch) + regnum, xfer,
 			      BFD_ENDIAN_UNKNOWN, readbuf, writebuf, offset);
 	}
       return RETURN_VALUE_REGISTER_CONVENTION;
@@ -3111,17 +3111,17 @@
       int regnum;
       for (offset = 0, regnum = MIPS_V0_REGNUM;
 	   offset < TYPE_LENGTH (type);
-	   offset += register_size (current_gdbarch, regnum), regnum++)
+	   offset += register_size (gdbarch, regnum), regnum++)
 	{
-	  int xfer = register_size (current_gdbarch, regnum);
+	  int xfer = register_size (gdbarch, regnum);
 	  if (offset + xfer > TYPE_LENGTH (type))
 	    xfer = TYPE_LENGTH (type) - offset;
 	  if (mips_debug)
 	    fprintf_unfiltered (gdb_stderr, "Return scalar+%d:%d in $%d\n",
 				offset, xfer, regnum);
-	  mips_xfer_register (regcache, gdbarch_num_regs (current_gdbarch)
-					+ regnum, xfer,
-			      gdbarch_byte_order (current_gdbarch),
+	  mips_xfer_register (regcache,
+			      gdbarch_num_regs (gdbarch) + regnum, xfer,
+			      gdbarch_byte_order (gdbarch),
 			      readbuf, writebuf, offset);
 	}
       return RETURN_VALUE_REGISTER_CONVENTION;
@@ -3182,7 +3182,7 @@
 
   /* Initialize the integer and float register pointers.  */
   argreg = MIPS_A0_REGNUM;
-  float_argreg = mips_fpa0_regnum (current_gdbarch);
+  float_argreg = mips_fpa0_regnum (gdbarch);
 
   /* The struct_return pointer occupies the first parameter-passing reg.  */
   if (struct_return)
@@ -3239,7 +3239,7 @@
 	{
 	  if (register_size (gdbarch, float_argreg) < 8 && len == 8)
 	    {
-	      int low_offset = gdbarch_byte_order (current_gdbarch)
+	      int low_offset = gdbarch_byte_order (gdbarch)
 			       == BFD_ENDIAN_BIG ? 4 : 0;
 	      unsigned long regval;
 
@@ -3391,7 +3391,7 @@
 		     identified as such and GDB gets tweaked
 		     accordingly.  */
 
-		  if (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG
+		  if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG
 		      && partial_len < MIPS32_REGSIZE
 		      && (typecode == TYPE_CODE_STRUCT
 			  || typecode == TYPE_CODE_UNION))
@@ -3439,7 +3439,7 @@
 		       struct regcache *regcache,
 		       gdb_byte *readbuf, const gdb_byte *writebuf)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
+  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
 
   if (TYPE_CODE (type) == TYPE_CODE_STRUCT
       || TYPE_CODE (type) == TYPE_CODE_UNION
@@ -3453,10 +3453,10 @@
       if (mips_debug)
 	fprintf_unfiltered (gdb_stderr, "Return float in $fp0\n");
       mips_xfer_register (regcache,
-			  gdbarch_num_regs (current_gdbarch)
-			    + mips_regnum (current_gdbarch)->fp0,
+			  gdbarch_num_regs (gdbarch)
+			    + mips_regnum (gdbarch)->fp0,
 			  TYPE_LENGTH (type),
-			  gdbarch_byte_order (current_gdbarch),
+			  gdbarch_byte_order (gdbarch),
 			  readbuf, writebuf, 0);
       return RETURN_VALUE_REGISTER_CONVENTION;
     }
@@ -3468,30 +3468,30 @@
          FP0.  */
       if (mips_debug)
 	fprintf_unfiltered (gdb_stderr, "Return float in $fp1/$fp0\n");
-      switch (gdbarch_byte_order (current_gdbarch))
+      switch (gdbarch_byte_order (gdbarch))
 	{
 	case BFD_ENDIAN_LITTLE:
 	  mips_xfer_register (regcache,
-			      gdbarch_num_regs (current_gdbarch)
-				+ mips_regnum (current_gdbarch)->fp0 +
-			      0, 4, gdbarch_byte_order (current_gdbarch),
+			      gdbarch_num_regs (gdbarch)
+				+ mips_regnum (gdbarch)->fp0 +
+			      0, 4, gdbarch_byte_order (gdbarch),
 			      readbuf, writebuf, 0);
 	  mips_xfer_register (regcache,
-			      gdbarch_num_regs (current_gdbarch)
-				+ mips_regnum (current_gdbarch)->fp0 + 1,
-			      4, gdbarch_byte_order (current_gdbarch),
+			      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,
-			      gdbarch_num_regs (current_gdbarch)
-				+ mips_regnum (current_gdbarch)->fp0 + 1,
-			      4, gdbarch_byte_order (current_gdbarch),
+			      gdbarch_num_regs (gdbarch)
+				+ mips_regnum (gdbarch)->fp0 + 1,
+			      4, gdbarch_byte_order (gdbarch),
 			      readbuf, writebuf, 0);
 	  mips_xfer_register (regcache,
-			      gdbarch_num_regs (current_gdbarch)
-				+ mips_regnum (current_gdbarch)->fp0 + 0,
-			      4, gdbarch_byte_order (current_gdbarch),
+			      gdbarch_num_regs (gdbarch)
+				+ mips_regnum (gdbarch)->fp0 + 0,
+			      4, gdbarch_byte_order (gdbarch),
 			      readbuf, writebuf, 4);
 	  break;
 	default:
@@ -3519,7 +3519,7 @@
       gdb_byte reg[MAX_REGISTER_SIZE];
       int regnum;
       int field;
-      for (field = 0, regnum = mips_regnum (current_gdbarch)->fp0;
+      for (field = 0, regnum = mips_regnum (gdbarch)->fp0;
 	   field < TYPE_NFIELDS (type); field++, regnum += 2)
 	{
 	  int offset = (FIELD_BITPOS (TYPE_FIELDS (type)[field])
@@ -3527,10 +3527,10 @@
 	  if (mips_debug)
 	    fprintf_unfiltered (gdb_stderr, "Return float struct+%d\n",
 				offset);
-	  mips_xfer_register (regcache, gdbarch_num_regs (current_gdbarch)
+	  mips_xfer_register (regcache, gdbarch_num_regs (gdbarch)
 					+ regnum,
 			      TYPE_LENGTH (TYPE_FIELD_TYPE (type, field)),
-			      gdbarch_byte_order (current_gdbarch),
+			      gdbarch_byte_order (gdbarch),
 			      readbuf, writebuf, offset);
 	}
       return RETURN_VALUE_REGISTER_CONVENTION;
@@ -3547,15 +3547,15 @@
       int regnum;
       for (offset = 0, regnum = MIPS_V0_REGNUM;
 	   offset < TYPE_LENGTH (type);
-	   offset += register_size (current_gdbarch, regnum), regnum++)
+	   offset += register_size (gdbarch, regnum), regnum++)
 	{
-	  int xfer = register_size (current_gdbarch, regnum);
+	  int xfer = register_size (gdbarch, regnum);
 	  if (offset + xfer > TYPE_LENGTH (type))
 	    xfer = TYPE_LENGTH (type) - offset;
 	  if (mips_debug)
 	    fprintf_unfiltered (gdb_stderr, "Return struct+%d:%d in $%d\n",
 				offset, xfer, regnum);
-	  mips_xfer_register (regcache, gdbarch_num_regs (current_gdbarch)
+	  mips_xfer_register (regcache, gdbarch_num_regs (gdbarch)
 					+ regnum, xfer,
 			      BFD_ENDIAN_UNKNOWN, readbuf, writebuf, offset);
 	}
@@ -3579,9 +3579,9 @@
 	  if (mips_debug)
 	    fprintf_unfiltered (gdb_stderr, "Return scalar+%d:%d in $%d\n",
 				offset, xfer, regnum);
-	  mips_xfer_register (regcache, gdbarch_num_regs (current_gdbarch)
+	  mips_xfer_register (regcache, gdbarch_num_regs (gdbarch)
 					+ regnum, xfer,
-			      gdbarch_byte_order (current_gdbarch),
+			      gdbarch_byte_order (gdbarch),
 			      readbuf, writebuf, offset);
 	}
       return RETURN_VALUE_REGISTER_CONVENTION;
@@ -3641,7 +3641,7 @@
 
   /* Initialize the integer and float register pointers.  */
   argreg = MIPS_A0_REGNUM;
-  float_argreg = mips_fpa0_regnum (current_gdbarch);
+  float_argreg = mips_fpa0_regnum (gdbarch);
 
   /* The struct_return pointer occupies the first parameter-passing reg.  */
   if (struct_return)
@@ -3728,7 +3728,7 @@
 		  int longword_offset = 0;
 		  CORE_ADDR addr;
 		  stack_used_p = 1;
-		  if (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG)
+		  if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
 		    {
 		      if ((typecode == TYPE_CODE_INT
 			   || typecode == TYPE_CODE_PTR
@@ -3780,7 +3780,7 @@
 		     It does not seem to be necessary to do the
 		     same for integral types. */
 
-		  if (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG
+		  if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG
 		      && partial_len < MIPS64_REGSIZE
 		      && (typecode == TYPE_CODE_STRUCT
 			  || typecode == TYPE_CODE_UNION))
@@ -3828,7 +3828,7 @@
 		       struct type *type, struct regcache *regcache,
 		       gdb_byte *readbuf, const gdb_byte *writebuf)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
+  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
 
   if (TYPE_CODE (type) == TYPE_CODE_STRUCT
       || TYPE_CODE (type) == TYPE_CODE_UNION
@@ -3841,10 +3841,10 @@
       if (mips_debug)
 	fprintf_unfiltered (gdb_stderr, "Return float in $fp0\n");
       mips_xfer_register (regcache,
-			  gdbarch_num_regs (current_gdbarch)
-			    + mips_regnum (current_gdbarch)->fp0,
+			  gdbarch_num_regs (gdbarch)
+			    + mips_regnum (gdbarch)->fp0,
 			  TYPE_LENGTH (type),
-			  gdbarch_byte_order (current_gdbarch),
+			  gdbarch_byte_order (gdbarch),
 			  readbuf, writebuf, 0);
       return RETURN_VALUE_REGISTER_CONVENTION;
     }
@@ -3864,9 +3864,9 @@
 	  if (mips_debug)
 	    fprintf_unfiltered (gdb_stderr, "Return scalar+%d:%d in $%d\n",
 				offset, xfer, regnum);
-	  mips_xfer_register (regcache, gdbarch_num_regs (current_gdbarch)
+	  mips_xfer_register (regcache, gdbarch_num_regs (gdbarch)
 					+ regnum, xfer,
-			      gdbarch_byte_order (current_gdbarch),
+			      gdbarch_byte_order (gdbarch),
 			      readbuf, writebuf, offset);
 	}
       return RETURN_VALUE_REGISTER_CONVENTION;
@@ -3922,19 +3922,20 @@
 mips_read_fp_register_single (struct frame_info *frame, int regno,
 			      gdb_byte *rare_buffer)
 {
-  int raw_size = register_size (current_gdbarch, regno);
+  struct gdbarch *gdbarch = get_frame_arch (frame);
+  int raw_size = register_size (gdbarch, regno);
   gdb_byte *raw_buffer = alloca (raw_size);
 
   if (!frame_register_read (frame, regno, raw_buffer))
     error (_("can't read register %d (%s)"),
-	   regno, gdbarch_register_name (current_gdbarch, regno));
+	   regno, gdbarch_register_name (gdbarch, regno));
   if (raw_size == 8)
     {
       /* We have a 64-bit value for this register.  Find the low-order
          32 bits.  */
       int offset;
 
-      if (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG)
+      if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
 	offset = 4;
       else
 	offset = 0;
@@ -3955,7 +3956,8 @@
 mips_read_fp_register_double (struct frame_info *frame, int regno,
 			      gdb_byte *rare_buffer)
 {
-  int raw_size = register_size (current_gdbarch, regno);
+  struct gdbarch *gdbarch = get_frame_arch (frame);
+  int raw_size = register_size (gdbarch, regno);
 
   if (raw_size == 8 && !mips2_fp_compat (frame))
     {
@@ -3963,18 +3965,18 @@
          all 64 bits.  */
       if (!frame_register_read (frame, regno, rare_buffer))
 	error (_("can't read register %d (%s)"),
-	       regno, gdbarch_register_name (current_gdbarch, regno));
+	       regno, gdbarch_register_name (gdbarch, regno));
     }
   else
     {
-      if ((regno - mips_regnum (current_gdbarch)->fp0) & 1)
+      if ((regno - mips_regnum (gdbarch)->fp0) & 1)
 	internal_error (__FILE__, __LINE__,
 			_("mips_read_fp_register_double: bad access to "
 			"odd-numbered FP register"));
 
       /* mips_read_fp_register_single will find the correct 32 bits from
          each register.  */
-      if (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG)
+      if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
 	{
 	  mips_read_fp_register_single (frame, regno, rare_buffer + 4);
 	  mips_read_fp_register_single (frame, regno + 1, rare_buffer);
@@ -3991,21 +3993,22 @@
 mips_print_fp_register (struct ui_file *file, struct frame_info *frame,
 			int regnum)
 {				/* do values for FP (float) regs */
+  struct gdbarch *gdbarch = get_frame_arch (frame);
   gdb_byte *raw_buffer;
   double doub, flt1;	/* doubles extracted from raw hex data */
   int inv1, inv2;
 
-  raw_buffer = alloca (2 * register_size (current_gdbarch,
-					  mips_regnum (current_gdbarch)->fp0));
+  raw_buffer = alloca (2 * register_size (gdbarch,
+					  mips_regnum (gdbarch)->fp0));
 
   fprintf_filtered (file, "%s:",
-		    gdbarch_register_name (current_gdbarch, regnum));
+		    gdbarch_register_name (gdbarch, regnum));
   fprintf_filtered (file, "%*s",
 		    4 - (int) strlen (gdbarch_register_name
-					(current_gdbarch, regnum)),
+					(gdbarch, regnum)),
 		    "");
 
-  if (register_size (current_gdbarch, regnum) == 4 || mips2_fp_compat (frame))
+  if (register_size (gdbarch, regnum) == 4 || mips2_fp_compat (frame))
     {
       /* 4-byte registers: Print hex and floating.  Also print even
          numbered registers as doubles.  */
@@ -4079,11 +4082,11 @@
   if (!frame_register_read (frame, regnum, raw_buffer))
     {
       fprintf_filtered (file, "%s: [Invalid]",
-			gdbarch_register_name (current_gdbarch, regnum));
+			gdbarch_register_name (gdbarch, regnum));
       return;
     }
 
-  fputs_filtered (gdbarch_register_name (current_gdbarch, regnum), file);
+  fputs_filtered (gdbarch_register_name (gdbarch, regnum), file);
 
   /* The problem with printing numeric register names (r26, etc.) is that
      the user can't use them on input.  Probably the best solution is to
@@ -4094,10 +4097,9 @@
   else
     fprintf_filtered (file, ": ");
 
-  if (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG)
+  if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
     offset =
-      register_size (current_gdbarch,
-		     regnum) - register_size (current_gdbarch, regnum);
+      register_size (gdbarch, regnum) - register_size (gdbarch, regnum);
   else
     offset = 0;
 
@@ -4135,18 +4137,17 @@
 
   /* For GP registers, we print a separate row of names above the vals */
   for (col = 0, regnum = start_regnum;
-       col < ncols && regnum < gdbarch_num_regs (current_gdbarch)
-			       + gdbarch_num_pseudo_regs (current_gdbarch);
+       col < ncols && regnum < gdbarch_num_regs (gdbarch)
+			         + gdbarch_num_pseudo_regs (gdbarch);
        regnum++)
     {
-      if (*gdbarch_register_name (current_gdbarch, regnum) == '\0')
+      if (*gdbarch_register_name (gdbarch, regnum) == '\0')
 	continue;		/* unused register */
       if (TYPE_CODE (register_type (gdbarch, regnum)) ==
 	  TYPE_CODE_FLT)
 	break;			/* end the row: reached FP register */
       /* Large registers are handled separately.  */
-      if (register_size (current_gdbarch, regnum)
-	  > mips_abi_regsize (current_gdbarch))
+      if (register_size (gdbarch, regnum) > mips_abi_regsize (gdbarch))
 	{
 	  if (col > 0)
 	    break;		/* End the row before this register.  */
@@ -4159,8 +4160,8 @@
       if (col == 0)
 	fprintf_filtered (file, "     ");
       fprintf_filtered (file,
-			mips_abi_regsize (current_gdbarch) == 8 ? "%17s" : "%9s",
-			gdbarch_register_name (current_gdbarch, regnum));
+			mips_abi_regsize (gdbarch) == 8 ? "%17s" : "%9s",
+			gdbarch_register_name (gdbarch, regnum));
       col++;
     }
 
@@ -4168,45 +4169,44 @@
     return regnum;
 
   /* print the R0 to R31 names */
-  if ((start_regnum % gdbarch_num_regs (current_gdbarch)) < MIPS_NUMREGS)
+  if ((start_regnum % gdbarch_num_regs (gdbarch)) < MIPS_NUMREGS)
     fprintf_filtered (file, "\n R%-4d",
-		      start_regnum % gdbarch_num_regs (current_gdbarch));
+		      start_regnum % gdbarch_num_regs (gdbarch));
   else
     fprintf_filtered (file, "\n      ");
 
   /* now print the values in hex, 4 or 8 to the row */
   for (col = 0, regnum = start_regnum;
-       col < ncols && regnum < gdbarch_num_regs (current_gdbarch)
-			       + gdbarch_num_pseudo_regs (current_gdbarch);
+       col < ncols && regnum < gdbarch_num_regs (gdbarch)
+			       + gdbarch_num_pseudo_regs (gdbarch);
        regnum++)
     {
-      if (*gdbarch_register_name (current_gdbarch, regnum) == '\0')
+      if (*gdbarch_register_name (gdbarch, regnum) == '\0')
 	continue;		/* unused register */
       if (TYPE_CODE (register_type (gdbarch, regnum)) ==
 	  TYPE_CODE_FLT)
 	break;			/* end row: reached FP register */
-      if (register_size (current_gdbarch, regnum)
-	  > mips_abi_regsize (current_gdbarch))
+      if (register_size (gdbarch, regnum) > mips_abi_regsize (gdbarch))
 	break;			/* End row: large register.  */
 
       /* OK: get the data in raw format.  */
       if (!frame_register_read (frame, regnum, raw_buffer))
 	error (_("can't read register %d (%s)"),
-	       regnum, gdbarch_register_name (current_gdbarch, regnum));
+	       regnum, gdbarch_register_name (gdbarch, regnum));
       /* pad small registers */
       for (byte = 0;
-	   byte < (mips_abi_regsize (current_gdbarch)
-		   - register_size (current_gdbarch, regnum)); byte++)
+	   byte < (mips_abi_regsize (gdbarch)
+		   - register_size (gdbarch, regnum)); byte++)
 	printf_filtered ("  ");
       /* Now print the register value in hex, endian order. */
-      if (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG)
+      if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
 	for (byte =
-	     register_size (current_gdbarch,
-			    regnum) - register_size (current_gdbarch, regnum);
-	     byte < register_size (current_gdbarch, regnum); byte++)
+	     register_size (gdbarch,
+			    regnum) - register_size (gdbarch, regnum);
+	     byte < register_size (gdbarch, regnum); byte++)
 	  fprintf_filtered (file, "%02x", raw_buffer[byte]);
       else
-	for (byte = register_size (current_gdbarch, regnum) - 1;
+	for (byte = register_size (gdbarch, regnum) - 1;
 	     byte >= 0; byte--)
 	  fprintf_filtered (file, "%02x", raw_buffer[byte]);
       fprintf_filtered (file, " ");
@@ -4226,8 +4226,8 @@
 {
   if (regnum != -1)		/* do one specified register */
     {
-      gdb_assert (regnum >= gdbarch_num_regs (current_gdbarch));
-      if (*(gdbarch_register_name (current_gdbarch, regnum)) == '\0')
+      gdb_assert (regnum >= gdbarch_num_regs (gdbarch));
+      if (*(gdbarch_register_name (gdbarch, regnum)) == '\0')
 	error (_("Not a valid register for the current processor type"));
 
       mips_print_register (file, frame, regnum);
@@ -4236,9 +4236,9 @@
   else
     /* do all (or most) registers */
     {
-      regnum = gdbarch_num_regs (current_gdbarch);
-      while (regnum < gdbarch_num_regs (current_gdbarch)
-		      + gdbarch_num_pseudo_regs (current_gdbarch))
+      regnum = gdbarch_num_regs (gdbarch);
+      while (regnum < gdbarch_num_regs (gdbarch)
+		      + gdbarch_num_pseudo_regs (gdbarch))
 	{
 	  if (TYPE_CODE (register_type (gdbarch, regnum)) ==
 	      TYPE_CODE_FLT)
@@ -5529,9 +5529,9 @@
 }
 
 static void
-mips_dump_tdep (struct gdbarch *current_gdbarch, struct ui_file *file)
+mips_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
+  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
   if (tdep != NULL)
     {
       int ef_mips_arch;





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