[clang] 79acf12 - [clang] Use lld-link by default when -marm64x is specified (#209324)
via cfe-commits
cfe-commits at lists.llvm.org
Tue Jul 14 03:04:31 PDT 2026
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'
More information about the cfe-commits
mailing list