This is the mail archive of the gdb-patches@sources.redhat.com 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]

[patch rfc] store_address -> store_unsigned_integer


Hello,

This patch replaces store_address() with store_unsigned_integer(). A follow on patch would replace extract_address() with extract_unsigned_integer().

Why?

Because both extract_address() and store_address() are misnomers. On the MIPS and any d10v like harvard architecture they do not and cannot do what they claim. If the code really needs to extract or store an address then the recently added:
extract_typed_address()
store_typed_address()
methods need be used (and core GDB does this).


Baring comment (...), I'll look to commit this in a few days (and then follow up with the corresponding extract_address patch).

Andrew
2003-05-08  Andrew Cagney  <cagney@redhat.com>

	* defs.h (store_address): Delete declaration.
	findvar.c (store_address): Delete function.
	* arm-tdep.c (arm_push_dummy_call): Replace store_address with
	store_unsigned_integer.
	* xstormy16-tdep.c (xstormy16_address_to_pointer): Ditto.
	* v850-tdep.c (v850_push_arguments): Ditto.
	* sparc-tdep.c (sparc_get_saved_register): Ditto.
	* sh-tdep.c (sh64_get_saved_register): Ditto.
	* rs6000-tdep.c (rs6000_push_arguments): Ditto.
	* ppc-sysv-tdep.c (ppc_sysv_abi_push_arguments): Ditto.
	* mips-tdep.c (mips_eabi_push_arguments): Ditto.
	(mips_get_saved_register): Ditto.
	* ia64-tdep.c (ia64_get_saved_register): Ditto.
	(find_func_descr, ia64_push_arguments): Ditto.
	* i386-tdep.c (i386_push_arguments): Ditto.
	* hpux-thread.c (hpux_thread_fetch_registers): Ditto.
	* frv-tdep.c (frv_push_arguments): Ditto.
	* frame.c (legacy_saved_regs_prev_register): Ditto.
	(deprecated_generic_get_saved_register): Ditto.
	* findvar.c (unsigned_address_to_pointer): Ditto.
	* dwarf2read.c (dwarf2_const_value): Ditto.
	* arm-linux-tdep.c (arm_linux_push_arguments): Ditto.
	* alpha-tdep.c (alpha_push_arguments): Ditto.

Index: doc/ChangeLog
2003-05-08  Andrew Cagney  <cagney@redhat.com>

	* gdbint.texinfo (Target Architecture Definition): Delete
	reference to "store_address".

Index: alpha-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/alpha-tdep.c,v
retrieving revision 1.82
diff -u -r1.82 alpha-tdep.c
--- alpha-tdep.c	5 May 2003 17:56:54 -0000	1.82
+++ alpha-tdep.c	10 May 2003 00:00:24 -0000
@@ -1146,7 +1146,9 @@
     write_memory (sp + m_arg->offset, m_arg->contents, m_arg->len);
   if (struct_return)
     {
-      store_address (raw_buffer, sizeof (CORE_ADDR), struct_addr);
+      /* NOTE: cagney/2003-05-09: Using sizeof CORE_ADDR here is just
+         wrong.  */
+      store_unsigned_integer (raw_buffer, sizeof (CORE_ADDR), struct_addr);
       write_memory (sp, raw_buffer, sizeof (CORE_ADDR));
     }
 
@@ -1226,7 +1228,7 @@
      registers follow in ascending order.
      The PC is saved immediately below the SP.  */
   save_address = sp + PROC_REG_OFFSET (proc_desc);
-  store_address (raw_buffer, 8, read_register (ALPHA_RA_REGNUM));
+  store_unsigned_integer (raw_buffer, 8, read_register (ALPHA_RA_REGNUM));
   write_memory (save_address, raw_buffer, 8);
   save_address += 8;
   mask = PROC_REG_MASK (proc_desc) & 0xffffffffL;
@@ -1235,12 +1237,12 @@
       {
 	if (ireg == ALPHA_RA_REGNUM)
 	  continue;
-	store_address (raw_buffer, 8, read_register (ireg));
+	store_unsigned_integer (raw_buffer, 8, read_register (ireg));
 	write_memory (save_address, raw_buffer, 8);
 	save_address += 8;
       }
 
