Skip to content

Commit 910f7f4

Browse files
brad0korli
andauthored
[Driver] Haiku address sanitizer support (llvm#132335)
Co-authored-by: Jérôme Duval <[email protected]>
1 parent f5f6af8 commit 910f7f4

File tree

3 files changed

+18
-1
lines changed

3 files changed

+18
-1
lines changed

clang/lib/Driver/ToolChains/CommonArgs.cpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -1446,19 +1446,22 @@ void tools::linkSanitizerRuntimeDeps(const ToolChain &TC,
14461446
if (TC.getTriple().getOS() != llvm::Triple::RTEMS &&
14471447
!TC.getTriple().isAndroid() && !TC.getTriple().isOHOSFamily()) {
14481448
CmdArgs.push_back("-lpthread");
1449-
if (!TC.getTriple().isOSOpenBSD())
1449+
if (!TC.getTriple().isOSOpenBSD() && !TC.getTriple().isOSHaiku())
14501450
CmdArgs.push_back("-lrt");
14511451
}
14521452
CmdArgs.push_back("-lm");
14531453
// There's no libdl on all OSes.
14541454
if (!TC.getTriple().isOSFreeBSD() && !TC.getTriple().isOSNetBSD() &&
14551455
!TC.getTriple().isOSOpenBSD() && !TC.getTriple().isOSDragonFly() &&
1456+
!TC.getTriple().isOSHaiku() &&
14561457
TC.getTriple().getOS() != llvm::Triple::RTEMS)
14571458
CmdArgs.push_back("-ldl");
14581459
// Required for backtrace on some OSes
14591460
if (TC.getTriple().isOSFreeBSD() || TC.getTriple().isOSNetBSD() ||
14601461
TC.getTriple().isOSOpenBSD() || TC.getTriple().isOSDragonFly())
14611462
CmdArgs.push_back("-lexecinfo");
1463+
if (TC.getTriple().isOSHaiku())
1464+
CmdArgs.push_back("-lbsd");
14621465
// There is no libresolv on Android, FreeBSD, OpenBSD, etc. On musl
14631466
// libresolv.a, even if exists, is an empty archive to satisfy POSIX -lresolv
14641467
// requirement.

clang/lib/Driver/ToolChains/Haiku.cpp

+13
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include "CommonArgs.h"
1111
#include "clang/Config/config.h"
1212
#include "clang/Driver/Compilation.h"
13+
#include "clang/Driver/SanitizerArgs.h"
1314
#include "llvm/Support/Path.h"
1415

1516
using namespace clang::driver;
@@ -100,6 +101,7 @@ void haiku::Linker::ConstructJob(Compilation &C, const JobAction &JA,
100101
D.getLTOMode() == LTOK_Thin);
101102
}
102103

104+
bool NeedsSanitizerDeps = addSanitizerRuntimes(ToolChain, Args, CmdArgs);
103105
addLinkerCompressDebugSectionsOption(ToolChain, Args, CmdArgs);
104106
AddLinkerInputs(ToolChain, Inputs, Args, CmdArgs, JA);
105107

@@ -125,6 +127,9 @@ void haiku::Linker::ConstructJob(Compilation &C, const JobAction &JA,
125127
addFortranRuntimeLibs(ToolChain, Args, CmdArgs);
126128
}
127129

130+
if (NeedsSanitizerDeps)
131+
linkSanitizerRuntimeDeps(ToolChain, Args, CmdArgs);
132+
128133
CmdArgs.push_back("-lgcc");
129134

130135
CmdArgs.push_back("--push-state");
@@ -281,3 +286,11 @@ void Haiku::addLibCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,
281286
Tool *Haiku::buildLinker() const { return new tools::haiku::Linker(*this); }
282287

283288
bool Haiku::HasNativeLLVMSupport() const { return true; }
289+
290+
SanitizerMask Haiku::getSupportedSanitizers() const {
291+
SanitizerMask Res = ToolChain::getSupportedSanitizers();
292+
293+
Res |= SanitizerKind::Address;
294+
295+
return Res;
296+
}

clang/lib/Driver/ToolChains/Haiku.h

+1
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ class LLVM_LIBRARY_VISIBILITY Haiku : public Generic_ELF {
5656
const llvm::opt::ArgList &DriverArgs,
5757
llvm::opt::ArgStringList &CC1Args) const override;
5858

59+
SanitizerMask getSupportedSanitizers() const override;
5960
unsigned GetDefaultDwarfVersion() const override { return 4; }
6061

6162
bool GetDefaultStandaloneDebug() const override { return true; }

0 commit comments

Comments
 (0)