about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLewis McClelland <lewis@lewismcclelland.me>2025-08-09 15:46:45 -0700
committerLewis McClelland <lewis@lewismcclelland.me>2025-08-18 11:50:20 -0400
commit0e47f19ffc934298227e77e49836ee1e335b7b61 (patch)
tree9e7daeb6268c0c333265553907ab862f0c640512
parentdbb8190b9cacf2d3e0d4fbb3c71dc2603bb643a8 (diff)
downloadrust-0e47f19ffc934298227e77e49836ee1e335b7b61.tar.gz
rust-0e47f19ffc934298227e77e49836ee1e335b7b61.zip
Specify linker scripts after user link args
-rw-r--r--compiler/rustc_codegen_ssa/src/back/link.rs9
1 files changed, 7 insertions, 2 deletions
diff --git a/compiler/rustc_codegen_ssa/src/back/link.rs b/compiler/rustc_codegen_ssa/src/back/link.rs
index 3ec0d900994..30ad9450aef 100644
--- a/compiler/rustc_codegen_ssa/src/back/link.rs
+++ b/compiler/rustc_codegen_ssa/src/back/link.rs
@@ -2435,6 +2435,13 @@ fn linker_with_args(
     // Passed after compiler-generated options to support manual overriding when necessary.
     add_user_defined_link_args(cmd, sess);
 
+    // ------------ Builtin configurable linker scripts ------------
+    // The user's link args should be able to overwrite symbols in the compiler's
+    // linker script that were weakly defined (i.e. defined with `PROVIDE()`). For this
+    // to work correctly, the user needs to be able to specify linker arguments like
+    // `--defsym` and `--script` *before* any builtin linker scripts are evaluated.
+    add_link_script(cmd, sess, tmpdir, crate_type);
+
     // ------------ Object code and libraries, order-dependent ------------
 
     // Post-link CRT objects.
@@ -2469,8 +2476,6 @@ fn add_order_independent_options(
 
     let apple_sdk_root = add_apple_sdk(cmd, sess, flavor);
 
-    add_link_script(cmd, sess, tmpdir, crate_type);
-
     if sess.target.os == "fuchsia"
         && crate_type == CrateType::Executable
         && !matches!(flavor, LinkerFlavor::Gnu(Cc::Yes, _))