Skip to content

Commit 25dcc20

Browse files
authored
[SYCL][Driver] Link Asan device lib when enabling Asan via Xarch_device (#12617)
User can enable Asan for SYCL device code via -Xarch_device, we need to link Asan device library with user's device image in such case. --------- Signed-off-by: jinge90 <[email protected]>
1 parent 93040d0 commit 25dcc20

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

clang/lib/Driver/ToolChains/SYCL.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,18 @@ SYCL::getDeviceLibraries(const Compilation &C, const llvm::Triple &TargetTriple,
325325
IsDeviceAsanEnabled = (std::count(SyclFEArgEq.begin(), SyclFEArgEq.end(),
326326
"-fsanitize=address") > 0);
327327
}
328+
329+
// User can also enable asan for SYCL device via -Xarch_device option.
330+
if (!IsDeviceAsanEnabled) {
331+
auto DeviceArchVals = Args.getAllArgValues(options::OPT_Xarch_device);
332+
for (auto DArchVal : DeviceArchVals) {
333+
if (DArchVal.find("-fsanitize=address") != std::string::npos) {
334+
IsDeviceAsanEnabled = true;
335+
break;
336+
}
337+
}
338+
}
339+
328340
if (IsDeviceAsanEnabled)
329341
addLibraries(SYCLDeviceSanitizerLibs);
330342
}

clang/test/Driver/sycl-device-lib.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,12 @@
220220
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_LIB_SANITIZER
221221
// RUN: %clangxx -fsycl %s --sysroot=%S/Inputs/SYCL -Xsycl-target-frontend=spir64 -fsanitize=address -### 2>&1 \
222222
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_LIB_SANITIZER
223+
// RUN: %clangxx -fsycl %s --sysroot=%S/Inputs/SYCL -Xarch_device -fsanitize=address -### 2>&1 \
224+
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_LIB_SANITIZER
225+
// RUN: %clangxx -fsycl %s --sysroot=%S/Inputs/SYCL -Xarch_device "-fsanitize=address -DUSE_SYCL_DEVICE_ASAN" -### 2>&1 \
226+
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_LIB_SANITIZER
227+
// RUN: %clangxx -fsycl %s --sysroot=%S/Inputs/SYCL -Xarch_device "-fsanitize=address -DUSE_SYCL_DEVICE_ASAN" -### 2>&1 \
228+
// RUN: | FileCheck %s -check-prefix=SYCL_DEVICE_ASAN_MACRO
223229
// SYCL_DEVICE_LIB_SANITIZER: clang-offload-bundler{{.*}} "-type=o" "-targets=sycl-spir64-unknown-unknown" "-input={{.*}}libsycl-crt.o" "-output={{.*}}libsycl-crt-{{.*}}.o" "-unbundle"
224230
// SYCL_DEVICE_LIB_SANITIZER-NEXT: clang-offload-bundler{{.*}} "-type=o" "-targets=sycl-spir64-unknown-unknown" "-input={{.*}}libsycl-complex.o" "-output={{.*}}libsycl-complex-{{.*}}.o" "-unbundle"
225231
// SYCL_DEVICE_LIB_SANITIZER-NEXT: clang-offload-bundler{{.*}} "-type=o" "-targets=sycl-spir64-unknown-unknown" "-input={{.*}}libsycl-complex-fp64.o" "-output={{.*}}libsycl-complex-fp64-{{.*}}.o" "-unbundle"
@@ -241,3 +247,7 @@
241247
// SYCL_DEVICE_LIB_SANITIZER-NEXT: clang-offload-bundler{{.*}} "-type=o" "-targets=sycl-spir64-unknown-unknown" "-input={{.*}}libsycl-itt-compiler-wrappers.o" "-output={{.*}}libsycl-itt-compiler-wrappers-{{.*}}.o" "-unbundle"
242248
// SYCL_DEVICE_LIB_SANITIZER-NEXT: clang-offload-bundler{{.*}} "-type=o" "-targets=sycl-spir64-unknown-unknown" "-input={{.*}}libsycl-itt-stubs.o" "-output={{.*}}libsycl-itt-stubs-{{.*}}.o" "-unbundle"
243249
// SYCL_DEVICE_LIB_SANITIZER-NEXT: clang-offload-bundler{{.*}} "-type=o" "-targets=sycl-spir64-unknown-unknown" "-input={{.*}}libsycl-sanitizer.o" "-output={{.*}}libsycl-sanitizer-{{.*}}.o" "-unbundle"
250+
// SYCL_DEVICE_ASAN_MACRO: "-cc1"
251+
// SYCL_DEVICE_ASAN_MACRO-SAME: "USE_SYCL_DEVICE_ASAN"
252+
// SYCL_DEVICE_ASAN_MACRO-NEXT: llvm-link{{.*}}
253+
// SYCL_DEVICE_ASAN_MACRO: clang-offload-bundler{{.*}} "-type=o" "-targets=sycl-spir64-unknown-unknown" "-input={{.*}}libsycl-sanitizer.o" "-output={{.*}}libsycl-sanitizer-{{.*}}.o" "-unbundle"

0 commit comments

Comments
 (0)