-  store_address (raw_buffer, 8, read_register (PC_REGNUM));
+  store_unsigned_integer (raw_buffer, 8, read_register (PC_REGNUM));
   write_memory (sp - 8, raw_buffer, 8);
 
   /* Save floating point registers.  */
@@ -1249,7 +1251,7 @@
   for (ireg = 0; mask; ireg++, mask >>= 1)
     if (mask & 1)
       {
-	store_address (raw_buffer, 8, read_register (ireg + FP0_REGNUM));
+	store_unsigned_integer (raw_buffer, 8, read_register (ireg + FP0_REGNUM));
 	write_memory (save_address, raw_buffer, 8);
 	save_address += 8;
       }
Index: arm-linux-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/arm-linux-tdep.c,v
retrieving revision 1.31
diff -u -r1.31 arm-linux-tdep.c
--- arm-linux-tdep.c	5 May 2003 17:56:54 -0000	1.31
+++ arm-linux-tdep.c	10 May 2003 00:00:25 -0000
@@ -195,7 +195,7 @@
 	{
 	  CORE_ADDR regval = extract_address (val, len);
 	  if (arm_pc_is_thumb (regval))
-	    store_address (val, len, MAKE_THUMB_ADDR (regval));
+	    store_unsigned_integer (val, len, MAKE_THUMB_ADDR (regval));
 	}
 
       /* Copy the argument to general registers or the stack in
Index: arm-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/arm-tdep.c,v
retrieving revision 1.132
diff -u -r1.132 arm-tdep.c
--- arm-tdep.c	5 May 2003 17:56:54 -0000	1.132
+++ arm-tdep.c	10 May 2003 00:00:27 -0000
@@ -1468,7 +1468,7 @@
 	  if (arm_pc_is_thumb (regval))
 	    {
 	      val = alloca (len);
-	      store_address (val, len, MAKE_THUMB_ADDR (regval));
+	      store_unsigned_integer (val, len, MAKE_THUMB_ADDR (regval));
 	    }
 	}
 
Index: defs.h
===================================================================
RCS file: /cvs/src/src/gdb/defs.h,v
retrieving revision 1.121
diff -u -r1.121 defs.h
--- defs.h	8 May 2003 20:52:46 -0000	1.121
+++ defs.h	10 May 2003 00:00:29 -0000
@@ -1134,8 +1134,6 @@
 
 extern void store_unsigned_integer (void *, int, ULONGEST);
 
-extern void store_address (void *, int, LONGEST);
-
 extern void store_typed_address (void *buf, struct type *type, CORE_ADDR addr);
 
 
Index: dwarf2read.c
===================================================================
RCS file: /cvs/src/src/gdb/dwarf2read.c,v
retrieving revision 1.92
diff -u -r1.92 dwarf2read.c
--- dwarf2read.c	8 May 2003 18:05:37 -0000	1.92
+++ dwarf2read.c	10 May 2003 00:00:33 -0000
@@ -5319,8 +5319,10 @@
 								   (sym)));
       SYMBOL_VALUE_BYTES (sym) = (char *)
 	obstack_alloc (&objfile->symbol_obstack, cu_header->addr_size);
-      store_address (SYMBOL_VALUE_BYTES (sym), cu_header->addr_size,
-		     DW_ADDR (attr));
+      /* NOTE: cagney/2003-05-09: In-lined store_address call with
+         it's body - store_unsigned_integer.  */
+      store_unsigned_integer (SYMBOL_VALUE_BYTES (sym), cu_header->addr_size,
+			      DW_ADDR (attr));
       SYMBOL_CLASS (sym) = LOC_CONST_BYTES;
       break;
     case DW_FORM_block1:
Index: findvar.c
===================================================================
RCS file: /cvs/src/src/gdb/findvar.c,v
retrieving revision 1.54
diff -u -r1.54 findvar.c
--- findvar.c	8 May 2003 20:52:47 -0000	1.54
+++ findvar.c	10 May 2003 00:00:34 -0000
@@ -252,24 +252,6 @@
     }
 }
 
