summaryrefslogtreecommitdiffstats
path: root/config/external
diff options
context:
space:
mode:
Diffstat (limited to 'config/external')
-rw-r--r--config/external/ffi/moz.build21
1 files changed, 18 insertions, 3 deletions
diff --git a/config/external/ffi/moz.build b/config/external/ffi/moz.build
index e9ef07de3..3a5478967 100644
--- a/config/external/ffi/moz.build
+++ b/config/external/ffi/moz.build
@@ -35,9 +35,17 @@ else:
'FFI_NO_RAW_API': True,
'HAVE_AS_ASCII_PSEUDO_OP': True,
'HAVE_AS_STRING_PSEUDO_OP': True,
- 'HAVE_AS_X86_64_UNWIND_SECTION_TYPE': True,
})
+# This should NEVER be true on 32-bit x86 systems. It's called x86_64 unwind
+# section type for a reason. By rights the way it was before should have broken
+# all 32-bit builds on x86.
+
+ if CONFIG['FFI_TARGET'] == 'X86':
+ DEFINES['HAVE_AS_X86_64_UNWIND_SECTION_TYPE'] = False
+ else:
+ DEFINES['HAVE_AS_X86_64_UNWIND_SECTION_TYPE'] = True
+
if CONFIG['MOZ_DEBUG']:
DEFINES['FFI_DEBUG'] = True
if not CONFIG['MOZ_NO_DEBUG_RTL']:
@@ -49,13 +57,20 @@ else:
if CONFIG['OS_TARGET'] not in ('WINNT', 'Darwin'):
DEFINES['HAVE_HIDDEN_VISIBILITY_ATTRIBUTE'] = True
- if CONFIG['INTEL_ARCHITECTURE']:
+# Solaris uses datarel encoding for x86. This causes a lot of really stupid
+# problems, like the vast majority of x86 assembler not being considered PIC
+# on Solaris.
+
+ if CONFIG['INTEL_ARCHITECTURE'] and CONFIG['OS_TARGET'] != 'SunOS':
DEFINES['HAVE_AS_X86_PCREL'] = True
# Don't bother setting EH_FRAME_FLAGS on Windows.
# Quoted defines confuse msvcc.sh, and the value isn't used there.
if CONFIG['OS_TARGET'] != 'WINNT':
- if CONFIG['FFI_TARGET'] == 'ARM':
+ # Solaris seems to require EH_FRAME to be writable even on x86.
+ # It works fine most of the time and there's no rule against it,
+ # but it causes a lot of weird problems.
+ if CONFIG['FFI_TARGET'] == 'ARM' or CONFIG['OS_ARCH'] == 'SunOS':
DEFINES['EH_FRAME_FLAGS'] = '"aw"'
else:
DEFINES['EH_FRAME_FLAGS'] = '"a"'