Source: ecl
Version: 12.12.1-3
Severity: wishlist
Tags: patch
User: debian-powerpc...@breakpoint.cc
Usertags: powerpcspe

Hi,

ecl currently FTBFS on powerpcspe like this:

[...]
libtool: compile:  gcc -fPIC -DHAVE_CONFIG_H -I. -I/«PKGBUILDDIR»/src/libffi 
-I. -I/«PKGBUILDDIR»/src/libffi/include -Iinclude 
-I/«PKGBUILDDIR»/src/libffi/src -I. -I/«PKGBUILDDIR»/src/libffi/include 
-Iinclude -I/«PKGBUILDDIR»/src/libffi/src -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 
-g -O2 -fPIC -D_THREAD_SAFE -MT src/powerpc/sysv.lo -MD -MP -MF 
src/powerpc/.deps/sysv.Tpo -c /«PKGBUILDDIR»/src/libffi/src/powerpc/sysv.S -o 
src/powerpc/sysv.o
/«PKGBUILDDIR»/src/libffi/src/powerpc/sysv.S: Assembler messages:
/«PKGBUILDDIR»/src/libffi/src/powerpc/sysv.S:88: Error: unrecognized opcode: 
`lfd'
/«PKGBUILDDIR»/src/libffi/src/powerpc/sysv.S:89: Error: unrecognized opcode: 
`lfd'
/«PKGBUILDDIR»/src/libffi/src/powerpc/sysv.S:90: Error: unrecognized opcode: 
`lfd'
/«PKGBUILDDIR»/src/libffi/src/powerpc/sysv.S:91: Error: unrecognized opcode: 
`lfd'
/«PKGBUILDDIR»/src/libffi/src/powerpc/sysv.S:93: Error: unrecognized opcode: 
`lfd'
/«PKGBUILDDIR»/src/libffi/src/powerpc/sysv.S:94: Error: unrecognized opcode: 
`lfd'
/«PKGBUILDDIR»/src/libffi/src/powerpc/sysv.S:95: Error: unrecognized opcode: 
`lfd'
/«PKGBUILDDIR»/src/libffi/src/powerpc/sysv.S:96: Error: unrecognized opcode: 
`lfd'
/«PKGBUILDDIR»/src/libffi/src/powerpc/sysv.S:129: Error: unrecognized opcode: 
`stfd'
/«PKGBUILDDIR»/src/libffi/src/powerpc/sysv.S:132: Error: unrecognized opcode: 
`stfd'
/«PKGBUILDDIR»/src/libffi/src/powerpc/sysv.S:135: Error: unrecognized opcode: 
`stfs'
/«PKGBUILDDIR»/src/libffi/src/powerpc/sysv.S:147: Error: unrecognized opcode: 
`stswx'
/«PKGBUILDDIR»/src/libffi/src/powerpc/sysv.S:150: Error: unrecognized opcode: 
`stswi'
make[4]: *** [src/powerpc/sysv.lo] Error 1
make[4]: Leaving directory `/«PKGBUILDDIR»/build/libffi'
make[3]: *** [install-recursive] Error 1
make[3]: Leaving directory `/«PKGBUILDDIR»/build/libffi'
make[2]: *** [libeclffi.a] Error 2
make[2]: Leaving directory `/«PKGBUILDDIR»/build'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/«PKGBUILDDIR»'
make: *** [build-arch-stamp] Error 2
[...]

The attached patch fixes this by omitting the floating point register
save/restore operations on powerpcspe because those simply don't exist on
powerpcspe.

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: ecl-13.5.1/src/libffi/src/powerpc/sysv.S
===================================================================
--- ecl-13.5.1.orig/src/libffi/src/powerpc/sysv.S	2013-12-12 15:47:34.000000000 +0100
+++ ecl-13.5.1/src/libffi/src/powerpc/sysv.S	2013-12-12 15:52:07.771561924 +0100
@@ -85,6 +85,7 @@
 
 	/* Load all the FP registers.  */
 	bf-	6,2f
+#ifndef __NO_FPRS__
 	lfd	%f1,-16-(8*4)-(8*8)(%r28)
 	lfd	%f2,-16-(8*4)-(7*8)(%r28)
 	lfd	%f3,-16-(8*4)-(6*8)(%r28)
@@ -94,6 +95,7 @@
 	lfd	%f6,-16-(8*4)-(3*8)(%r28)
 	lfd	%f7,-16-(8*4)-(2*8)(%r28)
 	lfd	%f8,-16-(8*4)-(1*8)(%r28)
+#endif
 2:
 
 	/* Make the call.  */
@@ -126,13 +128,19 @@
 
 L(fp_return_value):
 	bf	28,L(float_return_value)
+#ifndef __NO_FPRS__
 	stfd	%f1,0(%r30)
+#endif
 	mtcrf   0x02,%r31 /* cr6  */
 	bf	27,L(done_return_value)
+#ifndef __NO_FPRS__
 	stfd	%f2,8(%r30)
+#endif
 	b	L(done_return_value)
 L(float_return_value):
+#ifndef __NO_FPRS__
 	stfs	%f1,0(%r30)
+#endif
 	b	L(done_return_value)
 
 L(small_struct_return_value):
@@ -144,10 +152,14 @@
 /* smst_one_register: */
 	slw	%r3,%r3,%r5           /* Left-justify value in r3 */
 	mtxer	%r6                   /* move byte count to XER ... */
+#ifndef __NO_FPRS__
 	stswx	%r3,0,%r30            /* ... and store that many bytes */
+#endif
 	bf+	26,L(done_return_value)  /* struct in r3:r4 ? */
 	add	%r6,%r6,%r30          /* adjust pointer */
+#ifndef __NO_FPRS__
 	stswi	%r4,%r6,4             /* store last four bytes */
+#endif
 	b	L(done_return_value)
 
 .LFE1:
--- ecl-13.5.1.orig/src/libffi/src/powerpc/ppc_closure.S
+++ ecl-13.5.1/src/libffi/src/powerpc/ppc_closure.S
@@ -122,20 +122,26 @@ ENTRY(ffi_closure_SYSV)
 	blr
 
 # case FFI_TYPE_FLOAT
+#ifndef __NO_FPRS__
 	lfs %f1,112+0(%r1)
+#endif
 	mtlr %r0
 	addi %r1,%r1,144
 	blr
 
 # case FFI_TYPE_DOUBLE
+#ifndef __NO_FPRS__
 	lfd %f1,112+0(%r1)
+#endif
 	mtlr %r0
 	addi %r1,%r1,144
 	blr
 
 # case FFI_TYPE_LONGDOUBLE
+#ifndef __NO_FPRS__
 	lfd %f1,112+0(%r1)
 	lfd %f2,112+8(%r1)
+#endif
 	mtlr %r0
 	b .Lfinish
 

Reply via email to