Author: Brad Smith Date: 2025-03-21T02:13:33-04:00 New Revision: 910f7f45f27d1f3cfad779669d0e0f15ff5b9686
URL: https://github.com/llvm/llvm-project/commit/910f7f45f27d1f3cfad779669d0e0f15ff5b9686 DIFF: https://github.com/llvm/llvm-project/commit/910f7f45f27d1f3cfad779669d0e0f15ff5b9686.diff LOG: [Driver] Haiku address sanitizer support (#132335) Co-authored-by: Jérôme Duval <jerome.du...@gmail.com> Added: Modified: clang/lib/Driver/ToolChains/CommonArgs.cpp clang/lib/Driver/ToolChains/Haiku.cpp clang/lib/Driver/ToolChains/Haiku.h Removed: ################################################################################ diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp index bb553806d2eef..d8c72b98ada25 100644 --- a/clang/lib/Driver/ToolChains/CommonArgs.cpp +++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp @@ -1446,19 +1446,22 @@ void tools::linkSanitizerRuntimeDeps(const ToolChain &TC, if (TC.getTriple().getOS() != llvm::Triple::RTEMS && !TC.getTriple().isAndroid() && !TC.getTriple().isOHOSFamily()) { CmdArgs.push_back("-lpthread"); - if (!TC.getTriple().isOSOpenBSD()) + if (!TC.getTriple().isOSOpenBSD() && !TC.getTriple().isOSHaiku()) CmdArgs.push_back("-lrt"); } CmdArgs.push_back("-lm"); // There's no libdl on all OSes. if (!TC.getTriple().isOSFreeBSD() && !TC.getTriple().isOSNetBSD() && !TC.getTriple().isOSOpenBSD() && !TC.getTriple().isOSDragonFly() && + !TC.getTriple().isOSHaiku() && TC.getTriple().getOS() != llvm::Triple::RTEMS) CmdArgs.push_back("-ldl"); // Required for backtrace on some OSes if (TC.getTriple().isOSFreeBSD() || TC.getTriple().isOSNetBSD() || TC.getTriple().isOSOpenBSD() || TC.getTriple().isOSDragonFly()) CmdArgs.push_back("-lexecinfo"); + if (TC.getTriple().isOSHaiku()) + CmdArgs.push_back("-lbsd"); // There is no libresolv on Android, FreeBSD, OpenBSD, etc. On musl // libresolv.a, even if exists, is an empty archive to satisfy POSIX -lresolv // requirement. diff --git a/clang/lib/Driver/ToolChains/Haiku.cpp b/clang/lib/Driver/ToolChains/Haiku.cpp index af74f43e48364..17fb724b6a7cc 100644 --- a/clang/lib/Driver/ToolChains/Haiku.cpp +++ b/clang/lib/Driver/ToolChains/Haiku.cpp @@ -10,6 +10,7 @@ #include "CommonArgs.h" #include "clang/Config/config.h" #include "clang/Driver/Compilation.h" +#include "clang/Driver/SanitizerArgs.h" #include "llvm/Support/Path.h" using namespace clang::driver; @@ -100,6 +101,7 @@ void haiku::Linker::ConstructJob(Compilation &C, const JobAction &JA, D.getLTOMode() == LTOK_Thin); } + bool NeedsSanitizerDeps = addSanitizerRuntimes(ToolChain, Args, CmdArgs); addLinkerCompressDebugSectionsOption(ToolChain, Args, CmdArgs); AddLinkerInputs(ToolChain, Inputs, Args, CmdArgs, JA); @@ -125,6 +127,9 @@ void haiku::Linker::ConstructJob(Compilation &C, const JobAction &JA, addFortranRuntimeLibs(ToolChain, Args, CmdArgs); } + if (NeedsSanitizerDeps) + linkSanitizerRuntimeDeps(ToolChain, Args, CmdArgs); + CmdArgs.push_back("-lgcc"); CmdArgs.push_back("--push-state"); @@ -281,3 +286,11 @@ void Haiku::addLibCxxIncludePaths(const llvm::opt::ArgList &DriverArgs, Tool *Haiku::buildLinker() const { return new tools::haiku::Linker(*this); } bool Haiku::HasNativeLLVMSupport() const { return true; } + +SanitizerMask Haiku::getSupportedSanitizers() const { + SanitizerMask Res = ToolChain::getSupportedSanitizers(); + + Res |= SanitizerKind::Address; + + return Res; +} diff --git a/clang/lib/Driver/ToolChains/Haiku.h b/clang/lib/Driver/ToolChains/Haiku.h index a34f76e22284c..edebf5c49187b 100644 --- a/clang/lib/Driver/ToolChains/Haiku.h +++ b/clang/lib/Driver/ToolChains/Haiku.h @@ -56,6 +56,7 @@ class LLVM_LIBRARY_VISIBILITY Haiku : public Generic_ELF { const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const override; + SanitizerMask getSupportedSanitizers() const override; unsigned GetDefaultDwarfVersion() const override { return 4; } bool GetDefaultStandaloneDebug() const override { return true; } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits