* m68k-tdep.c (m68k_svr4_return_value): Implement

RETURN_VALUE_ABI_RETURNS_ADDRESS.
This commit is contained in:
Mark Kettenis 2004-05-16 23:04:15 +00:00
parent 8d027a043b
commit 51da707ac6
2 changed files with 26 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2004-05-17 Mark Kettenis <kettenis@gnu.org>
* m68k-tdep.c (m68k_svr4_return_value): Implement
RETURN_VALUE_ABI_RETURNS_ADDRESS.
2004-05-16 Mark Kettenis <kettenis@gnu.org>
* sol-thread.c Update copyright year. Fix various coding

View File

@ -360,7 +360,27 @@ m68k_svr4_return_value (struct gdbarch *gdbarch, struct type *type,
if ((code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION)
&& !m68k_reg_struct_return_p (gdbarch, type))
return RETURN_VALUE_STRUCT_CONVENTION;
{
/* The System V ABI says that:
"A function returning a structure or union also sets %a0 to
the value it finds in %a0. Thus when the caller receives
control again, the address of the returned object resides in
register %a0."
So the ABI guarantees that we can always find the return
value just after the function has returned. */
if (readbuf)
{
ULONGEST addr;
regcache_raw_read_unsigned (regcache, M68K_A0_REGNUM, &addr);
read_memory (addr, readbuf, TYPE_LENGTH (type));
}
return RETURN_VALUE_ABI_RETURNS_ADDRESS;
}
/* This special case is for structures consisting of a single
`float' or `double' member. These structures are returned in