| Index: SConstruct
|
| diff --git a/SConstruct b/SConstruct
|
| index d04379117474cf5763d6990fd3bf8c1e78462ca4..271e637c16fe937d154e11b53ce65ecee53e17d4 100755
|
| --- a/SConstruct
|
| +++ b/SConstruct
|
| @@ -3478,28 +3478,19 @@
|
| nacl_irt_env.ClearBits('nacl_glibc')
|
| nacl_irt_env.ClearBits('nacl_pic')
|
| nacl_irt_env.ClearBits('nacl_clang')
|
| -nacl_irt_env.ClearBits('pnacl_generate_pexe')
|
| -nacl_irt_env.ClearBits('use_sandboxed_translator')
|
| -
|
| # The choice of toolchain used to build the IRT does not depend on the toolchain
|
| -# used to build user/test code. PNaCl is used on mips because that's currently
|
| -# the only compiler for mips. nacl-clang is used on x86.
|
| -if nacl_irt_env.Bit('build_mips32'):
|
| +# used to build user/test code. The PNaCl toolchain is used on x86, except on
|
| +# Windows (because pnacl-clang doesn't run on Windows XP. If we stop supporting
|
| +# building on XP, we can remove this exception). See
|
| +# https://code.google.com/p/nativeclient/issues/detail?id=3936
|
| +if (nacl_irt_env.Bit('build_mips32') or nacl_irt_env.Bit('build_x86_64') or
|
| + (nacl_irt_env.Bit('build_x86_32') and
|
| + not nacl_irt_env.Bit('host_windows'))):
|
| nacl_irt_env.SetBits('bitcode')
|
| else:
|
| nacl_irt_env.ClearBits('bitcode')
|
| -if nacl_irt_env.Bit('build_x86_64') or nacl_irt_env.Bit('build_x86_32'):
|
| - nacl_irt_env.SetBits('nacl_clang')
|
| - # The IRT must be built using LLVM's assembler on x86-64 to preserve sandbox
|
| - # base address hiding (a security hardening mechanism).
|
| - # It's also used on x86-32 for consistency.
|
| - # See https://code.google.com/p/nativeclient/issues/detail?id=1235
|
| - nacl_irt_env.Append(CCFLAGS=['-integrated-as'])
|
| - if nacl_irt_env.Bit('build_x86_32'):
|
| - # The x86-32 IRT needs to be callable with an under-aligned stack.
|
| - # See https://code.google.com/p/nativeclient/issues/detail?id=3935
|
| - nacl_irt_env.Append(CCFLAGS=['-mstackrealign', '-mno-sse'])
|
| -
|
| +nacl_irt_env.ClearBits('pnacl_generate_pexe')
|
| +nacl_irt_env.ClearBits('use_sandboxed_translator')
|
| nacl_irt_env.Tool('naclsdk')
|
| # These are unfortunately clobbered by running Tool, which
|
| # we needed to do to get the destination directory reset.
|
| @@ -3514,8 +3505,21 @@
|
| nacl_irt_env.Replace(LIBPATH='${LIB_DIR}')
|
|
|
| if nacl_irt_env.Bit('bitcode'):
|
| - nacl_irt_env.Append(LINKFLAGS=['--pnacl-allow-native'])
|
| - if nacl_irt_env.Bit('build_mips32'):
|
| + if nacl_irt_env.Bit('build_x86_64'):
|
| + nacl_irt_env.Append(CCFLAGS=['--target=x86_64-unknown-nacl'])
|
| + nacl_irt_env.Append(LINKFLAGS=['--target=x86_64-unknown-nacl',
|
| + '--pnacl-allow-translate',
|
| + '-arch', 'x86-64'])
|
| + elif nacl_irt_env.Bit('build_x86_32'):
|
| + nacl_irt_env.Append(CCFLAGS=['--target=i686-unknown-nacl'])
|
| + # X86-32 IRT needs to be callable with an under-aligned stack, so we disable
|
| + # SSE instructions, which can fault on misaligned addresses: see
|
| + # https://code.google.com/p/nativeclient/issues/detail?id=3935
|
| + nacl_irt_env.Append(LINKFLAGS=['--target=i686-unknown-nacl',
|
| + '--pnacl-allow-translate',
|
| + '-arch', 'x86-32',
|
| + '-Wt,-mattr=-sse'])
|
| + elif nacl_irt_env.Bit('build_mips32'):
|
| # Disable the PNaCl IRT verifier since it will complain about
|
| # __executable_start symbol not being a valid external symbol.
|
| nacl_irt_env.Append(LINKFLAGS=['--pnacl-disable-abi-check'])
|
| @@ -3525,9 +3529,9 @@
|
| # libc++) pthread.
|
| nacl_irt_env.Replace(LINK=(nacl_irt_env['LINK'].
|
| replace('pnacl-clang++', 'pnacl-clang')))
|
| -nacl_irt_env.Replace(LINK=(nacl_irt_env['LINK'].
|
| - replace('nacl-clang++', 'nacl-clang')))
|
| -
|
| +
|
| +if nacl_irt_env.Bit('bitcode'):
|
| + nacl_irt_env.Append(LINKFLAGS=['--pnacl-allow-native'])
|
|
|
| # All IRT code must avoid direct use of the TLS ABI register, which
|
| # is reserved for user TLS. Instead, ensure all TLS accesses use a
|
|
|