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

Reply via email to