forked from OSchip/llvm-project
Enable LLVM asan support for NetBSD/amd64
Summary: Enable LLVM asan sanitizer for NetBSD/amd64. Don't generate -ldl for dlopen(3)-like functions on NetBSD. These features are available in libc on NetBSD. Sponsored by <The NetBSD Foundation> Reviewers: joerg, eugenis, kcc, dim Reviewed By: dim Subscribers: #clang, #sanitizers Tags: #clang, #sanitizers Differential Revision: https://reviews.llvm.org/D34960 llvm-svn: 307104
This commit is contained in:
parent
2f8be0552e
commit
2eef475ad3
|
@ -524,6 +524,7 @@ void tools::linkSanitizerRuntimeDeps(const ToolChain &TC,
|
|||
CmdArgs.push_back("-lm");
|
||||
// There's no libdl on FreeBSD or RTEMS.
|
||||
if (TC.getTriple().getOS() != llvm::Triple::FreeBSD &&
|
||||
TC.getTriple().getOS() != llvm::Triple::NetBSD &&
|
||||
TC.getTriple().getOS() != llvm::Triple::RTEMS)
|
||||
CmdArgs.push_back("-ldl");
|
||||
}
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include "clang/Driver/Compilation.h"
|
||||
#include "clang/Driver/Driver.h"
|
||||
#include "clang/Driver/Options.h"
|
||||
#include "clang/Driver/SanitizerArgs.h"
|
||||
#include "llvm/Option/ArgList.h"
|
||||
|
||||
using namespace clang::driver;
|
||||
|
@ -246,6 +247,7 @@ void netbsd::Linker::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
Args.AddAllArgs(CmdArgs, options::OPT_Z_Flag);
|
||||
Args.AddAllArgs(CmdArgs, options::OPT_r);
|
||||
|
||||
bool NeedsSanitizerDeps = addSanitizerRuntimes(getToolChain(), Args, CmdArgs);
|
||||
AddLinkerInputs(getToolChain(), Inputs, Args, CmdArgs, JA);
|
||||
|
||||
unsigned Major, Minor, Micro;
|
||||
|
@ -279,6 +281,8 @@ void netbsd::Linker::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
getToolChain().AddCXXStdlibLibArgs(Args, CmdArgs);
|
||||
CmdArgs.push_back("-lm");
|
||||
}
|
||||
if (NeedsSanitizerDeps)
|
||||
linkSanitizerRuntimeDeps(getToolChain(), CmdArgs);
|
||||
if (Args.hasArg(options::OPT_pthread))
|
||||
CmdArgs.push_back("-lpthread");
|
||||
CmdArgs.push_back("-lc");
|
||||
|
@ -410,3 +414,12 @@ void NetBSD::addLibStdCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,
|
|||
addLibStdCXXIncludePaths(getDriver().SysRoot, "/usr/include/g++", "", "", "",
|
||||
"", DriverArgs, CC1Args);
|
||||
}
|
||||
|
||||
SanitizerMask NetBSD::getSupportedSanitizers() const {
|
||||
const bool IsX86_64 = getTriple().getArch() == llvm::Triple::x86_64;
|
||||
SanitizerMask Res = ToolChain::getSupportedSanitizers();
|
||||
if (IsX86_64) {
|
||||
Res |= SanitizerKind::Address;
|
||||
}
|
||||
return Res;
|
||||
}
|
||||
|
|
|
@ -66,6 +66,7 @@ public:
|
|||
llvm::opt::ArgStringList &CC1Args) const override;
|
||||
|
||||
bool IsUnwindTablesDefault() const override { return true; }
|
||||
SanitizerMask getSupportedSanitizers() const override;
|
||||
|
||||
protected:
|
||||
Tool *buildAssembler() const override;
|
||||
|
|
Loading…
Reference in New Issue