Andreas' 2013-02-08 change reverted some breakage for struct return

values from 2011-11-12, but in so doing reintroduced string
instructions to sysv.S that are not supported on all powerpc variants.
This patch properly copies the bounce buffer to destination in C code
rather than in asm.

I have tested this on powerpc64-linux, powerpc-linux and
powerpc-freebsd.  Well, the last on powerpc-linux by lying to
configure with

CC="gcc -m32 -msvr4-struct-return -mlong-double-64" \
CXX="g++ -m32 -msvr4-struct-return -mlong-double-64" \
/src/libffi-current/configure --build=powerpc-freebsd

and then

make && make CC="gcc -m32" CXX="g++ -m32" \
RUNTESTFLAGS=--target_board=unix/-m32/-msvr4-struct-return/-mlong-double-64\
 check
This commit is contained in:
Alan Modra
2013-11-16 06:52:43 -05:00
committed by Anthony Green
parent 1c06515d92
commit 362851379a
4 changed files with 56 additions and 61 deletions

View File

@@ -1,3 +1,13 @@
2013-11-16 Alan Modra <amodra@gmail.com>
* src/powerpc/ffi.c (ffi_prep_cif_machdep): Revert 2013-02-08
change. Do not consume an int arg when returning a small struct
for FFI_SYSV ABI.
(ffi_call): Only use bounce buffer when FLAG_RETURNS_SMST.
Properly copy bounce buffer to destination.
* src/powerpc/sysv.S: Revert 2013-02-08 change.
* src/powerpc/ppc_closure.S: Remove stray '+'.
2013-11-16 Alan Modra <amodra@gmail.com>
* src/powerpc/ffi.c (ffi_prep_args64): Align struct parameters