-/* Store the address VAL as a LEN-byte value in target byte order at
-   ADDR.  ADDR is a buffer in the GDB process, not in the inferior.
-
-   This function should only be used by target-specific code.  It
-   assumes that a pointer has the same representation as that thing's
-   address represented as an integer.  Some machines use word
-   addresses, or similarly munged things, for certain types of
-   pointers, so that assumption doesn't hold everywhere.
-
-   Common code should use store_typed_address instead, or something else
-   based on ADDRESS_TO_POINTER.  */
-void
-store_address (void *addr, int len, LONGEST val)
-{
-  store_unsigned_integer (addr, len, val);
-}
-
-
 /* Store the address ADDR as a pointer of type TYPE at BUF, in target
    form.  */
 void
@@ -365,7 +347,7 @@
 void
 unsigned_address_to_pointer (struct type *type, void *buf, CORE_ADDR addr)
 {
-  store_address (buf, TYPE_LENGTH (type), addr);
+  store_unsigned_integer (buf, TYPE_LENGTH (type), addr);
 }
 
 void
Index: frame.c
===================================================================
RCS file: /cvs/src/src/gdb/frame.c,v
retrieving revision 1.113
diff -u -r1.113 frame.c
--- frame.c	8 May 2003 20:52:47 -0000	1.113
+++ frame.c	10 May 2003 00:00:36 -0000
@@ -983,8 +983,10 @@
 	  *addrp = 0;
 	  *realnump = -1;
 	  if (bufferp != NULL)
