Skip to content

Commit 2974c99

Browse files
committed
Move metadata object generation for dylibs to the linker code
This deduplicates some code between codegen backends and may in the future allow adding extra metadata that is only known at link time.
1 parent ad43500 commit 2974c99

File tree

2 files changed

+3
-48
lines changed

2 files changed

+3
-48
lines changed

src/driver/aot.rs

Lines changed: 1 addition & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,13 @@ use std::thread::JoinHandle;
1111
use cranelift_object::{ObjectBuilder, ObjectModule};
1212
use rustc_codegen_ssa::assert_module_sources::CguReuse;
1313
use rustc_codegen_ssa::back::link::ensure_removed;
14-
use rustc_codegen_ssa::back::metadata::create_compressed_metadata_file;
1514
use rustc_codegen_ssa::base::determine_cgu_reuse;
1615
use rustc_codegen_ssa::{
1716
CodegenResults, CompiledModule, CrateInfo, ModuleKind, errors as ssa_errors,
1817
};
1918
use rustc_data_structures::profiling::SelfProfilerRef;
2019
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
2120
use rustc_data_structures::sync::{IntoDynSyncSend, par_map};
22-
use rustc_metadata::EncodedMetadata;
2321
use rustc_metadata::fs::copy_to_stdout;
2422
use rustc_middle::dep_graph::{WorkProduct, WorkProductId};
2523
use rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrFlags;
@@ -61,7 +59,6 @@ impl<HCX> HashStable<HCX> for OngoingModuleCodegen {
6159
pub(crate) struct OngoingCodegen {
6260
modules: Vec<OngoingModuleCodegen>,
6361
allocator_module: Option<CompiledModule>,
64-
metadata_module: Option<CompiledModule>,
6562
crate_info: CrateInfo,
6663
concurrency_limiter: ConcurrencyLimiter,
6764
}
@@ -133,7 +130,6 @@ impl OngoingCodegen {
133130
let codegen_results = CodegenResults {
134131
modules,
135132
allocator_module: self.allocator_module,
136-
metadata_module: self.metadata_module,
137133
crate_info: self.crate_info,
138134
};
139135

@@ -644,42 +640,6 @@ fn module_codegen(
644640
}))
645641
}
646642

647-
fn emit_metadata_module(tcx: TyCtxt<'_>, metadata: &EncodedMetadata) -> CompiledModule {
648-
use rustc_middle::mir::mono::CodegenUnitNameBuilder;
649-
650-
let _timer = tcx.sess.timer("write compressed metadata");
651-
652-
let cgu_name_builder = &mut CodegenUnitNameBuilder::new(tcx);
653-
let metadata_cgu_name = cgu_name_builder
654-
.build_cgu_name(LOCAL_CRATE, ["crate"], Some("metadata"))
655-
.as_str()
656-
.to_string();
657-
658-
let tmp_file = tcx.output_filenames(()).temp_path_for_cgu(
659-
OutputType::Metadata,
660-
&metadata_cgu_name,
661-
tcx.sess.invocation_temp.as_deref(),
662-
);
663-
664-
let symbol_name = rustc_middle::middle::exported_symbols::metadata_symbol_name(tcx);
665-
let obj = create_compressed_metadata_file(tcx.sess, metadata, &symbol_name);
666-
667-
if let Err(err) = std::fs::write(&tmp_file, obj) {
668-
tcx.dcx().fatal(format!("error writing metadata object file: {}", err));
669-
}
670-
671-
CompiledModule {
672-
name: metadata_cgu_name,
673-
kind: ModuleKind::Metadata,
674-
object: Some(tmp_file),
675-
dwarf_object: None,
676-
bytecode: None,
677-
assembly: None,
678-
llvm_ir: None,
679-
links_from_incr_cache: Vec::new(),
680-
}
681-
}
682-
683643
fn emit_allocator_module(tcx: TyCtxt<'_>) -> Option<CompiledModule> {
684644
let mut allocator_module = make_module(tcx.sess, "allocator_shim".to_string());
685645
let created_alloc_shim = crate::allocator::codegen(tcx, &mut allocator_module);
@@ -704,7 +664,7 @@ fn emit_allocator_module(tcx: TyCtxt<'_>) -> Option<CompiledModule> {
704664
}
705665
}
706666

707-
pub(crate) fn run_aot(tcx: TyCtxt<'_>, metadata: Option<&EncodedMetadata>) -> Box<OngoingCodegen> {
667+
pub(crate) fn run_aot(tcx: TyCtxt<'_>) -> Box<OngoingCodegen> {
708668
// FIXME handle `-Ctarget-cpu=native`
709669
let target_cpu = match tcx.sess.opts.cg.target_cpu {
710670
Some(ref name) => name,
@@ -720,7 +680,6 @@ pub(crate) fn run_aot(tcx: TyCtxt<'_>, metadata: Option<&EncodedMetadata>) -> Bo
720680
return Box::new(OngoingCodegen {
721681
modules: vec![],
722682
allocator_module: None,
723-
metadata_module: None,
724683
crate_info: CrateInfo::new(tcx, target_cpu),
725684
concurrency_limiter: ConcurrencyLimiter::new(0),
726685
});
@@ -780,12 +739,9 @@ pub(crate) fn run_aot(tcx: TyCtxt<'_>, metadata: Option<&EncodedMetadata>) -> Bo
780739

781740
let allocator_module = emit_allocator_module(tcx);
782741

783-
let metadata_module = metadata.map(|metadata| emit_metadata_module(tcx, metadata));
784-
785742
Box::new(OngoingCodegen {
786743
modules,
787744
allocator_module,
788-
metadata_module,
789745
crate_info: CrateInfo::new(tcx, target_cpu),
790746
concurrency_limiter: concurrency_limiter.0,
791747
})

src/lib.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ use cranelift_codegen::isa::TargetIsa;
4646
use cranelift_codegen::settings::{self, Configurable};
4747
use rustc_codegen_ssa::traits::CodegenBackend;
4848
use rustc_codegen_ssa::{CodegenResults, TargetConfig};
49-
use rustc_metadata::EncodedMetadata;
5049
use rustc_middle::dep_graph::{WorkProduct, WorkProductId};
5150
use rustc_session::Session;
5251
use rustc_session::config::OutputFilenames;
@@ -238,7 +237,7 @@ impl CodegenBackend for CraneliftCodegenBackend {
238237
println!("Cranelift version: {}", cranelift_codegen::VERSION);
239238
}
240239

241-
fn codegen_crate(&self, tcx: TyCtxt<'_>, metadata: Option<&EncodedMetadata>) -> Box<dyn Any> {
240+
fn codegen_crate(&self, tcx: TyCtxt<'_>) -> Box<dyn Any> {
242241
info!("codegen crate {}", tcx.crate_name(LOCAL_CRATE));
243242
let config = self.config.clone().unwrap_or_else(|| {
244243
BackendConfig::from_opts(&tcx.sess.opts.cg.llvm_args)
@@ -251,7 +250,7 @@ impl CodegenBackend for CraneliftCodegenBackend {
251250
#[cfg(not(feature = "jit"))]
252251
tcx.dcx().fatal("jit support was disabled when compiling rustc_codegen_cranelift");
253252
} else {
254-
driver::aot::run_aot(tcx, metadata)
253+
driver::aot::run_aot(tcx)
255254
}
256255
}
257256

0 commit comments

Comments
 (0)