]> git.lizzy.rs Git - rust.git/commitdiff
Move metadata objects to before as-needed/zignore flags to make sure they are kept.
authorLuqman Aden <me@luqman.ca>
Fri, 28 May 2021 01:59:32 +0000 (18:59 -0700)
committerLuqman Aden <me@luqman.ca>
Fri, 28 May 2021 05:13:39 +0000 (22:13 -0700)
compiler/rustc_codegen_ssa/src/back/link.rs

index 32275e9b073481d97b4b7c41fc960ac500743fc8..478b1ce57852e94a429b85b2901eb23e9e5eb0e6 100644 (file)
@@ -1642,10 +1642,16 @@ fn linker_with_args<'a, B: ArchiveBuilder<'a>>(
     // Make the binary compatible with data execution prevention schemes.
     cmd.add_no_exec();
 
+    // OBJECT-FILES-YES
+    add_local_crate_metadata_objects(cmd, crate_type, codegen_results);
+
     // NO-OPT-OUT, OBJECT-FILES-NO
     // Avoid linking to dynamic libraries unless they satisfy some undefined symbols
     // at the point at which they are specified on the command line.
     // Must be passed before any dynamic libraries.
+    // On solaris-like systems, this also will ignore unreferenced ELF sections
+    // from relocatable objects. For that reason, we move the metadata objects
+    // to before this flag as they would otherwise be removed.
     cmd.add_as_needed();
 
     // NO-OPT-OUT, OBJECT-FILES-NO
@@ -1697,9 +1703,6 @@ fn linker_with_args<'a, B: ArchiveBuilder<'a>>(
     // dynamic library.
     cmd.export_symbols(tmpdir, crate_type);
 
-    // OBJECT-FILES-YES
-    add_local_crate_metadata_objects(cmd, crate_type, codegen_results);
-
     // OBJECT-FILES-YES
     add_local_crate_allocator_objects(cmd, codegen_results);