Skip to content

Commit

Permalink
Auto merge of #86105 - bjorn3:link_info_refactor, r=petrochenkov
Browse files Browse the repository at this point in the history
Refactor the generation of the metadata for linking
  • Loading branch information
bors committed Jul 7, 2021
2 parents c5e344f + 2977dff commit d2b04f0
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 29 deletions.
20 changes: 18 additions & 2 deletions compiler/rustc_codegen_ssa/src/base.rs
Expand Up @@ -19,7 +19,7 @@ use rustc_hir::def_id::{DefId, LOCAL_CRATE};
use rustc_hir::lang_items::LangItem;
use rustc_index::vec::Idx;
use rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrs;
use rustc_middle::middle::cstore::{self, EncodedMetadata};
use rustc_middle::middle::cstore::EncodedMetadata;
use rustc_middle::middle::lang_items;
use rustc_middle::mir::mono::{CodegenUnit, CodegenUnitNameBuilder, MonoItem};
use rustc_middle::ty::layout::{HasTyCtxt, TyAndLayout};
Expand Down Expand Up @@ -775,6 +775,22 @@ impl CrateInfo {
subsystem.to_string()
});

// This list is used when generating the command line to pass through to
// system linker. The linker expects undefined symbols on the left of the
// command line to be defined in libraries on the right, not the other way
// around. For more info, see some comments in the add_used_library function
// below.
//
// In order to get this left-to-right dependency ordering, we use the reverse
// postorder of all crates putting the leaves at the right-most positions.
let used_crates = tcx
.postorder_cnums(())
.iter()
.rev()
.copied()
.filter(|&cnum| !tcx.dep_kind(cnum).macros_only())
.collect();

let mut info = CrateInfo {
target_cpu,
exported_symbols,
Expand All @@ -785,7 +801,7 @@ impl CrateInfo {
native_libraries: Default::default(),
used_libraries: tcx.native_libraries(LOCAL_CRATE).iter().map(Into::into).collect(),
crate_name: Default::default(),
used_crates: cstore::used_crates(tcx),
used_crates,
used_crate_source: Default::default(),
lang_item_to_crate: Default::default(),
missing_lang_items: Default::default(),
Expand Down
27 changes: 0 additions & 27 deletions compiler/rustc_middle/src/middle/cstore.rs
Expand Up @@ -197,30 +197,3 @@ pub trait CrateStore {
}

pub type CrateStoreDyn = dyn CrateStore + sync::Sync;

// This method is used when generating the command line to pass through to
// system linker. The linker expects undefined symbols on the left of the
// command line to be defined in libraries on the right, not the other way
// around. For more info, see some comments in the add_used_library function
// below.
//
// In order to get this left-to-right dependency ordering, we perform a
// topological sort of all crates putting the leaves at the right-most
// positions.
pub fn used_crates(tcx: TyCtxt<'_>) -> Vec<CrateNum> {
let mut libs = tcx
.crates(())
.iter()
.cloned()
.filter_map(|cnum| {
if tcx.dep_kind(cnum).macros_only() {
return None;
}
Some(cnum)
})
.collect::<Vec<_>>();
let mut ordering = tcx.postorder_cnums(()).to_owned();
ordering.reverse();
libs.sort_by_cached_key(|&a| ordering.iter().position(|x| *x == a));
libs
}

0 comments on commit d2b04f0

Please sign in to comment.