-	    store_address (bufferp, REGISTER_RAW_SIZE (regnum),
-			   get_frame_saved_regs (frame)[regnum]);
+	    /* NOTE: cagney/2003-05-09: In-lined store_address with
+               it's body - store_unsigned_integer.  */
+	    store_unsigned_integer (bufferp, REGISTER_RAW_SIZE (regnum),
+				    get_frame_saved_regs (frame)[regnum]);
 	}
       else
 	{
@@ -1125,8 +1127,11 @@
 	      if (regnum == SP_REGNUM)
 		{
 		  if (raw_buffer)	/* SP register treated specially */
-		    store_address (raw_buffer, REGISTER_RAW_SIZE (regnum),
-				   get_frame_saved_regs (frame)[regnum]);
+		    /* NOTE: cagney/2003-05-09: In-line store_address
+                       with it's body - store_unsigned_integer.  */
+		    store_unsigned_integer (raw_buffer,
+					    REGISTER_RAW_SIZE (regnum),
+					    get_frame_saved_regs (frame)[regnum]);
 		}
 	      else
 		{
Index: frv-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/frv-tdep.c,v
retrieving revision 1.35
diff -u -r1.35 frv-tdep.c
--- frv-tdep.c	5 May 2003 17:56:54 -0000	1.35
+++ frv-tdep.c	10 May 2003 00:00:36 -0000
@@ -843,7 +843,7 @@
 
       if (typecode == TYPE_CODE_STRUCT || typecode == TYPE_CODE_UNION)
 	{
-	  store_address (valbuf, 4, VALUE_ADDRESS (arg));
+	  store_unsigned_integer (valbuf, 4, VALUE_ADDRESS (arg));
 	  typecode = TYPE_CODE_PTR;
 	  len = 4;
 	  val = valbuf;
Index: hpux-thread.c
===================================================================
RCS file: /cvs/src/src/gdb/hpux-thread.c,v
retrieving revision 1.16
diff -u -r1.16 hpux-thread.c
--- hpux-thread.c	8 May 2003 22:33:14 -0000	1.16
+++ hpux-thread.c	10 May 2003 00:00:36 -0000
@@ -294,7 +294,7 @@
 	    /* Flags must be 0 to avoid bogus value for SS_INSYSCALL */
 	    memset (buf, '\000', REGISTER_RAW_SIZE (regno));
 	  else if (regno == SP_REGNUM)
-	    store_address (buf, sizeof sp, sp);
+	    store_unsigned_integer (buf, sizeof sp, sp);
 	  else if (regno == PC_REGNUM)
 	    read_memory (sp - 20, buf, REGISTER_RAW_SIZE (regno));
 	  else
Index: i386-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/i386-tdep.c,v
retrieving revision 1.142
diff -u -r1.142 i386-tdep.c
--- i386-tdep.c	8 May 2003 20:52:47 -0000	1.142
+++ i386-tdep.c	10 May 2003 00:00:37 -0000
@@ -864,7 +864,7 @@
       char buf[4];
 
       sp -= 4;
-      store_address (buf, 4, struct_addr);
+      store_unsigned_integer (buf, 4, struct_addr);
       write_memory (sp, buf, 4);
     }
 
Index: ia64-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/ia64-tdep.c,v
retrieving revision 1.75
diff -u -r1.75 ia64-tdep.c
--- ia64-tdep.c	8 May 2003 20:52:47 -0000	1.75
+++ ia64-tdep.c	10 May 2003 00:00:39 -0000
@@ -1239,13 +1239,13 @@
   if (regnum == SP_REGNUM && get_next_frame (frame))
     {
       /* Handle SP values for all frames but the topmost. */
-      store_address (raw_buffer, REGISTER_RAW_SIZE (regnum),
-		     get_frame_base (frame));
+      store_unsigned_integer (raw_buffer, REGISTER_RAW_SIZE (regnum),
+			      get_frame_base (frame));
     }
   else if (regnum == IA64_BSP_REGNUM)
     {
-      store_address (raw_buffer, REGISTER_RAW_SIZE (regnum), 
-                     get_frame_extra_info (frame)->bsp);
+      store_unsigned_integer (raw_buffer, REGISTER_RAW_SIZE (regnum), 
+			      get_frame_extra_info (frame)->bsp);
     }
   else if (regnum == IA64_VFP_REGNUM)
     {
@@ -1255,7 +1255,7 @@
 	 still provide a value since we know the size of the frame */
       CORE_ADDR vfp = (get_frame_base (frame)
 		       + get_frame_extra_info (frame)->mem_stack_frame_size);
-      store_address (raw_buffer, REGISTER_RAW_SIZE (IA64_VFP_REGNUM), vfp);
+      store_unsigned_integer (raw_buffer, REGISTER_RAW_SIZE (IA64_VFP_REGNUM), vfp);
     }
   else if (IA64_PR0_REGNUM <= regnum && regnum <= IA64_PR63_REGNUM)
     {
@@ -1338,7 +1338,7 @@
         {
 	  pc = read_pc ();
 	}
-      store_address (raw_buffer, REGISTER_RAW_SIZE (IA64_IP_REGNUM), pc);
+      store_unsigned_integer (raw_buffer, REGISTER_RAW_SIZE (IA64_IP_REGNUM), pc);
     }
   else if (IA64_GR32_REGNUM <= regnum && regnum <= IA64_GR127_REGNUM)
     {
@@ -1769,8 +1769,8 @@
       if (global_pointer == 0)
 	global_pointer = read_register (IA64_GR1_REGNUM);
 
-      store_address (buf, 8, faddr);
-      store_address (buf + 8, 8, global_pointer);
+      store_unsigned_integer (buf, 8, faddr);
+      store_unsigned_integer (buf + 8, 8, global_pointer);
 
       write_memory (fdesc, buf, 16);
     }
@@ -1862,9 +1862,9 @@
 	{
 	  char val_buf[8];
 
-	  store_address (val_buf, 8,
-	    find_func_descr (extract_address (VALUE_CONTENTS (arg), 8),
-	                     &funcdescaddr));
+	  store_unsigned_integer (val_buf, 8,
+				  find_func_descr (extract_address (VALUE_CONTENTS (arg), 8),
+						   &funcdescaddr));
 	  if (slotnum < rseslots)
 	    write_memory (rse_address_add (bsp, slotnum), val_buf, 8);
 	  else
@@ -1920,9 +1920,9 @@
   /* Store the struct return value in r8 if necessary. */
   if (struct_return)
     {
-      store_address (&deprecated_registers[REGISTER_BYTE (IA64_GR8_REGNUM)],
-                     REGISTER_RAW_SIZE (IA64_GR8_REGNUM),
-		     struct_addr);
+      store_unsigned_integer (&deprecated_registers[REGISTER_BYTE (IA64_GR8_REGNUM)],
+			      REGISTER_RAW_SIZE (IA64_GR8_REGNUM),
+			      struct_addr);
     }
 
   /* Sync gdb's idea of what the registers are with the target. */
Index: mips-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/mips-tdep.c,v
retrieving revision 1.197
diff -u -r1.197 mips-tdep.c
--- mips-tdep.c	8 May 2003 20:52:47 -0000	1.197
+++ mips-tdep.c	10 May 2003 00:00:43 -0000
@@ -2767,7 +2767,7 @@
       if (len > MIPS_SAVED_REGSIZE
 	  && (typecode == TYPE_CODE_STRUCT || typecode == TYPE_CODE_UNION))
 	{
-	  store_address (valbuf, MIPS_SAVED_REGSIZE, VALUE_ADDRESS (arg));
+	  store_unsigned_integer (valbuf, MIPS_SAVED_REGSIZE, VALUE_ADDRESS (arg));
 	  typecode = TYPE_CODE_PTR;
 	  len = MIPS_SAVED_REGSIZE;
 	  val = valbuf;
@@ -5442,7 +5442,7 @@
 	      /* Only MIPS_SAVED_REGSIZE bytes of GP registers are
 		 saved. */
 	      LONGEST val = read_memory_integer ((*addrp), MIPS_SAVED_REGSIZE);
-	      store_address (raw_buffer, REGISTER_RAW_SIZE (regnum), val);
+	      store_unsigned_integer (raw_buffer, REGISTER_RAW_SIZE (regnum), val);
 	    }
 	}
     }
Index: ppc-sysv-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/ppc-sysv-tdep.c,v
retrieving revision 1.4
diff -u -r1.4 ppc-sysv-tdep.c
--- ppc-sysv-tdep.c	17 Mar 2003 18:27:07 -0000	1.4
+++ ppc-sysv-tdep.c	10 May 2003 00:00:43 -0000
@@ -180,7 +180,7 @@
   write_register (SP_REGNUM, sp);
 
   /* write the backchain */
-  store_address (old_sp_buf, 4, saved_sp);
+  store_unsigned_integer (old_sp_buf, 4, saved_sp);
   write_memory (sp, old_sp_buf, 4);
 
   argoffset = 8;
@@ -261,7 +261,7 @@
 	      || TYPE_CODE (type) == TYPE_CODE_UNION)
 	    {
 	      write_memory (sp + structoffset, val, len);
-	      store_address (val_buf, 4, sp + structoffset);
+	      store_unsigned_integer (val_buf, 4, sp + structoffset);
 	      structoffset += round2 (len, 8);
 	    }
 	  else
