diff --git a/compiler/rustc_codegen_ssa/src/back/link.rs b/compiler/rustc_codegen_ssa/src/back/link.rs index 32275e9b07348..478b1ce57852e 100644 --- a/compiler/rustc_codegen_ssa/src/back/link.rs +++ b/compiler/rustc_codegen_ssa/src/back/link.rs @@ -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);