diff options
author | Ulrich Weigand <uweigand@de.ibm.com> | 2007-10-13 00:05:07 +0000 |
---|---|---|
committer | Ulrich Weigand <uweigand@de.ibm.com> | 2007-10-13 00:05:07 +0000 |
commit | 4c8b6ae009ad0e664cb1ec681e58c4a942fa4915 (patch) | |
tree | 2fdfeb0fdaafea24ec62505d3629ac3cb36f1732 /gdb/frv-tdep.c | |
parent | f266c1c5f5cdfc0ec23c97f164846b0c6c476a45 (diff) | |
download | gdb-4c8b6ae009ad0e664cb1ec681e58c4a942fa4915.zip gdb-4c8b6ae009ad0e664cb1ec681e58c4a942fa4915.tar.gz gdb-4c8b6ae009ad0e664cb1ec681e58c4a942fa4915.tar.bz2 |
* avr-tdep.c (avr_return_value): New function.
(avr_gdbarch_init): Call set_gdbarch_return_value instead of
set_gdbarch_extract_return_value.
* fvr-tdep.c (frv_return_value): New function.
(frv_gdbarch_init): Call set_gdbarch_return_value instead of
set_gdbarch_extract_return_value, set_gdbarch_store_return_value,
and set_gdbarch_deprecated_use_struct_convention.
* ia64-tdep.c (ia64_use_struct_convention): Make static.
Add check for structure, union, or array types.
(ia64_extract_return_value): Make static.
(ia64_store_return_value): Make static. Support multi-word values.
(ia64_return_value): New function.
(ia64_gdbarch_init): Call set_gdbarch_return_value instead of
set_gdbarch_extract_return_value, set_gdbarch_store_return_value,
and set_gdbarch_deprecated_use_struct_convention.
Diffstat (limited to 'gdb/frv-tdep.c')
-rw-r--r-- | gdb/frv-tdep.c | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/gdb/frv-tdep.c b/gdb/frv-tdep.c index c6746b9..6dd7d36 100644 --- a/gdb/frv-tdep.c +++ b/gdb/frv-tdep.c @@ -1247,6 +1247,33 @@ frv_store_return_value (struct type *type, struct regcache *regcache, _("Don't know how to return a %d-byte value."), len); } +enum return_value_convention +frv_return_value (struct gdbarch *gdbarch, struct type *valtype, + struct regcache *regcache, gdb_byte *readbuf, + const gdb_byte *writebuf) +{ + int struct_return = TYPE_CODE (valtype) == TYPE_CODE_STRUCT + || TYPE_CODE (valtype) == TYPE_CODE_UNION + || TYPE_CODE (valtype) == TYPE_CODE_ARRAY; + + if (writebuf != NULL) + { + gdb_assert (!struct_return); + frv_store_return_value (valtype, regcache, writebuf); + } + + if (readbuf != NULL) + { + gdb_assert (!struct_return); + frv_extract_return_value (valtype, regcache, readbuf); + } + + if (struct_return) + return RETURN_VALUE_STRUCT_CONVENTION; + else + return RETURN_VALUE_REGISTER_CONVENTION; +} + /* Hardware watchpoint / breakpoint support for the FR500 and FR400. */ @@ -1488,10 +1515,7 @@ frv_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) set_gdbarch_adjust_breakpoint_address (gdbarch, frv_adjust_breakpoint_address); - set_gdbarch_deprecated_use_struct_convention (gdbarch, always_use_struct_convention); - set_gdbarch_extract_return_value (gdbarch, frv_extract_return_value); - - set_gdbarch_store_return_value (gdbarch, frv_store_return_value); + set_gdbarch_return_value (gdbarch, frv_return_value); /* Frame stuff. */ set_gdbarch_unwind_pc (gdbarch, frv_unwind_pc); |