aboutsummaryrefslogtreecommitdiff
path: root/gdb/mn10300-tdep.c
diff options
context:
space:
mode:
authorKevin Buettner <kevinb@redhat.com>2005-09-03 00:12:26 +0000
committerKevin Buettner <kevinb@redhat.com>2005-09-03 00:12:26 +0000
commit99fe5f9d5b55b7bb39af847b3e6503b912dd505f (patch)
tree085253b984c7194fd5ec717eb280189fad0cf562 /gdb/mn10300-tdep.c
parent9e8926f984728a1f92171d226d917e37c8f4630b (diff)
downloadfsf-binutils-gdb-99fe5f9d5b55b7bb39af847b3e6503b912dd505f.zip
fsf-binutils-gdb-99fe5f9d5b55b7bb39af847b3e6503b912dd505f.tar.gz
fsf-binutils-gdb-99fe5f9d5b55b7bb39af847b3e6503b912dd505f.tar.bz2
* mn10300-tdep.c (mn10300_use_struct_convention): Delete parameter
``gcc_p''. Adjust all callers. (mn10300_store_return_value, mn10300_extract_return_value): Add new parameter ``gdbarch''. (mn10300_return_value): New function. (mn10300_gdbarch_init): Delete old-style return value code calls. Add call to set_gdbarch_return_value().
Diffstat (limited to 'gdb/mn10300-tdep.c')
-rw-r--r--gdb/mn10300-tdep.c45
1 files changed, 28 insertions, 17 deletions
diff --git a/gdb/mn10300-tdep.c b/gdb/mn10300-tdep.c
index a894c8b..cfba6d6 100644
--- a/gdb/mn10300-tdep.c
+++ b/gdb/mn10300-tdep.c
@@ -90,11 +90,9 @@ mn10300_type_align (struct type *type)
}
}
-/* MVS note this is deprecated. */
/* Should call_function allocate stack space for a struct return? */
-/* gcc_p unused */
static int
-mn10300_use_struct_convention (int gcc_p, struct type *type)
+mn10300_use_struct_convention (struct type *type)
{
/* Structures bigger than a pair of words can't be returned in
registers. */
@@ -108,8 +106,7 @@ mn10300_use_struct_convention (int gcc_p, struct type *type)
/* Structures with a single field are handled as the field
itself. */
if (TYPE_NFIELDS (type) == 1)
- return mn10300_use_struct_convention (gcc_p,
- TYPE_FIELD_TYPE (type, 0));
+ return mn10300_use_struct_convention (TYPE_FIELD_TYPE (type, 0));
/* Structures with word or double-word size are passed in memory, as
long as they require at least word alignment. */
@@ -125,19 +122,17 @@ mn10300_use_struct_convention (int gcc_p, struct type *type)
return 1;
case TYPE_CODE_TYPEDEF:
- return mn10300_use_struct_convention (gcc_p, check_typedef (type));
+ return mn10300_use_struct_convention (check_typedef (type));
default:
return 0;
}
}
-/* MVS note this is deprecated. */
static void
-mn10300_store_return_value (struct type *type,
+mn10300_store_return_value (struct gdbarch *gdbarch, struct type *type,
struct regcache *regcache, const void *valbuf)
{
- struct gdbarch *gdbarch = get_regcache_arch (regcache);
int len = TYPE_LENGTH (type);
int reg, regsz;
@@ -162,12 +157,10 @@ mn10300_store_return_value (struct type *type,
_("Cannot store return value %d bytes long."), len);
}
-/* MVS note deprecated. */
static void
-mn10300_extract_return_value (struct type *type,
+mn10300_extract_return_value (struct gdbarch *gdbarch, struct type *type,
struct regcache *regcache, void *valbuf)
{
- struct gdbarch *gdbarch = get_regcache_arch (regcache);
char buf[MAX_REGISTER_SIZE];
int len = TYPE_LENGTH (type);
int reg, regsz;
@@ -196,6 +189,28 @@ mn10300_extract_return_value (struct type *type,
_("Cannot extract return value %d bytes long."), len);
}
+/* Determine, for architecture GDBARCH, how a return value of TYPE
+ should be returned. If it is supposed to be returned in registers,
+ and READBUF is non-zero, read the appropriate value from REGCACHE,
+ and copy it into READBUF. If WRITEBUF is non-zero, write the value
+ from WRITEBUF into REGCACHE. */
+
+static enum return_value_convention
+mn10300_return_value (struct gdbarch *gdbarch, struct type *type,
+ struct regcache *regcache, gdb_byte *readbuf,
+ const gdb_byte *writebuf)
+{
+ if (mn10300_use_struct_convention (type))
+ return RETURN_VALUE_STRUCT_CONVENTION;
+
+ if (readbuf)
+ mn10300_extract_return_value (gdbarch, type, regcache, readbuf);
+ if (writebuf)
+ mn10300_store_return_value (gdbarch, type, regcache, writebuf);
+
+ return RETURN_VALUE_REGISTER_CONVENTION;
+}
+
static char *
register_name (int reg, char **regs, long sizeof_regs)
{
@@ -990,11 +1005,7 @@ mn10300_gdbarch_init (struct gdbarch_info info,
set_gdbarch_print_insn (gdbarch, print_insn_mn10300);
/* Stage 2 */
- /* MVS Note: at least the first one is deprecated! */
- set_gdbarch_deprecated_use_struct_convention (gdbarch,
- mn10300_use_struct_convention);
- set_gdbarch_store_return_value (gdbarch, mn10300_store_return_value);
- set_gdbarch_extract_return_value (gdbarch, mn10300_extract_return_value);
+ set_gdbarch_return_value (gdbarch, mn10300_return_value);
/* Stage 3 -- get target calls working. */
set_gdbarch_push_dummy_call (gdbarch, mn10300_push_dummy_call);