Skip to content

Commit 3972f9e

Browse files
committed
Myriad: nominally "support" ASAN.
Doesn't work, but needs to be enabled in order to get there. llvm-svn: 281071
1 parent 72c5b64 commit 3972f9e

File tree

4 files changed

+25
-4
lines changed

4 files changed

+25
-4
lines changed

clang/lib/Driver/ToolChains.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5042,6 +5042,10 @@ Tool *MyriadToolChain::buildLinker() const {
50425042
return new tools::Myriad::Linker(*this);
50435043
}
50445044

5045+
SanitizerMask MyriadToolChain::getSupportedSanitizers() const {
5046+
return SanitizerKind::Address;
5047+
}
5048+
50455049
WebAssembly::WebAssembly(const Driver &D, const llvm::Triple &Triple,
50465050
const llvm::opt::ArgList &Args)
50475051
: ToolChain(D, Triple, Args) {

clang/lib/Driver/ToolChains.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1147,6 +1147,7 @@ class LLVM_LIBRARY_VISIBILITY MyriadToolChain : public Generic_ELF {
11471147
llvm::opt::ArgStringList &CC1Args) const override;
11481148
Tool *SelectTool(const JobAction &JA) const override;
11491149
unsigned GetDefaultDwarfVersion() const override { return 2; }
1150+
SanitizerMask getSupportedSanitizers() const override;
11501151

11511152
protected:
11521153
Tool *buildLinker() const override;

clang/lib/Driver/Tools.cpp

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3081,11 +3081,15 @@ static void linkSanitizerRuntimeDeps(const ToolChain &TC,
30813081
// Force linking against the system libraries sanitizers depends on
30823082
// (see PR15823 why this is necessary).
30833083
CmdArgs.push_back("--no-as-needed");
3084-
CmdArgs.push_back("-lpthread");
3085-
CmdArgs.push_back("-lrt");
3084+
// There's no libpthread or librt on RTEMS.
3085+
if (TC.getTriple().getOS() != llvm::Triple::RTEMS) {
3086+
CmdArgs.push_back("-lpthread");
3087+
CmdArgs.push_back("-lrt");
3088+
}
30863089
CmdArgs.push_back("-lm");
3087-
// There's no libdl on FreeBSD.
3088-
if (TC.getTriple().getOS() != llvm::Triple::FreeBSD)
3090+
// There's no libdl on FreeBSD or RTEMS.
3091+
if (TC.getTriple().getOS() != llvm::Triple::FreeBSD &&
3092+
TC.getTriple().getOS() != llvm::Triple::RTEMS)
30893093
CmdArgs.push_back("-ldl");
30903094
}
30913095

@@ -11055,9 +11059,12 @@ void tools::Myriad::Linker::ConstructJob(Compilation &C, const JobAction &JA,
1105511059

1105611060
TC.AddFilePathLibArgs(Args, CmdArgs);
1105711061

11062+
bool NeedsSanitizerDeps = addSanitizerRuntimes(TC, Args, CmdArgs);
1105811063
AddLinkerInputs(getToolChain(), Inputs, Args, CmdArgs);
1105911064

1106011065
if (UseDefaultLibs) {
11066+
if (NeedsSanitizerDeps)
11067+
linkSanitizerRuntimeDeps(TC, CmdArgs);
1106111068
if (C.getDriver().CCCIsCXX())
1106211069
CmdArgs.push_back("-lstdc++");
1106311070
if (T.getOS() == llvm::Triple::RTEMS) {

clang/test/Driver/sanitizer-ld.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,15 @@
151151
// CHECK-ASAN-ANDROID-SHARED: libclang_rt.asan-arm-android.so"
152152
// CHECK-ASAN-ANDROID-SHARED-NOT: "-lpthread"
153153

154+
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
155+
// RUN: -target sparcel-myriad-rtems-elf -fsanitize=address \
156+
// RUN: --sysroot=%S/Inputs/basic_myriad_tree \
157+
// RUN: | FileCheck --check-prefix=CHECK-ASAN-MYRIAD %s
158+
//
159+
// CHECK-ASAN-MYRIAD: "{{(.*[^.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
160+
// CHECK-ASAN-MYRIAD-NOT: "-lc"
161+
// CHECK-ASAN-MYRIAD: libclang_rt.asan-sparcel.a"
162+
154163
// RUN: %clangxx -no-canonical-prefixes %s -### -o %t.o 2>&1 \
155164
// RUN: -target x86_64-unknown-linux -stdlib=platform -lstdc++ \
156165
// RUN: -fsanitize=thread \

0 commit comments

Comments
 (0)