Author: Jacek Caban
Date: 2026-07-14T12:04:26+02:00
New Revision: 79acf12724942b687b7c777e1dc46dd56ca4d287

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

LOG: [clang] Use lld-link by default when -marm64x is specified (#209324)

ARM64X hybrid object files require lld-link, as it is currently the only
linker that supports them.

Added: 
    

Modified: 
    clang/lib/Driver/ToolChains/MSVC.cpp
    clang/test/Driver/msvc-link.c

Removed: 
    


################################################################################
diff  --git a/clang/lib/Driver/ToolChains/MSVC.cpp 
b/clang/lib/Driver/ToolChains/MSVC.cpp
index 2b428c56ed1be..2aa69ec62cfba 100644
--- a/clang/lib/Driver/ToolChains/MSVC.cpp
+++ b/clang/lib/Driver/ToolChains/MSVC.cpp
@@ -344,9 +344,11 @@ void visualstudio::Linker::ConstructJob(Compilation &C, 
const JobAction &JA,
     // truncate the .debug_* sections to eight characters. PE/COFF doesn't 
allow
     // section names longer than eight bytes in executables - LLD uses the same
     // name length extension as in object files (where long names are allowed).
+    // Also 'lld-link' for hybrid object files if -marm64x is requested.
     if (Args.hasArg(options::OPT_gdwarf, options::OPT_gdwarf_2,
                     options::OPT_gdwarf_3, options::OPT_gdwarf_4,
-                    options::OPT_gdwarf_5, options::OPT_gdwarf_6))
+                    options::OPT_gdwarf_5, options::OPT_gdwarf_6,
+                    options::OPT_marm64x))
       Linker = "lld-link";
     else
       Linker = "link";

diff  --git a/clang/test/Driver/msvc-link.c b/clang/test/Driver/msvc-link.c
index 755528a6c3e29..e78e457442c66 100644
--- a/clang/test/Driver/msvc-link.c
+++ b/clang/test/Driver/msvc-link.c
@@ -45,6 +45,13 @@
 // RUN: %clang_cl -arm64EC -marm64x -fuse-ld=link -### -- %s 2>&1 | FileCheck 
--check-prefix=ARM64X %s
 // ARM64X: "-machine:arm64x"
 
+// RUN: %clang --target=arm64ec-pc-windows-msvc -marm64x -### %s 2>&1 | 
FileCheck --check-prefix=ARM64X-LLD %s
+// RUN: %clang --target=aarch64-pc-windows-msvc -marm64x -### %s 2>&1 | 
FileCheck --check-prefix=ARM64X-LLD %s
+// RUN: %clang_cl -marm64x -### -- %s 2>&1 | FileCheck 
--check-prefix=ARM64X-LLD %s
+// RUN: %clang_cl -arm64EC -marm64x -### -- %s 2>&1 | FileCheck 
--check-prefix=ARM64X-LLD %s
+// ARM64X-LLD: lld-link
+// ARM64X-LLD-SAME: "-machine:arm64x"
+
 // RUN: not %clang --target=x86_64-linux-gnu -marm64x -### %s 2>&1 | FileCheck 
--check-prefix=HYBRID-ERR %s
 // HYBRID-ERR: error: unsupported option '-marm64x' for target 
'x86_64-linux-gnu'
 


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

Reply via email to