[PATCH] clean up two alpha deprecateds

Richard Henderson rth@twiddle.net
Fri Jun 30 00:57:00 GMT 2006


As far as I can tell, alpha_register_byte did nothing useful anymore.
Leastwise I can't see any effect simply from removing it and its
depricated hook.

Changing to alpha_return_value is a teeny bit trickier, since we 
really did like the old use_struct_convention hook for the one 
abberant alpha abi.  I've moved that to a hook in the tdep structure
instead.  I copied the rest of the form of alpha_return_value from
the i386 port.

I do note that the i386 port does nothing for writeval for structures;
I'm not sure why that would be correct, but I've duplicated it.


r~


2006-06-29  Richard Henderson  <rth@redhat.com>

	* alpha-tdep.h (struct gdbarch_tdep): Add return_in_memory.
	* alpha-tdep.c (alpha_register_byte): Remove.
	(alpha_extract_struct_value_address): Remove.
	(alpha_return_value): New.
	(alpha_return_in_memory_always): New.
	(alpha_gdbarch_init): Set tdep->return_in_memory.  Don't call
	set_gdbarch_deprecated_register_byte.  Do call set_gdbarch_return_value
	instead of set_gdbarch_deprecated_use_struct_convention,
	set_gdbarch_extract_return_value, set_gdbarch_store_return_value,
	or set_gdbarch_deprecated_extract_struct_value_address.
	* alphafbsd-tdep.c (alphafbsd_return_in_memory): Rename from
	alphafbsd_use_struct_convention, remove gcc_p argument.
	(alphafbsd_init_abi): Set tdep->return_in_memory instead of
	set_gdbarch_deprecated_use_struct_convention.

Index: alpha-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/alpha-tdep.c,v
retrieving revision 1.154
diff -u -p -r1.154 alpha-tdep.c
--- alpha-tdep.c	18 Apr 2006 19:20:05 -0000	1.154
+++ alpha-tdep.c	30 Jun 2006 00:43:56 -0000
@@ -149,12 +149,6 @@ alpha_register_reggroup_p (struct gdbarc
     return group == general_reggroup;
 }
 
-static int
-alpha_register_byte (int regno)
-{
-  return (regno * 8);
-}
-
 /* The following represents exactly the conversion performed by
    the LDS instruction.  This applies to both single-precision
    floating point and 32-bit integers.  */
@@ -501,17 +495,6 @@ alpha_extract_return_value (struct type 
     }
 }
 
-/* Extract from REGCACHE the address of a structure about to be returned
-   from a function.  */
-
-static CORE_ADDR
-alpha_extract_struct_value_address (struct regcache *regcache)
-{
-  ULONGEST addr;
-  regcache_cooked_read_unsigned (regcache, ALPHA_V0_REGNUM, &addr);
-  return addr;
-}
-
 /* Insert the given value into REGCACHE as if it was being 
    returned by a function.  */
 
@@ -585,6 +568,41 @@ alpha_store_return_value (struct type *v
     }
 }
 
+static enum return_value_convention
+alpha_return_value (struct gdbarch *gdbarch, struct type *type,
+		    struct regcache *regcache, gdb_byte *readbuf,
+		    const gdb_byte *writebuf)
+{
+  enum type_code code = TYPE_CODE (type);
+
+  if ((code == TYPE_CODE_STRUCT
+       || code == TYPE_CODE_UNION
+       || code == TYPE_CODE_ARRAY)
+      && gdbarch_tdep (gdbarch)->return_in_memory (type))
+    {
+      if (readbuf)
+	{
+	  ULONGEST addr;
+	  regcache_raw_read_unsigned (regcache, ALPHA_V0_REGNUM, &addr);
+	  read_memory (addr, readbuf, TYPE_LENGTH (type));
+	}
+
+      return RETURN_VALUE_ABI_RETURNS_ADDRESS;
+    }
+
+  if (readbuf)
+    alpha_extract_return_value (type, regcache, readbuf);
+  if (writebuf)
+    alpha_store_return_value (type, regcache, writebuf);
+
+  return RETURN_VALUE_REGISTER_CONVENTION;
+}
+
+static int
+alpha_return_in_memory_always (struct type *type)
+{
+  return 1;
+}
 
 static const unsigned char *
 alpha_breakpoint_from_pc (CORE_ADDR *pcptr, int *lenptr)
