Index: lib/Driver/Tools.cpp =================================================================== --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -2479,12 +2479,18 @@ static void linkSanitizerRuntimeDeps(const ToolChain &TC, ArgStringList &CmdArgs) { + bool isAndroid = TC.getTriple().getEnvironment() == llvm::Triple::Android; // Force linking against the system libraries sanitizers depends on // (see PR15823 why this is necessary). CmdArgs.push_back("--no-as-needed"); - CmdArgs.push_back("-lpthread"); - CmdArgs.push_back("-lrt"); - CmdArgs.push_back("-lutil"); + if (!isAndroid) { + // android does not need explicit links against pthread nor + // librt. (i.e. they don't exist!) + CmdArgs.push_back("-lpthread"); + CmdArgs.push_back("-lrt"); + CmdArgs.push_back("-lutil"); + } + CmdArgs.push_back("-lm"); // There's no libdl on FreeBSD. if (TC.getTriple().getOS() != llvm::Triple::FreeBSD) @@ -2504,8 +2510,10 @@ // Collect static runtimes. if (Args.hasArg(options::OPT_shared) || - (TC.getTriple().getEnvironment() == llvm::Triple::Android)) { + (TC.getTriple().getEnvironment() == llvm::Triple::Android && + TC.getTriple().getArch() != llvm::Triple::aarch64)) { // Don't link static runtimes into DSOs or if compiling for Android. + // put in an exception for aarch64 return; } if (SanArgs.needsAsanRt()) {