[clang] [Hexagon] Add scs multilib for -fsanitize=shadow-call-stack (PR #208833)
Brian Cain via cfe-commits
cfe-commits at lists.llvm.org
Fri Jul 10 13:49:33 PDT 2026
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 <brian.cain at oss.qualcomm.com>
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
// -----------------------------------------------------------------------------
More information about the cfe-commits
mailing list