llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang-driver @llvm/pr-subscribers-clang Author: Vitaly Buka (vitalybuka) <details> <summary>Changes</summary> CFI runtime (diagnostics, or not) is only needed for cross-dso support. --- Full diff: https://github.com/llvm/llvm-project/pull/135885.diff 3 Files Affected: - (modified) clang/include/clang/Driver/SanitizerArgs.h (+2-2) - (modified) clang/lib/Driver/SanitizerArgs.cpp (+7-5) - (modified) clang/lib/Driver/ToolChains/CommonArgs.cpp (+3-3) ``````````diff 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 1db9da1b60939..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,11 +370,13 @@ bool SanitizerArgs::needsUbsanCXXRt() const { ~TrapSanitizers.Mask); } -bool SanitizerArgs::needsCfiRt() const { - return !needsCfiDiagRt() && 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()) { `````````` </details> https://github.com/llvm/llvm-project/pull/135885 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits