An #endif in the wrong place would cause compile failure on powerpcle. Using bl instead of b doesn't cause runtime failures as you might think, but does mess the processor branch prediction.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
diff --git a/ChangeLog b/ChangeLog
index 08c1dd8..3c5854c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2013-11-16 Alan Modra <amodra@gmail.com>
+ * src/powerpc/ppc_closure.S: Move errant #endif to where it belongs.
+ Don't bl .Luint128.
+
+2013-11-16 Alan Modra <amodra@gmail.com>
+
* src/powerpc/ffi.c (ffi_prep_cif_machdep_core): Use #if _CALL_ELF
test to select parameter save sizing for ELFv2 vs. ELFv1.
* src/powerpc/ffitarget.h (FFI_V2_TYPE_FLOAT_HOMOG,
diff --git a/src/powerpc/ppc_closure.S b/src/powerpc/ppc_closure.S
index 3eefe7e..1f72340 100644
--- a/src/powerpc/ppc_closure.S
+++ b/src/powerpc/ppc_closure.S
@@ -238,7 +238,7 @@ ENTRY(ffi_closure_SYSV)
lwz %r3,112+0(%r1)
lwz %r4,112+4(%r1)
lwz %r5,112+8(%r1)
- bl .Luint128
+ b .Luint128
# The return types below are only used when the ABI type is FFI_SYSV.
# case FFI_SYSV_TYPE_SMALL_STRUCT + 1. One byte struct.
@@ -320,13 +320,13 @@ ENTRY(ffi_closure_SYSV)
mtlr %r0
addi %r1,%r1,144
blr
+#endif
.Luint128:
lwz %r6,112+12(%r1)
mtlr %r0
addi %r1,%r1,144
blr
-#endif
END(ffi_closure_SYSV)