Author: Brian Cain
Date: 2026-04-08T09:58:43-05:00
New Revision: b6b7f3167bc9def81803d4d4fbf2f03f598d59e4

URL: 
https://github.com/llvm/llvm-project/commit/b6b7f3167bc9def81803d4d4fbf2f03f598d59e4
DIFF: 
https://github.com/llvm/llvm-project/commit/b6b7f3167bc9def81803d4d4fbf2f03f598d59e4.diff

LOG: [Hexagon] Add sanitizer-aware library paths for Linux/musl targets 
(#190267)

When compiling with -fsanitize=memory or -fsanitize=address on
hexagon-unknown-linux-musl, the driver now prepends sanitizer-specific
library paths (e.g. $SYSROOT/usr/lib/msan/) before the normal
$SYSROOT/usr/lib/ so that instrumented libraries (libc, libc++, etc.)
are found first by the linker.

Added: 
    

Modified: 
    clang/lib/Driver/ToolChains/Hexagon.cpp
    clang/test/Driver/hexagon-toolchain-linux.c

Removed: 
    


################################################################################
diff  --git a/clang/lib/Driver/ToolChains/Hexagon.cpp 
b/clang/lib/Driver/ToolChains/Hexagon.cpp
index 9076b91a2fd2c..e5c90089f8cf0 100644
--- a/clang/lib/Driver/ToolChains/Hexagon.cpp
+++ b/clang/lib/Driver/ToolChains/Hexagon.cpp
@@ -11,6 +11,8 @@
 #include "clang/Driver/Compilation.h"
 #include "clang/Driver/Driver.h"
 #include "clang/Driver/InputInfo.h"
+#include "clang/Driver/MultilibBuilder.h"
+#include "clang/Driver/SanitizerArgs.h"
 #include "clang/Options/Options.h"
 #include "llvm/Option/ArgList.h"
 #include "llvm/Support/FileSystem.h"
@@ -344,6 +346,12 @@ constructHexagonLinkArgs(Compilation &C, const JobAction 
&JA,
              !Args.hasArg(options::OPT_nostartfiles, options::OPT_nostdlib))
       CmdArgs.push_back(Args.MakeArgString(D.SysRoot + "/usr/lib/crti.o"));
 
+    if (!HTC.getSelectedMultilibs().empty() &&
+        !HTC.getSelectedMultilibs().back().isDefault()) {
+      CmdArgs.push_back(
+          Args.MakeArgString(StringRef("-L") + D.SysRoot + "/usr/lib" +
+                             HTC.getSelectedMultilibs().back().gccSuffix()));
+    }
     CmdArgs.push_back(
         Args.MakeArgString(StringRef("-L") + D.SysRoot + "/usr/lib"));
     Args.addAllArgs(CmdArgs, {options::OPT_T_Group, options::OPT_s,
@@ -631,6 +639,34 @@ HexagonToolChain::HexagonToolChain(const Driver &D, const 
llvm::Triple &Triple,
   // support 'linux' we'll need to fix this up
   LibPaths.clear();
   getHexagonLibraryPaths(Args, LibPaths);
+
+  if (getTriple().isMusl()) {
+    Multilibs.push_back(Multilib());
+    Multilibs.push_back(MultilibBuilder("msan", {}, {})
+                            .flag("-fsanitize=memory")
+                            .makeMultilib());
+    Multilibs.push_back(MultilibBuilder("asan", {}, {})
+                            .flag("-fsanitize=address")
+                            .makeMultilib());
+
+    Multilib::flags_list Flags;
+    addMultilibFlag(getSanitizerArgs(Args).needsMsanRt(), "-fsanitize=memory",
+                    Flags);
+    addMultilibFlag(getSanitizerArgs(Args).needsAsanRt(), "-fsanitize=address",
+                    Flags);
+
+    if (Multilibs.select(D, Flags, SelectedMultilibs)) {
+      Multilib LastSelected = SelectedMultilibs.back();
+      SelectedMultilibs = {LastSelected};
+
+      if (!SelectedMultilibs.back().isDefault()) {
+        SmallString<128> SanLibPath(D.SysRoot);
+        llvm::sys::path::append(SanLibPath, "usr", "lib");
+        SanLibPath += SelectedMultilibs.back().gccSuffix();
+        LibPaths.insert(LibPaths.begin(), std::string(SanLibPath));
+      }
+    }
+  }
 }
 
 HexagonToolChain::~HexagonToolChain() {}

diff  --git a/clang/test/Driver/hexagon-toolchain-linux.c 
b/clang/test/Driver/hexagon-toolchain-linux.c
index 7653624e32b9b..c1a59c1fc99b5 100644
--- a/clang/test/Driver/hexagon-toolchain-linux.c
+++ b/clang/test/Driver/hexagon-toolchain-linux.c
@@ -180,3 +180,36 @@
 // RUN:   --sysroot=%S/Inputs/basic_linux_libcxx_tree -r %s 2>&1 \
 // RUN:   | FileCheck -check-prefix=CHECK-PIE-RELOCATABLE %s
 // CHECK-PIE-RELOCATABLE-NOT:  "-pie"
+
+// 
-----------------------------------------------------------------------------
+// Sanitizer library paths: -fsanitize=memory
+// 
-----------------------------------------------------------------------------
+// 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=memory \
+// RUN:   --sysroot=%S/Inputs/basic_linux_libcxx_tree %s 2>&1 | FileCheck 
-check-prefix=CHECK-MSAN %s
+// CHECK-MSAN:      
"-L{{[^"]*}}basic_linux_libcxx_tree{{/|\\\\}}usr{{/|\\\\}}lib{{/|\\\\}}msan"
+// CHECK-MSAN-SAME: 
"-L{{[^"]*}}basic_linux_libcxx_tree{{/|\\\\}}usr{{/|\\\\}}lib"
+// 
-----------------------------------------------------------------------------
+// Sanitizer library paths: -fsanitize=address
+// 
-----------------------------------------------------------------------------
+// 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=address \
+// RUN:   --sysroot=%S/Inputs/basic_linux_libcxx_tree %s 2>&1 | FileCheck 
-check-prefix=CHECK-ASAN %s
+// 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
+// 
-----------------------------------------------------------------------------
+// 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:   --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"


        
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to