Index: lib/Driver/Tools.cpp =================================================================== --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -755,7 +755,7 @@ const llvm::Triple &Triple, const ArgList &Args, std::vector &Features, - bool ForAS) { + bool IsPIC, bool ForAS) { const Driver &D = TC.getDriver(); bool KernelOrKext = @@ -891,8 +891,7 @@ options::OPT_mno_long_calls)) { if (A->getOption().matches(options::OPT_mlong_calls)) Features.push_back("+long-calls"); - } else if (KernelOrKext && (!Triple.isiOS() || Triple.isOSVersionLT(6)) && - !Triple.isWatchOS()) { + } else if (KernelOrKext && !IsPIC) { Features.push_back("+long-calls"); } @@ -2291,7 +2290,7 @@ static void getTargetFeatures(const ToolChain &TC, const llvm::Triple &Triple, const ArgList &Args, ArgStringList &CmdArgs, - bool ForAS) { + bool IsPIC, bool ForAS) { const Driver &D = TC.getDriver(); std::vector Features; switch (Triple.getArch()) { @@ -2308,7 +2307,7 @@ case llvm::Triple::armeb: case llvm::Triple::thumb: case llvm::Triple::thumbeb: - getARMTargetFeatures(TC, Triple, Args, Features, ForAS); + getARMTargetFeatures(TC, Triple, Args, Features, IsPIC, ForAS); break; case llvm::Triple::ppc: @@ -4047,7 +4046,7 @@ } // Add the target features - getTargetFeatures(getToolChain(), Triple, Args, CmdArgs, false); + getTargetFeatures(getToolChain(), Triple, Args, CmdArgs, PICLevel > 0, false); // Add target specific flags. switch (getToolChain().getArch()) { @@ -6025,7 +6024,7 @@ } // Add the target features - getTargetFeatures(getToolChain(), Triple, Args, CmdArgs, true); + getTargetFeatures(getToolChain(), Triple, Args, CmdArgs, /*IsPIC*/ false, true); // Ignore explicit -force_cpusubtype_ALL option. (void)Args.hasArg(options::OPT_force__cpusubtype__ALL);