Source: libffi Version: 3.0.13-5 Severity: wishlist Tags: patch sid User: debian-powerpc...@breakpoint.cc Usertags: powerpcspe
Hi, libffi currently FTBFS on powerpcspe like this: ... libtool: compile: powerpc-linux-gnuspe-gcc -DHAVE_CONFIG_H -I. -I.. -I. -I../include -Iinclude -I../src -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -fexceptions -MT src/powerpc/ffi.lo -MD -MP -MF src/powerpc/.deps/ffi.Tpo -c ../src/powerpc/ffi.c -fPIC -DPIC -o src/powerpc/.libs/ffi.o ../src/powerpc/ffi.c: In function 'ffi_prep_cif_machdep_core': ../src/powerpc/ffi.c:981:24: error: 'NUM_FPR_ARG_REGISTERS' undeclared (first use in this function) ../src/powerpc/ffi.c:981:24: note: each undeclared identifier is reported only once for each function it appears in ../src/powerpc/ffi.c: In function 'ffi_closure_helper_LINUX64': ../src/powerpc/ffi.c:1797:25: error: 'FLAG_RETURNS_FP' undeclared (first use in this function) make[3]: *** [src/powerpc/ffi.lo] Error 1 make[3]: Leaving directory `/«PKGBUILDDIR»/build' make[2]: *** [all-recursive] Error 1 make[1]: *** [all] Error 2 make: *** [stamp-build] Error 2 ... The codebase supports powerpcspe already, but some recent changes broke it. Attaching a patch that fixes it via the __NO_FPRS__ conditionals already used in all the other powerpcspe specific places. Roland -- System Information: Debian Release: 7.0 APT prefers unreleased APT policy: (500, 'unreleased'), (500, 'unstable') Architecture: powerpcspe (ppc) Kernel: Linux 3.9.0-dirty (SMP w/2 CPU cores) Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8) (ignored: LC_ALL set to en_GB.UTF-8) Shell: /bin/sh linked to /bin/dash
Index: libffi-3.0.13/src/powerpc/ffi.c =================================================================== --- libffi-3.0.13.orig/src/powerpc/ffi.c 2013-11-20 07:24:56.000000000 +0100 +++ libffi-3.0.13/src/powerpc/ffi.c 2013-11-20 07:32:16.639021999 +0100 @@ -974,6 +974,7 @@ switch ((*ptr)->type) { +#ifndef __NO_FPRS__ #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE case FFI_TYPE_LONGDOUBLE: fparg_count += 2; @@ -989,7 +990,7 @@ if (fparg_count > NUM_FPR_ARG_REGISTERS) flags |= FLAG_ARG_NEEDS_PSAVE; break; - +#endif case FFI_TYPE_STRUCT: #ifdef __STRUCT_PARM_ALIGN__ align = (*ptr)->alignment; @@ -1004,6 +1005,7 @@ #if _CALL_ELF == 2 elt = discover_homogeneous_aggregate (*ptr, &elnum); #endif +#ifndef __NO_FPRS__ if (elt) { fparg_count += elnum; @@ -1011,6 +1013,7 @@ flags |= FLAG_ARG_NEEDS_PSAVE; } else +#endif { if (intarg_count > NUM_GPR_ARG_REGISTERS) flags |= FLAG_ARG_NEEDS_PSAVE; @@ -1794,9 +1797,12 @@ /* Tell ffi_closure_LINUX64 how to perform return type promotions. */ if ((cif->flags & FLAG_RETURNS_SMST) != 0) { +#ifndef __NO_FPRS__ if ((cif->flags & FLAG_RETURNS_FP) == 0) return FFI_V2_TYPE_SMALL_STRUCT + cif->rtype->size - 1; - else if ((cif->flags & FLAG_RETURNS_64BITS) != 0) + else +#endif + if ((cif->flags & FLAG_RETURNS_64BITS) != 0) return FFI_V2_TYPE_DOUBLE_HOMOG; else return FFI_V2_TYPE_FLOAT_HOMOG;