about summary refs log tree commit diff
path: root/compiler/rustc_codegen_cranelift/src/metadata.rs
blob: ab238244d68d504c983bfff1ffea366fd6eb7c5f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//! Writing of the rustc metadata for dylibs

use rustc_middle::ty::TyCtxt;

use crate::backend::WriteMetadata;

// Adapted from https://github.com/rust-lang/rust/blob/da573206f87b5510de4b0ee1a9c044127e409bd3/src/librustc_codegen_llvm/base.rs#L47-L112
pub(crate) fn write_metadata<O: WriteMetadata>(tcx: TyCtxt<'_>, object: &mut O) {
    use snap::write::FrameEncoder;
    use std::io::Write;

    let metadata = tcx.encode_metadata();
    let mut compressed = tcx.metadata_encoding_version();
    FrameEncoder::new(&mut compressed).write_all(&metadata.raw_data).unwrap();

    object.add_rustc_section(
        rustc_middle::middle::exported_symbols::metadata_symbol_name(tcx),
        compressed,
    );
}