Work-around libffi's FP ABI detection.
authorLandon Fuller <landonf@bikemonkey.org>
Sat, 18 Sep 2010 22:32:08 +0000 (15:32 -0700)
committerLandon Fuller <landonf@bikemonkey.org>
Sat, 18 Sep 2010 22:32:08 +0000 (15:32 -0700)
On iOS, we must use the AAPCS floating point return value calling
conventions. libffi's ARM implementation will only use these conventions
if __SOFTFP__ is defined, which is not the case when GCC's
-mfloat-abi defaults to 'softfp' instead of 'soft'. To work around this
we manually define __SOFTFP__ for Apple platforms in the ARM-specific
sysv.S.

See also:
  http://developer.apple.com/library/ios/#documentation/Xcode/Conceptual/iPhoneOSABIReference/Introduction/Introduction.html
  http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042d/IHI0042D_aapcs.pdf

src/arm/sysv.S

index 9064318..dc5fe36 100644 (file)
 #define CONCAT1(a, b) CONCAT2(a, b)
 #define CONCAT2(a, b) a ## b
 
+/* Use the SOFTFP return value ABI on Mac OS X, as per the iOS ABI
+   Function Call Guide */
+#ifdef __APPLE__
+#define __SOFTFP__
+#endif
+
 /* Use the right prefix for global labels.  */
 #define CNAME(x) CONCAT1 (__USER_LABEL_PREFIX__, x)
 #else