Index: cfe/trunk/cmake/caches/Fuchsia-stage2.cmake =================================================================== --- cfe/trunk/cmake/caches/Fuchsia-stage2.cmake +++ cfe/trunk/cmake/caches/Fuchsia-stage2.cmake @@ -18,13 +18,6 @@ set(CLANG_DEFAULT_LINKER lld CACHE STRING "") endif() -# This is a "Does your linker support it?" option that only applies -# to x86-64 ELF targets. All Fuchsia target linkers do support it. -# For x86-64 Linux, it's supported by LLD and by GNU linkers since -# binutils 2.27, so one can hope that all Linux hosts in use handle it. -# Ideally this would be settable as a per-target option. -set(ENABLE_X86_RELAX_RELOCATIONS ON CACHE BOOL "") - if(APPLE) set(LLDB_CODESIGN_IDENTITY "" CACHE STRING "") endif() Index: cfe/trunk/include/clang/Driver/ToolChain.h =================================================================== --- cfe/trunk/include/clang/Driver/ToolChain.h +++ cfe/trunk/include/clang/Driver/ToolChain.h @@ -316,6 +316,9 @@ /// mixed dispatch method be used? virtual bool UseObjCMixedDispatch() const { return false; } + /// \brief Check whether to enable x86 relax relocations by default. + virtual bool useRelaxRelocations() const; + /// GetDefaultStackProtectorLevel - Get the default stack protector level for /// this tool chain (0=off, 1=on, 2=strong, 3=all). virtual unsigned GetDefaultStackProtectorLevel(bool KernelOrKext) const { Index: cfe/trunk/lib/Driver/ToolChain.cpp =================================================================== --- cfe/trunk/lib/Driver/ToolChain.cpp +++ cfe/trunk/lib/Driver/ToolChain.cpp @@ -90,6 +90,10 @@ IsIntegratedAssemblerDefault()); } +bool ToolChain::useRelaxRelocations() const { + return ENABLE_X86_RELAX_RELOCATIONS; +} + const SanitizerArgs& ToolChain::getSanitizerArgs() const { if (!SanitizerArguments.get()) SanitizerArguments.reset(new SanitizerArgs(*this, Args)); Index: cfe/trunk/lib/Driver/ToolChains/Clang.cpp =================================================================== --- cfe/trunk/lib/Driver/ToolChains/Clang.cpp +++ cfe/trunk/lib/Driver/ToolChains/Clang.cpp @@ -1869,7 +1869,7 @@ // arg after parsing the '-I' arg. bool TakeNextArg = false; - bool UseRelaxRelocations = ENABLE_X86_RELAX_RELOCATIONS; + bool UseRelaxRelocations = C.getDefaultToolChain().useRelaxRelocations(); const char *MipsTargetFeature = nullptr; for (const Arg *A : Args.filtered(options::OPT_Wa_COMMA, options::OPT_Xassembler)) { Index: cfe/trunk/lib/Driver/ToolChains/Fuchsia.h =================================================================== --- cfe/trunk/lib/Driver/ToolChains/Fuchsia.h +++ cfe/trunk/lib/Driver/ToolChains/Fuchsia.h @@ -43,6 +43,7 @@ bool HasNativeLLVMSupport() const override { return true; } bool IsIntegratedAssemblerDefault() const override { return true; } bool IsMathErrnoDefault() const override { return false; } + bool useRelaxRelocations() const override { return true; }; RuntimeLibType GetDefaultRuntimeLibType() const override { return ToolChain::RLT_CompilerRT; } Index: cfe/trunk/test/Driver/fuchsia.c =================================================================== --- cfe/trunk/test/Driver/fuchsia.c +++ cfe/trunk/test/Driver/fuchsia.c @@ -5,6 +5,7 @@ // RUN: --sysroot=%S/platform 2>&1 \ // RUN: | FileCheck -check-prefixes=CHECK,CHECK-AARCH64 %s // CHECK: {{.*}}clang{{.*}}" "-cc1" +// CHECK: "--mrelax-relocations" // CHECK: "-munwind-tables" // CHECK: "-fuse-init-array" // CHECK: "-isysroot" "[[SYSROOT:[^"]+]]"