https://github.com/asi-sc updated 
https://github.com/llvm/llvm-project/pull/183055

>From 2e2bf6dae4d59d56f02a375fb29a74ec335e0903 Mon Sep 17 00:00:00 2001
From: Anton Sidorenko <[email protected]>
Date: Thu, 11 Dec 2025 14:47:25 +0000
Subject: [PATCH 1/2] [Clang][Driver] Move -T option after -L

-L option affects linker script search paths when -T is specified.

The change restores the behavior clang-20 and earlier drivers have for RISC-V.
(before merging RISCVToolchain.cpp to Baremetal.cpp). GCC (both linux and
baremetal) and Clang linux drivers do the same reordering.
---
 clang/lib/Driver/ToolChains/BareMetal.cpp |  8 ++++----
 clang/test/Driver/baremetal.cpp           | 12 +++++++++++-
 2 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/BareMetal.cpp 
b/clang/lib/Driver/ToolChains/BareMetal.cpp
index 0602a8a19f943..068a1c92a76a5 100644
--- a/clang/lib/Driver/ToolChains/BareMetal.cpp
+++ b/clang/lib/Driver/ToolChains/BareMetal.cpp
@@ -672,11 +672,11 @@ void baremetal::Linker::ConstructJob(Compilation &C, 
const JobAction &JA,
     }
   }
 
-  Args.addAllArgs(CmdArgs,
-                  {options::OPT_L, options::OPT_u, options::OPT_T_Group,
-                   options::OPT_s, options::OPT_t, options::OPT_r});
-
+  Args.addAllArgs(CmdArgs, {options::OPT_L});
   TC.AddFilePathLibArgs(Args, CmdArgs);
+  Args.addAllArgs(CmdArgs, {options::OPT_u, options::OPT_T_Group, 
options::OPT_s,
+                            options::OPT_t, options::OPT_r});
+
 
   for (const auto &LibPath : TC.getLibraryPaths())
     CmdArgs.push_back(Args.MakeArgString(llvm::Twine("-L", LibPath)));
diff --git a/clang/test/Driver/baremetal.cpp b/clang/test/Driver/baremetal.cpp
index 986aaff5b630d..1ab676fd390f3 100644
--- a/clang/test/Driver/baremetal.cpp
+++ b/clang/test/Driver/baremetal.cpp
@@ -31,8 +31,9 @@
 // CHECK-V6M-C-SAME: "--sysroot={{.*}}{{[/\\]+}}Inputs{{[/\\]+}}baremetal_arm"
 // CHECK-V6M-C-SAME: "-Bstatic" "-m" "armelf" "-EL"
 // CHECK-V6M-C-SAME: "[[SYSROOT:[^"]+]]{{[/\\]+}}lib{{[/\\]+}}crt0.o"
-// CHECK-V6M-C-SAME: "-T" "semihosted.lds" 
"-Lsome{{[/\\]+}}directory{{[/\\]+}}user{{[/\\]+}}asked{{[/\\]+}}for"
+// CHECK-V6M-C-SAME: 
"-Lsome{{[/\\]+}}directory{{[/\\]+}}user{{[/\\]+}}asked{{[/\\]+}}for"
 // CHECK-V6M-C-SAME: "-L[[SYSROOT:[^"]+]]{{[/\\]+}}lib"
+// CHECK-V6M-C-SAME: "-T" "semihosted.lds"
 // CHECK-V6M-C-SAME: "{{.*}}.o"
 // CHECK-V6M-C-SAME: {{[^"]*}}libclang_rt.builtins.a"
 // CHECK-V6M-C-SAME: "-lc"
@@ -613,3 +614,12 @@
 // RUN:     --sysroot=%S/Inputs/basic_riscv64_tree/riscv64-unknown-elf \
 // RUN:   | FileCheck --check-prefix=CHECK-RV64-RELAX %s
 // CHECK-RV64-RELAX-NOT: "--no-relax"
+
+// Check that "-T" follows after "-L" for RISC-V
+// RUN: %clang %s -### 2>&1 --target=riscv64-unknown-elf \
+// RUN:     --sysroot=%S/Inputs/basic_riscv64_tree/riscv64-unknown-elf \
+// RUN:     -T linker_script.lds -Lsearch_path \
+// RUN:   | FileCheck --check-prefix=CHECK-RV64-LINKER-SCRIPT %s
+// CHECK-RV64-LINKER-SCRIPT: ld{{(.exe)?}}"
+// CHECK-RV64-LINKER-SCRIPT-SAME: "-Lsearch_path"
+// CHECK-RV64-LINKER-SCRIPT-SAME: "-T" "linker_script.lds"

>From 7fb8090b5e4cd73da52a372544ffb3cf9e56978d Mon Sep 17 00:00:00 2001
From: Anton Sidorenko <[email protected]>
Date: Tue, 24 Feb 2026 13:58:27 +0000
Subject: [PATCH 2/2] fixup! [Clang][Driver] Move -T option after -L

---
 clang/lib/Driver/ToolChains/BareMetal.cpp | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/BareMetal.cpp 
b/clang/lib/Driver/ToolChains/BareMetal.cpp
index 068a1c92a76a5..5e974527774eb 100644
--- a/clang/lib/Driver/ToolChains/BareMetal.cpp
+++ b/clang/lib/Driver/ToolChains/BareMetal.cpp
@@ -674,9 +674,8 @@ void baremetal::Linker::ConstructJob(Compilation &C, const 
JobAction &JA,
 
   Args.addAllArgs(CmdArgs, {options::OPT_L});
   TC.AddFilePathLibArgs(Args, CmdArgs);
-  Args.addAllArgs(CmdArgs, {options::OPT_u, options::OPT_T_Group, 
options::OPT_s,
-                            options::OPT_t, options::OPT_r});
-
+  Args.addAllArgs(CmdArgs, {options::OPT_u, options::OPT_T_Group,
+                            options::OPT_s, options::OPT_t, options::OPT_r});
 
   for (const auto &LibPath : TC.getLibraryPaths())
     CmdArgs.push_back(Args.MakeArgString(llvm::Twine("-L", LibPath)));

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

Reply via email to