Index: rs6000-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/rs6000-tdep.c,v
retrieving revision 1.131
diff -u -r1.131 rs6000-tdep.c
--- rs6000-tdep.c	8 May 2003 20:52:48 -0000	1.131
+++ rs6000-tdep.c	10 May 2003 00:00:46 -0000
@@ -1269,7 +1269,7 @@
     write_register (SP_REGNUM, sp);
 
   /* set back chain properly */
-  store_address (tmp_buffer, 4, saved_sp);
+  store_unsigned_integer (tmp_buffer, 4, saved_sp);
   write_memory (sp, tmp_buffer, 4);
 
   target_store_registers (-1);
Index: sh-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/sh-tdep.c,v
retrieving revision 1.122
diff -u -r1.122 sh-tdep.c
--- sh-tdep.c	8 May 2003 22:33:14 -0000	1.122
+++ sh-tdep.c	10 May 2003 00:00:48 -0000
@@ -1873,8 +1873,8 @@
 	  if (regnum == SP_REGNUM)
 	    {
 	      if (raw_buffer)	/* SP register treated specially */
-		store_address (raw_buffer, REGISTER_RAW_SIZE (regnum),
-			       get_frame_saved_regs (frame)[regnum]);
+		store_unsigned_integer (raw_buffer, REGISTER_RAW_SIZE (regnum),
+					get_frame_saved_regs (frame)[regnum]);
 	    }
 	  else
 	    { /* any other register */
Index: sparc-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/sparc-tdep.c,v
retrieving revision 1.98
diff -u -r1.98 sparc-tdep.c
--- sparc-tdep.c	8 May 2003 20:52:48 -0000	1.98
+++ sparc-tdep.c	10 May 2003 00:00:50 -0000
@@ -859,7 +859,7 @@
       if (raw_buffer != NULL)
 	{
 	  /* Put it back in target format.  */
-	  store_address (raw_buffer, REGISTER_RAW_SIZE (regnum), get_frame_pc (frame));
+	  store_unsigned_integer (raw_buffer, REGISTER_RAW_SIZE (regnum), get_frame_pc (frame));
 	}
       if (addrp != NULL)
 	*addrp = 0;
@@ -967,7 +967,7 @@
 	  if (raw_buffer != NULL)
 	    {
 	      /* Put it back in target format.  */
-	      store_address (raw_buffer, REGISTER_RAW_SIZE (regnum), addr);
+	      store_unsigned_integer (raw_buffer, REGISTER_RAW_SIZE (regnum), addr);
 	    }
 	  if (addrp != NULL)
 	    *addrp = 0;
Index: v850-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/v850-tdep.c,v
retrieving revision 1.61
diff -u -r1.61 v850-tdep.c
--- v850-tdep.c	5 May 2003 17:56:56 -0000	1.61
+++ v850-tdep.c	10 May 2003 00:00:50 -0000
@@ -958,7 +958,7 @@
       if (!v850_type_is_scalar (VALUE_TYPE (*args))
 	  && TYPE_LENGTH (VALUE_TYPE (*args)) > E_MAX_RETTYPE_SIZE_IN_REGS)
 	{
-	  store_address (valbuf, 4, VALUE_ADDRESS (*args));
+	  store_unsigned_integer (valbuf, 4, VALUE_ADDRESS (*args));
 	  len = 4;
 	  val = valbuf;
 	}
Index: xstormy16-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/xstormy16-tdep.c,v
retrieving revision 1.49
diff -u -r1.49 xstormy16-tdep.c
--- xstormy16-tdep.c	5 May 2003 17:56:56 -0000	1.49
+++ xstormy16-tdep.c	10 May 2003 00:00:50 -0000
@@ -985,7 +985,7 @@
       if (addr2)
 	addr = addr2;
     }
