https://github.com/vitalybuka updated https://github.com/llvm/llvm-project/pull/135892
>From f6364f053b273dd48261cd0397e50d383d8b2029 Mon Sep 17 00:00:00 2001 From: Vitaly Buka <vitalyb...@google.com> Date: Tue, 15 Apr 2025 17:37:37 -0700 Subject: [PATCH] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20change?= =?UTF-8?q?s=20to=20main=20this=20commit=20is=20based=20on?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Created using spr 1.3.4 [skip ci] --- clang/include/clang/Driver/SanitizerArgs.h | 4 ++-- clang/lib/Driver/SanitizerArgs.cpp | 13 +++++++------ clang/lib/Driver/ToolChains/CommonArgs.cpp | 6 +++--- clang/test/Driver/sanitizer-ld.c | 17 +++++++++++------ 4 files changed, 23 insertions(+), 17 deletions(-) diff --git a/clang/include/clang/Driver/SanitizerArgs.h b/clang/include/clang/Driver/SanitizerArgs.h index 6a866ded0e75c..528e3b400f3dc 100644 --- a/clang/include/clang/Driver/SanitizerArgs.h +++ b/clang/include/clang/Driver/SanitizerArgs.h @@ -105,8 +105,8 @@ class SanitizerArgs { bool requiresMinimalRuntime() const { return MinimalRuntime; } bool needsDfsanRt() const { return Sanitizers.has(SanitizerKind::DataFlow); } bool needsSafeStackRt() const { return SafeStackRuntime; } - bool needsCfiRt() const; - bool needsCfiDiagRt() const; + bool needsCfiCrossDsoRt() const; + bool needsCfiCrossDsoDiagRt() const; bool needsStatsRt() const { return Stats; } bool needsScudoRt() const { return Sanitizers.has(SanitizerKind::Scudo); } bool needsNsanRt() const { diff --git a/clang/lib/Driver/SanitizerArgs.cpp b/clang/lib/Driver/SanitizerArgs.cpp index 3c7cd562a14e3..ee151d5c68b85 100644 --- a/clang/lib/Driver/SanitizerArgs.cpp +++ b/clang/lib/Driver/SanitizerArgs.cpp @@ -354,8 +354,8 @@ bool SanitizerArgs::needsFuzzerInterceptors() const { bool SanitizerArgs::needsUbsanRt() const { // All of these include ubsan. if (needsAsanRt() || needsMsanRt() || needsNsanRt() || needsHwasanRt() || - needsTsanRt() || needsDfsanRt() || needsLsanRt() || needsCfiDiagRt() || - (needsScudoRt() && !requiresMinimalRuntime())) + needsTsanRt() || needsDfsanRt() || needsLsanRt() || + needsCfiCrossDsoDiagRt() || (needsScudoRt() && !requiresMinimalRuntime())) return false; return (Sanitizers.Mask & NeedsUbsanRt & ~TrapSanitizers.Mask) || @@ -370,12 +370,13 @@ bool SanitizerArgs::needsUbsanCXXRt() const { ~TrapSanitizers.Mask); } -bool SanitizerArgs::needsCfiRt() const { - return !(Sanitizers.Mask & SanitizerKind::CFI & ~TrapSanitizers.Mask) && - CfiCrossDso && !ImplicitCfiRuntime; +bool SanitizerArgs::needsCfiCrossDsoRt() const { + // Diag runtime includes cross dso runtime. + return !needsCfiCrossDsoDiagRt() && CfiCrossDso && !ImplicitCfiRuntime; } -bool SanitizerArgs::needsCfiDiagRt() const { +bool SanitizerArgs::needsCfiCrossDsoDiagRt() const { + // UBSsan handles CFI diagnostics without cross-DSO suppport. return (Sanitizers.Mask & SanitizerKind::CFI & ~TrapSanitizers.Mask) && CfiCrossDso && !ImplicitCfiRuntime; } diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp index ddeadff8f6dfb..7aab849abe0c1 100644 --- a/clang/lib/Driver/ToolChains/CommonArgs.cpp +++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp @@ -1550,14 +1550,14 @@ collectSanitizerRuntimes(const ToolChain &TC, const ArgList &Args, RequiredSymbols.push_back("__safestack_init"); } if (!(SanArgs.needsSharedRt() && SanArgs.needsUbsanRt())) { - if (SanArgs.needsCfiRt()) + if (SanArgs.needsCfiCrossDsoRt()) StaticRuntimes.push_back("cfi"); - if (SanArgs.needsCfiDiagRt()) + if (SanArgs.needsCfiCrossDsoDiagRt()) StaticRuntimes.push_back("cfi_diag"); } if (SanArgs.linkCXXRuntimes() && !SanArgs.requiresMinimalRuntime() && ((!SanArgs.needsSharedRt() && SanArgs.needsUbsanCXXRt()) || - SanArgs.needsCfiDiagRt())) { + SanArgs.needsCfiCrossDsoDiagRt())) { StaticRuntimes.push_back("ubsan_standalone_cxx"); } if (SanArgs.needsStatsRt()) { diff --git a/clang/test/Driver/sanitizer-ld.c b/clang/test/Driver/sanitizer-ld.c index f9c3506e43208..52c1f6bf96242 100644 --- a/clang/test/Driver/sanitizer-ld.c +++ b/clang/test/Driver/sanitizer-ld.c @@ -830,58 +830,63 @@ // CHECK-NSAN-UBSAN: "--whole-archive" "{{[^"]*}}libclang_rt.nsan.a" "--no-whole-archive" // CFI by itself does not link runtime libraries. -// RUN: not %clang -fsanitize=cfi -### %s 2>&1 \ +// RUN: not %clang -fsanitize=cfi \ // RUN: --target=x86_64-unknown-linux -fuse-ld=ld -rtlib=platform \ // RUN: -resource-dir=%S/Inputs/resource_dir \ // RUN: --sysroot=%S/Inputs/basic_linux_tree \ +// RUN: -### %s 2>&1 \ // RUN: | %{filecheck} --check-prefix=CHECK-CFI-LINUX // CHECK-CFI-LINUX: "{{.*}}ld{{(.exe)?}}" // CFI with diagnostics links the UBSan runtime. // RUN: not %clang -fsanitize=cfi -fno-sanitize-trap=cfi -fsanitize-recover=cfi \ -// RUN: -### %s 2>&1\ // RUN: --target=x86_64-unknown-linux -fuse-ld=ld \ // RUN: -resource-dir=%S/Inputs/resource_dir \ // RUN: --sysroot=%S/Inputs/basic_linux_tree \ +// RUN: -### %s 2>&1 \ // RUN: | %{filecheck} --check-prefix=CHECK-CFI-DIAG-LINUX // CHECK-CFI-DIAG-LINUX: "{{.*}}ld{{(.exe)?}}" // CHECK-CFI-DIAG-LINUX: "--whole-archive" "{{[^"]*}}libclang_rt.ubsan_standalone.a" "--no-whole-archive" // Cross-DSO CFI links the CFI runtime. -// RUN: not %clang -fsanitize=cfi -fsanitize-cfi-cross-dso -### %s 2>&1 \ +// RUN: not %clang -fsanitize=cfi -fsanitize-cfi-cross-dso \ // RUN: --target=x86_64-unknown-linux -fuse-ld=ld \ // RUN: -resource-dir=%S/Inputs/resource_dir \ // RUN: --sysroot=%S/Inputs/basic_linux_tree \ +// RUN: -### %s 2>&1 \ // RUN: | %{filecheck} --check-prefix=CHECK-CFI-CROSS-DSO-LINUX // CHECK-CFI-CROSS-DSO-LINUX: "{{.*}}ld{{(.exe)?}}" // CHECK-CFI-CROSS-DSO-LINUX: "--whole-archive" "{{[^"]*}}libclang_rt.cfi.a" "--no-whole-archive" // CHECK-CFI-CROSS-DSO-LINUX: -export-dynamic // Cross-DSO CFI with diagnostics links just the CFI runtime. -// RUN: not %clang -fsanitize=cfi -fsanitize-cfi-cross-dso -### %s 2>&1 \ +// RUN: not %clang -fsanitize=cfi -fsanitize-cfi-cross-dso \ // RUN: -fno-sanitize-trap=cfi -fsanitize-recover=cfi \ // RUN: --target=x86_64-unknown-linux -fuse-ld=ld \ // RUN: -resource-dir=%S/Inputs/resource_dir \ // RUN: --sysroot=%S/Inputs/basic_linux_tree \ +// RUN: -### %s 2>&1 \ // RUN: | %{filecheck} --check-prefix=CHECK-CFI-CROSS-DSO-DIAG-LINUX // CHECK-CFI-CROSS-DSO-DIAG-LINUX: "{{.*}}ld{{(.exe)?}}" // CHECK-CFI-CROSS-DSO-DIAG-LINUX: "--whole-archive" "{{[^"]*}}libclang_rt.cfi_diag.a" "--no-whole-archive" // CHECK-CFI-CROSS-DSO-DIAG-LINUX: -export-dynamic // Cross-DSO CFI on Android does not link runtime libraries. -// RUN: not %clang -fsanitize=cfi -fsanitize-cfi-cross-dso -### %s 2>&1 \ +// RUN: not %clang -fsanitize=cfi -fsanitize-cfi-cross-dso \ // RUN: --target=aarch64-linux-android -fuse-ld=ld \ // RUN: -resource-dir=%S/Inputs/resource_dir \ // RUN: --sysroot=%S/Inputs/basic_android_tree \ +// RUN: -### %s 2>&1 \ // RUN: | %{filecheck} --check-prefix=CHECK-CFI-CROSS-DSO-ANDROID // CHECK-CFI-CROSS-DSO-ANDROID: "{{.*}}ld{{(.exe)?}}" // Cross-DSO CFI with diagnostics on Android links just the UBSAN runtime. -// RUN: not %clang -fsanitize=cfi -fsanitize-cfi-cross-dso -### %s 2>&1 \ +// RUN: not %clang -fsanitize=cfi -fsanitize-cfi-cross-dso \ // RUN: -fno-sanitize-trap=cfi -fsanitize-recover=cfi \ // RUN: --target=aarch64-linux-android -fuse-ld=ld \ // RUN: -resource-dir=%S/Inputs/resource_dir \ // RUN: --sysroot=%S/Inputs/basic_android_tree \ +// RUN: -### %s 2>&1 \ // RUN: | %{filecheck} --check-prefix=CHECK-CFI-CROSS-DSO-DIAG-ANDROID // CHECK-CFI-CROSS-DSO-DIAG-ANDROID: "{{.*}}ld{{(.exe)?}}" // CHECK-CFI-CROSS-DSO-DIAG-ANDROID: "{{[^"]*}}libclang_rt.ubsan_standalone.so" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits