Luis Machado <luisgpm@br.ibm.com>
Thiago Jung Bauermann <bauerman@br.ibm.com> * ppc-sysv-tdep.c (ppc_sysv_abi_push_dummy_call): Pass floats that don't fit into registerson the stack the way GCC does.
This commit is contained in:
parent
3709d2edc8
commit
f964a7562a
|
@ -1,3 +1,10 @@
|
|||
2008-02-02 Mark Kettenis <kettenis@gnu.org>
|
||||
Luis Machado <luisgpm@br.ibm.com>
|
||||
Thiago Jung Bauermann <bauerman@br.ibm.com>
|
||||
|
||||
* ppc-sysv-tdep.c (ppc_sysv_abi_push_dummy_call): Pass floats that
|
||||
don't fit into registerson the stack the way GCC does.
|
||||
|
||||
2008-02-01 Joel Brobecker <brobecker@adacore.com>
|
||||
|
||||
* symtab.c (symbol_set_names): Do not add an entry in the demangling
|
||||
|
|
|
@ -129,17 +129,21 @@ ppc_sysv_abi_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
|
|||
}
|
||||
else
|
||||
{
|
||||
/* SysV ABI converts floats to doubles before
|
||||
writing them to an 8 byte aligned stack location. */
|
||||
argoffset = align_up (argoffset, 8);
|
||||
/* The SysV ABI tells us to convert floats to
|
||||
doubles before writing them to an 8 byte aligned
|
||||
stack location. Unfortunately GCC does not do
|
||||
that, and stores floats into 4 byte aligned
|
||||
locations without converting them to doubles.
|
||||
Since there is no know compiler that actually
|
||||
follows the ABI here, we implement the GCC
|
||||
convention. */
|
||||
|
||||
/* Align to 4 bytes or 8 bytes depending on the type of
|
||||
the argument (float or double). */
|
||||
argoffset = align_up (argoffset, len);
|
||||
if (write_pass)
|
||||
{
|
||||
char memval[8];
|
||||
convert_typed_floating (val, type, memval,
|
||||
builtin_type_ieee_double);
|
||||
write_memory (sp + argoffset, val, len);
|
||||
}
|
||||
argoffset += 8;
|
||||
argoffset += len;
|
||||
}
|
||||
}
|
||||
else if (TYPE_CODE (type) == TYPE_CODE_FLT
|
||||
|
|
Loading…
Reference in New Issue