|
4f9e20ac
|
2020-05-01T06:58:30
|
|
ffi_powerpc.h: fix build failure with powerpc7 (#561)
This is a patch pulled down from the following:
https://github.com/buildroot/buildroot/blob/78926f610b1411b03464152472fd430012deb9ac/package/libffi/0004-ffi_powerpc.h-fix-build-failure-with-powerpc7.patch
This issue is being hit on OpenBMC code when pulling the latest
libffi tag and building on a P8 ppc64le machine. I verified this
patch fixes the issue we are seeing.
Below is the original commit message:
Sicne commit 73dd43afc8a447ba98ea02e9aad4c6898dc77fb0, build on powerpc7
fails on:
In file included from ../src/powerpc/ffi.c:33:0:
../src/powerpc/ffi_powerpc.h:61:9: error: '_Float128' is not supported on this target
typedef _Float128 float128;
^~~~~~~~~
Fix this build failure by checking for __HAVE_FLOAT128 before using
_Float128, as _Float128 is enabled only on specific conditions, see
output/host/powerpc64-buildroot-linux-gnu/sysroot/usr/include/bits/floatn.h:
/* Defined to 1 if the current compiler invocation provides a
floating-point type with the IEEE 754 binary128 format, and this glibc
includes corresponding *f128 interfaces for it. */
#if defined _ARCH_PWR8 && defined __LITTLE_ENDIAN__ && (_CALL_ELF == 2) \
&& defined __FLOAT128__ && !defined __NO_LONG_DOUBLE_MATH
# define __HAVE_FLOAT128 1
#else
# define __HAVE_FLOAT128 0
#endif
Fixes:
- http://autobuild.buildroot.org/results/5c9dd8fb3b6a128882b6250f197c80232d8a3b53
Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
Signed-off-by: Andrew Geissler <geissonator@yahoo.com>
Co-authored-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
|
|
01a75ed7
|
2019-11-28T12:42:41
|
|
powerpc: fix build failure on power7 and older (#532)
Build failure looks as:
```
libtool: compile: powerpc-unknown-linux-gnu-gcc \
-O2 -mcpu=powerpc -mtune=powerpc -pipe ... -c src/powerpc/ffi.c ...
In file included from src/powerpc/ffi.c:33:
src/powerpc/ffi_powerpc.h:65:9: error: '__int128' is not supported on this target
65 | typedef __int128 float128;
| ^~~~~~~~
```
The fix avoids using __int128 in favour of aligned char[16].
Closes: https://github.com/libffi/libffi/issues/531
Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
|
|
73dd43af
|
2019-11-17T07:22:25
|
|
IEEE754 binary128 long double support for PowerPC64 (#526)
* powerpc: Adjust flags to make room for vector types
* powerpc64 ELFv2 IEEE128 long double support
|
|
fa1040c1
|
2014-11-10T09:42:31
|
|
GO closures for powerpc linux
Plus .cfi async unwind info, rearrangement of ffi_call_linux64 and
ffi_call_SYSV function params to avoid register copies, tweaks to
trampolines.
* src/powerpc/ffitarget.h (FFI_GO_CLOSURES): Define.
* src/powerpc/ffi.c (ffi_call_int): New function with extra
closure param, and args rearranged on ffi_call_linux64 and
ffi_call_SYSV calls, extracted from ..
(ffi_call): ..here.
(ffi_call_go, ffi_prep_go_closure): New functions.
* src/powerpc/ffi_linux64.c (ffi_prep_closure_loc_linux64): Make
hidden. Only flush insn part of ELFv2 trampoline. Don't shuffle
ELFv1 trampoline.
(ffi_closure_helper_LINUX64): Replace closure param with cif, fun,
user_data params.
* src/powerpc/ffi_powerpc.h (ffi_go_closure_sysv): Declare.
(ffi_go_closure_linux64): Declare.
(ffi_call_SYSV, fi_call_LINUX64): Update.
(ffi_prep_closure_loc_sysv, ffi_prep_closure_loc_linux64): Declare.
(ffi_closure_helper_SYSV, ffi_closure_helper_LINUX64): Update.
* src/powerpc/ffi_sysv.c (ASM_NEEDS_REGISTERS): Increase to 6.
(ffi_prep_closure_loc_sysv): Use bcl in trampoline, put data words
last, flush just the insn part.
(ffi_closure_helper_SYSV): Replace closure param with cif, fun and
user_data params.
* src/powerpc/linux64.S (ffi_call_LINUX64): Replace hand-written
.eh_frame with .cfi directives. Adjust for changed param order.
Pass extra "closure" param to user function in static chain. Add
.cfi directives to describe epilogue. Don't provide traceback
table for ELFv2 or _CALL_LINUX.
* src/powerpc/linux64_closure.S (ffi_closure_LINUX64): Replace
hand-written .eh_frame with .cfi directives. Adjust for changed
ffi_closure_helper_LINUX64 params. Add .cfi directives to
describe epilogue. Don't provide traceback table for ELFv2 or
_CALL_LINUX.
(ffi_go_closure_linux64): New function.
* src/powerpc/sysv.S: Remove redundant .globl ffi_prep_args_SYSV.
(ffi_call_SYSV): Make hidden. Replace hand-written .eh_frame with
.cfi directives. Adjust for changed params. Pass extra "closure"
param to user function in static chain. Add .cfi directives to
describe epilogue.
* src/powerpc/ppc_closure.S (ffi_closure_SYSV): Make hidden.
Replace hand-written .eh_frame with .cfi directives. Adjust for
changed ffi_closure_helper_SYSV params. Add .cfi directives to
describe epilogue. Don't just use nops in the dead __NO_FPRS__
epilogues.
(ffi_go_closure_sysv): New function.
|
|
ab79d6e2
|
2013-11-21T06:12:35
|
|
This separates the 32-bit sysv/linux/bsd code from the 64-bit linux
code, and makes it possible to link code compiled with different
options to those used to compile libffi. For example, a
-mlong-double-128 libffi can be used with -mlong-double-64 code.
Using the return value area as a place to pass parameters wasn't such
a good idea, causing a failure of cls_ulonglong.c. I didn't see this
when running the mainline gcc libffi testsuite because that version of
the test is inferior to the upstreamm libffi test.
Using NUM_FPR_ARG_REGISTERS rather than NUM_FPR_ARG_REGISTERS64 meant
that a parameter save area could be allocated before it was strictly
necessary. Wrong but harmless. Found when splitting apart ffi.c
into 32-bit and 64-bit support.
|
|
ac753688
|
2013-11-21T06:12:35
|
|
This separates the 32-bit sysv/linux/bsd code from the 64-bit linux
code, and makes it possible to link code compiled with different
options to those used to compile libffi. For example, a
-mlong-double-128 libffi can be used with -mlong-double-64 code.
Using the return value area as a place to pass parameters wasn't such
a good idea, causing a failure of cls_ulonglong.c. I didn't see this
when running the mainline gcc libffi testsuite because that version of
the test is inferior to the upstreamm libffi test.
Using NUM_FPR_ARG_REGISTERS rather than NUM_FPR_ARG_REGISTERS64 meant
that a parameter save area could be allocated before it was strictly
necessary. Wrong but harmless. Found when splitting apart ffi.c
into 32-bit and 64-bit support.
|