PowerPC64 ELFv2 ABI: structure passing / return
authorUlrich Weigand <ulrich.weigand@de.ibm.com>
Tue, 4 Feb 2014 17:42:35 +0000 (18:42 +0100)
committerUlrich Weigand <ulrich.weigand@de.ibm.com>
Tue, 4 Feb 2014 17:42:35 +0000 (18:42 +0100)
commitcc0e89c519912e0e4e75a2fc0d836f715cdc6806
treed628750c8612ac48f864de53bb42fedb4f87e6e6
parent52f548e41f085550d7740c350c1c8a239532af77
PowerPC64 ELFv2 ABI: structure passing / return

Another significant difference in the ELFv2 ABI is that "homogeneous"
floating-point and vector aggregates, i.e. aggregates the consist
(recursively) only of members of the same floating-point or vector type,
are passed in a series of floating-point / vector registers, as if they
were seperate parameters.  (This is similar to the ARM ABI.)  This
applies to both calls and returns.

In addition when returning any aggregate of up to 16 bytes, ELFv2 now
used general-purpose registers.

This patch adds support for these aspects of the ABI, which is relatively
straightforward after the refactoring patch to ppc-sysv-tdep.c.

gdb/ChangeLog:

* ppc-sysv-tdep.c (ppc64_aggregate_candidate): New routine.
(ppc64_elfv2_abi_homogeneous_aggregate): Likewise.
(ppc64_sysv_abi_push_param): Handle ELFv2 homogeneous structs.
(ppc64_sysv_abi_return_value): Likewise.  Also, handle small
structures returned in GPRs.
gdb/ChangeLog
gdb/ppc-sysv-tdep.c