https://github.com/androm3da created https://github.com/llvm/llvm-project/pull/208833
musl hexagon targets already select msan/asan library variants based on the sanitizer in use; do the same for shadow-call-stack so that -fsanitize=shadow-call-stack picks up usr/lib/scs. >From 4e57219ce1bca00a315156f44f13a96178552485 Mon Sep 17 00:00:00 2001 From: Brian Cain <[email protected]> Date: Fri, 10 Jul 2026 13:37:07 -0700 Subject: [PATCH] [Hexagon] Add scs multilib for -fsanitize=shadow-call-stack musl hexagon targets already select msan/asan library variants based on the sanitizer in use; do the same for shadow-call-stack so that -fsanitize=shadow-call-stack picks up usr/lib/scs. --- clang/lib/Driver/ToolChains/Hexagon.cpp | 5 +++++ clang/test/Driver/hexagon-toolchain-linux.c | 24 ++++++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/ToolChains/Hexagon.cpp b/clang/lib/Driver/ToolChains/Hexagon.cpp index 4dd519a2c239b..6ac6c20ae7224 100644 --- a/clang/lib/Driver/ToolChains/Hexagon.cpp +++ b/clang/lib/Driver/ToolChains/Hexagon.cpp @@ -743,12 +743,17 @@ HexagonToolChain::HexagonToolChain(const Driver &D, const llvm::Triple &Triple, Multilibs.push_back(MultilibBuilder("asan", {}, {}) .flag("-fsanitize=address") .makeMultilib()); + Multilibs.push_back(MultilibBuilder("scs", {}, {}) + .flag("-fsanitize=shadow-call-stack") + .makeMultilib()); Multilib::flags_list Flags; addMultilibFlag(getSanitizerArgs(Args).needsMsanRt(), "-fsanitize=memory", Flags); addMultilibFlag(getSanitizerArgs(Args).needsAsanRt(), "-fsanitize=address", Flags); + addMultilibFlag(getSanitizerArgs(Args).hasShadowCallStack(), + "-fsanitize=shadow-call-stack", Flags); if (Multilibs.select(D, Flags, SelectedMultilibs)) { Multilib LastSelected = SelectedMultilibs.back(); diff --git a/clang/test/Driver/hexagon-toolchain-linux.c b/clang/test/Driver/hexagon-toolchain-linux.c index 3f19a37d8a38b..669e2b504d282 100644 --- a/clang/test/Driver/hexagon-toolchain-linux.c +++ b/clang/test/Driver/hexagon-toolchain-linux.c @@ -223,7 +223,28 @@ // CHECK-ASAN: "-L{{[^"]*}}basic_linux_libcxx_tree{{/|\\\\}}usr{{/|\\\\}}lib{{/|\\\\}}asan" // CHECK-ASAN-SAME: "-L{{[^"]*}}basic_linux_libcxx_tree{{/|\\\\}}usr{{/|\\\\}}lib" // ----------------------------------------------------------------------------- -// No sanitizer: no msan/asan library paths +// Sanitizer library paths: -fsanitize=shadow-call-stack +// ----------------------------------------------------------------------------- +// RUN: %clang -### --target=hexagon-unknown-linux-musl \ +// RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \ +// RUN: -mcpu=hexagonv60 \ +// RUN: -fuse-ld=lld \ +// RUN: -fsanitize=shadow-call-stack -ffixed-r19 \ +// RUN: --sysroot=%S/Inputs/basic_linux_libcxx_tree %s 2>&1 | FileCheck -check-prefix=CHECK-SCS %s +// CHECK-SCS: "-L{{[^"]*}}basic_linux_libcxx_tree{{/|\\\\}}usr{{/|\\\\}}lib{{/|\\\\}}scs" +// CHECK-SCS-SAME: "-L{{[^"]*}}basic_linux_libcxx_tree{{/|\\\\}}usr{{/|\\\\}}lib" +// ----------------------------------------------------------------------------- +// Library paths: -ffixed-r19 alone must NOT select the scs multilib +// ----------------------------------------------------------------------------- +// RUN: %clang -### --target=hexagon-unknown-linux-musl \ +// RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \ +// RUN: -mcpu=hexagonv60 \ +// RUN: -fuse-ld=lld \ +// RUN: -ffixed-r19 \ +// RUN: --sysroot=%S/Inputs/basic_linux_libcxx_tree %s 2>&1 | FileCheck -check-prefix=CHECK-R19-ONLY %s +// CHECK-R19-ONLY-NOT: "-L{{.*}}{{/|\\\\}}scs" +// ----------------------------------------------------------------------------- +// No sanitizer: no msan/asan/scs library paths // ----------------------------------------------------------------------------- // RUN: %clang -### --target=hexagon-unknown-linux-musl \ // RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \ @@ -232,6 +253,7 @@ // RUN: --sysroot=%S/Inputs/basic_linux_libcxx_tree %s 2>&1 | FileCheck -check-prefix=CHECK-NOSAN %s // CHECK-NOSAN-NOT: "-L{{.*}}{{/|\\\\}}msan" // CHECK-NOSAN-NOT: "-L{{.*}}{{/|\\\\}}asan" +// CHECK-NOSAN-NOT: "-L{{.*}}{{/|\\\\}}scs" // ----------------------------------------------------------------------------- // ThinLTO passes LTO options to the linker // ----------------------------------------------------------------------------- _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