-  store_address (buf, TYPE_LENGTH (type), addr);
+  store_unsigned_integer (buf, TYPE_LENGTH (type), addr);
 }
 
 static CORE_ADDR
Index: doc/gdbint.texinfo
===================================================================
RCS file: /cvs/src/src/gdb/doc/gdbint.texinfo,v
retrieving revision 1.144
diff -u -r1.144 gdbint.texinfo
--- doc/gdbint.texinfo	5 May 2003 17:56:57 -0000	1.144
+++ doc/gdbint.texinfo	10 May 2003 00:00:54 -0000
@@ -2617,19 +2617,6 @@
 @code{extract_typed_address} instead.
 @end deftypefun
 
-@deftypefun void store_address (void *@var{addr}, int @var{len}, LONGEST @var{val})
-Store @var{val} at @var{addr} as a @var{len}-byte integer, in the
-appropriate endianness for the current architecture.  Note that
-@var{addr} refers to a buffer in @value{GDBN}'s memory, not the
-inferior's.
-
-This function should only be used in architecture-specific code; it
-doesn't have enough information to turn a true address into bits in the
-appropriate way for the current architecture.  If you can, use
-@code{store_typed_address} instead.
-@end deftypefun
-
-
 Here are some macros which architectures can define to indicate the
 relationship between pointers and addresses.  These have default
 definitions, appropriate for architectures on which all pointers are

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