@@ -1551,6 +1569,8 @@ alpha_gdbarch_init (struct gdbarch_info 
 
   tdep->jb_pc = -1;	/* longjmp support not enabled by default  */
 
+  tdep->return_in_memory = alpha_return_in_memory_always;
+
   /* Type sizes */
   set_gdbarch_short_bit (gdbarch, 16);
   set_gdbarch_int_bit (gdbarch, 32);
@@ -1568,7 +1588,6 @@ alpha_gdbarch_init (struct gdbarch_info 
   set_gdbarch_fp0_regnum (gdbarch, ALPHA_FP0_REGNUM);
 
   set_gdbarch_register_name (gdbarch, alpha_register_name);
-  set_gdbarch_deprecated_register_byte (gdbarch, alpha_register_byte);
   set_gdbarch_register_type (gdbarch, alpha_register_type);
 
   set_gdbarch_cannot_fetch_register (gdbarch, alpha_cannot_fetch_register);
@@ -1588,10 +1607,7 @@ alpha_gdbarch_init (struct gdbarch_info 
 
   /* Call info.  */
 
-  set_gdbarch_deprecated_use_struct_convention (gdbarch, always_use_struct_convention);
-  set_gdbarch_extract_return_value (gdbarch, alpha_extract_return_value);
-  set_gdbarch_store_return_value (gdbarch, alpha_store_return_value);
-  set_gdbarch_deprecated_extract_struct_value_address (gdbarch, alpha_extract_struct_value_address);
+  set_gdbarch_return_value (gdbarch, alpha_return_value);
 
   /* Settings for calling functions in the inferior.  */
   set_gdbarch_push_dummy_call (gdbarch, alpha_push_dummy_call);
Index: alpha-tdep.h
===================================================================
RCS file: /cvs/src/src/gdb/alpha-tdep.h,v
retrieving revision 1.23
diff -u -p -r1.23 alpha-tdep.h
--- alpha-tdep.h	17 Dec 2005 22:33:59 -0000	1.23
+++ alpha-tdep.h	30 Jun 2006 00:43:56 -0000
@@ -88,6 +88,9 @@ struct gdbarch_tdep
      sigtramp unwinders.  */
   int (*pc_in_sigtramp) (CORE_ADDR pc, char *name);
 
+  /* If TYPE will be returned in memory, return true.  */
+  int (*return_in_memory) (struct type *type);
+
   /* Offset of registers in `struct sigcontext'.  */
   int sc_pc_offset;
   int sc_regs_offset;
Index: alphafbsd-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/alphafbsd-tdep.c,v
retrieving revision 1.16
diff -u -p -r1.16 alphafbsd-tdep.c
--- alphafbsd-tdep.c	15 Jan 2006 19:45:28 -0000	1.16
+++ alphafbsd-tdep.c	30 Jun 2006 00:43:57 -0000
@@ -27,7 +27,7 @@
 #include "solib-svr4.h"
 
 static int
-alphafbsd_use_struct_convention (int gcc_p, struct type *type)
+alphafbsd_return_in_memory (struct type *type)
 {
   enum type_code code;
   int i;
@@ -104,12 +104,10 @@ alphafbsd_init_abi (struct gdbarch_info 
   set_solib_svr4_fetch_link_map_offsets
     (gdbarch, svr4_lp64_fetch_link_map_offsets);
 
-  set_gdbarch_deprecated_use_struct_convention
-    (gdbarch, alphafbsd_use_struct_convention);
-
   tdep->dynamic_sigtramp_offset = alphafbsd_sigtramp_offset;
   tdep->sigcontext_addr = alphafbsd_sigcontext_addr;
   tdep->pc_in_sigtramp = alphafbsd_pc_in_sigtramp;
+  tdep->return_in_memory = alphafbsd_return_in_memory;
   tdep->sc_pc_offset = 288;
   tdep->sc_regs_offset = 24;
   tdep->sc_fpregs_offset = 320;



More information about the Gdb-patches mailing list