On Fri, May 04, 2018 at 07:40:20PM +0930, Alan Modra wrote:
> The attached patch has been accepted into upstream libffi.  It fixes
> powerpc64-linux problems shown up by Bruno Haible's new libffi
> testsuite tests.  Bootstrapped and regression tested powerpc64-linux
> and powerpc64le-linux.  OK mainline and active branches?

That looks fine, and since it is in upstream it counts as obvious I
think?

Is there a test for this, btw?


Segher


> >From a3b6c9db017d3f142031636a9dd6088c5478ca28 Mon Sep 17 00:00:00 2001
> From: Alan Modra <amo...@gmail.com>
> Date: Wed, 2 May 2018 19:10:53 +0930
> Subject: [PATCH] libffi PowerPC64 ELFv1 fp arg fixes
> 
> The ELFv1 ABI says: "Single precision floating point values are mapped
> to the second word in a single doubleword" and also "Floating point
> registers f1 through f13 are used consecutively to pass up to 13
> floating point values, one member aggregates passed by value
> containing a floating point value, and to pass complex floating point
> values".
> 
> libffi wasn't expecting float args in the second word, and wasn't
> passing one member aggregates in fp registers.  This patch fixes those
> problems, making use of the existing ELFv2 homogeneous aggregate
> support since a one element fp struct is a special case of an
> homogeneous aggregate.
> 
> I've also set a flag when returning pointers that might be used one
> day.  This is just a tidy since the ppc64 assembly support code
> currently doesn't test FLAG_RETURNS_64BITS for integer types..
> 
>       * src/powerpc/ffi_linux64.c (discover_homogeneous_aggregate):
>       Compile for ELFv1 too, handling single element aggregates.
>       (ffi_prep_cif_linux64_core): Call discover_homogeneous_aggregate
>       for ELFv1.  Set FLAG_RETURNS_64BITS for FFI_TYPE_POINTER return.
>       (ffi_prep_args64): Call discover_homogeneous_aggregate for ELFv1,
>       and handle single element structs containing float or double
>       as if the element wasn't wrapped in a struct.  Store floats in
>       second word of doubleword slot when big-endian.
>       (ffi_closure_helper_LINUX64): Similarly.

Reply via email to