[clang] 910f7f4 - [Driver] Haiku address sanitizer support (#132335)
via cfe-commits
cfe-commits at lists.llvm.org
Thu Mar 20 23:13:37 PDT 2025
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.duval at 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; }
More information about the cfe-commits
mailing list