[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