Skip to content

Commit 53b5cfb

Browse files
committedDec 18, 2018
[Driver][PS4] Do not implicitly link against asan or ubsan if -nostdlib or -nodefaultlibs on PS4.
NFC for targets other than PS4. Respect -nostdlib and -nodefaultlibs when enabling asan or ubsan. Differential Revision: https://reviews.llvm.org/D55712 llvm-svn: 349508
1 parent 2a4eea3 commit 53b5cfb

File tree

4 files changed

+17
-3
lines changed

4 files changed

+17
-3
lines changed
 

‎clang/lib/Driver/ToolChains/Clang.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -4097,7 +4097,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
40974097
ABICompatArg->render(Args, CmdArgs);
40984098

40994099
// Add runtime flag for PS4 when PGO, coverage, or sanitizers are enabled.
4100-
if (RawTriple.isPS4CPU()) {
4100+
if (RawTriple.isPS4CPU() &&
4101+
!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) {
41014102
PS4cpu::addProfileRTArgs(TC, Args, CmdArgs);
41024103
PS4cpu::addSanitizerArgs(TC, CmdArgs);
41034104
}

‎clang/lib/Driver/ToolChains/PS4CPU.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,8 @@ static void ConstructPS4LinkJob(const Tool &T, Compilation &C,
121121
assert(Output.isNothing() && "Invalid output.");
122122
}
123123

124-
AddPS4SanitizerArgs(ToolChain, CmdArgs);
124+
if(!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs))
125+
AddPS4SanitizerArgs(ToolChain, CmdArgs);
125126

126127
Args.AddAllArgs(CmdArgs, options::OPT_L);
127128
Args.AddAllArgs(CmdArgs, options::OPT_T_Group);
@@ -190,7 +191,8 @@ static void ConstructGoldLinkJob(const Tool &T, Compilation &C,
190191
assert(Output.isNothing() && "Invalid output.");
191192
}
192193

193-
AddPS4SanitizerArgs(ToolChain, CmdArgs);
194+
if(!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs))
195+
AddPS4SanitizerArgs(ToolChain, CmdArgs);
194196

195197
if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles)) {
196198
const char *crt1 = nullptr;

‎clang/test/Driver/fsanitize.c

+4
Original file line numberDiff line numberDiff line change
@@ -753,6 +753,10 @@
753753
// CHECK-ASAN-PS4: --dependent-lib=libSceDbgAddressSanitizer_stub_weak.a
754754
// CHECK-ASAN-PS4-NOT: {{(\.(o|bc)"? |-l).*-lSceDbgAddressSanitizer_stub_weak}}
755755
// CHECK-ASAN-PS4: -lSceDbgAddressSanitizer_stub_weak
756+
// RUN: %clang -target x86_64-scei-ps4 -fsanitize=address -nostdlib %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-ASAN-NOLIB-PS4
757+
// RUN: %clang -target x86_64-scei-ps4 -fsanitize=address -nodefaultlibs %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-ASAN-NOLIB-PS4
758+
// RUN: %clang -target x86_64-scei-ps4 -fsanitize=address -nodefaultlibs -nostdlib %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-ASAN-NOLIB-PS4
759+
// CHECK-ASAN-NOLIB-PS4-NOT: SceDbgAddressSanitizer_stub_weak
756760

757761
// RUN: %clang -target x86_64-linux-gnu -fsanitize=address -fsanitize-minimal-runtime %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-ASAN-MINIMAL
758762
// CHECK-ASAN-MINIMAL: error: invalid argument '-fsanitize-minimal-runtime' not allowed with '-fsanitize=address'

‎clang/test/Driver/sanitizer-ld.c

+7
Original file line numberDiff line numberDiff line change
@@ -673,6 +673,13 @@
673673
// CHECK-AUBSAN-PS4: "{{.*}}ld{{(.gold)?(.exe)?}}"
674674
// CHECK-AUBSAN-PS4: -lSceDbgAddressSanitizer_stub_weak
675675

676+
// RUN: %clang -fsanitize=address,undefined %s -### -o %t.o 2>&1 \
677+
// RUN: -target x86_64-scei-ps4 -fuse-ld=ld \
678+
// RUN: -shared \
679+
// RUN: -nostdlib \
680+
// RUN: | FileCheck --check-prefix=CHECK-NOLIB-PS4 %s
681+
// CHECK-NOLIB-PS4-NOT: SceDbgAddressSanitizer_stub_weak
682+
676683
// RUN: %clang -fsanitize=efficiency-cache-frag %s -### -o %t.o 2>&1 \
677684
// RUN: -target x86_64-unknown-linux -fuse-ld=ld \
678685
// RUN: | FileCheck --check-prefix=CHECK-ESAN-LINUX %s

0 commit comments

Comments
 (0)
Please sign in to comment.