Skip to content

Commit 6786a09

Browse files
committed
Don't compress dylib metadata
Dylib metadata compression increases code complexity and will become less important once -Zsplit-metadata is introduced
1 parent 9cdefd7 commit 6786a09

File tree

5 files changed

+7
-50
lines changed

5 files changed

+7
-50
lines changed

Cargo.lock

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3595,7 +3595,6 @@ dependencies = [
35953595
"rustc_symbol_mangling",
35963596
"rustc_target",
35973597
"smallvec",
3598-
"snap",
35993598
"tempfile",
36003599
"thorin-dwp",
36013600
"tracing",
@@ -3967,7 +3966,6 @@ dependencies = [
39673966
"rustc_span",
39683967
"rustc_target",
39693968
"smallvec",
3970-
"snap",
39713969
"tracing",
39723970
]
39733971

@@ -4795,12 +4793,6 @@ version = "1.7.0"
47954793
source = "registry+https://github.com/rust-lang/crates.io-index"
47964794
checksum = "1ecab6c735a6bb4139c0caafd0cc3635748bbb3acf4550e8138122099251f309"
47974795

4798-
[[package]]
4799-
name = "snap"
4800-
version = "1.0.1"
4801-
source = "registry+https://github.com/rust-lang/crates.io-index"
4802-
checksum = "da73c8f77aebc0e40c300b93f0a5f1bece7a248a36eee287d4e095f35c7b7d6e"
4803-
48044796
[[package]]
48054797
name = "socket2"
48064798
version = "0.4.1"

compiler/rustc_codegen_ssa/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ jobserver = "0.1.22"
1616
tempfile = "3.2"
1717
thorin-dwp = "0.2"
1818
pathdiff = "0.2.0"
19-
snap = "1"
2019
smallvec = { version = "1.6.1", features = ["union", "may_dangle"] }
2120
regex = "1.4"
2221

compiler/rustc_codegen_ssa/src/back/metadata.rs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
//! Reading of the rustc metadata for rlibs and dylibs
22
33
use std::fs::File;
4-
use std::io::Write;
54
use std::path::Path;
65

76
use object::write::{self, StandardSegment, Symbol, SymbolSection};
@@ -10,8 +9,6 @@ use object::{
109
SectionFlags, SectionKind, SymbolFlags, SymbolKind, SymbolScope,
1110
};
1211

13-
use snap::write::FrameEncoder;
14-
1512
use rustc_data_structures::memmap::Mmap;
1613
use rustc_data_structures::owning_ref::OwningRef;
1714
use rustc_data_structures::rustc_erase_owner;
@@ -260,12 +257,10 @@ pub fn create_compressed_metadata_file(
260257
metadata: &EncodedMetadata,
261258
symbol_name: &str,
262259
) -> Vec<u8> {
263-
let mut compressed = rustc_metadata::METADATA_HEADER.to_vec();
264-
FrameEncoder::new(&mut compressed).write_all(metadata.raw_data()).unwrap();
265260
let mut file = if let Some(file) = create_object_file(sess) {
266261
file
267262
} else {
268-
return compressed.to_vec();
263+
return metadata.raw_data().to_vec();
269264
};
270265
let section = file.add_section(
271266
file.segment_name(StandardSegment::Data).to_vec(),
@@ -279,14 +274,14 @@ pub fn create_compressed_metadata_file(
279274
}
280275
_ => {}
281276
};
282-
let offset = file.append_section_data(section, &compressed, 1);
277+
let offset = file.append_section_data(section, metadata.raw_data(), 1);
283278

284279
// For MachO and probably PE this is necessary to prevent the linker from throwing away the
285280
// .rustc section. For ELF this isn't necessary, but it also doesn't harm.
286281
file.add_symbol(Symbol {
287282
name: symbol_name.as_bytes().to_vec(),
288283
value: offset,
289-
size: compressed.len() as u64,
284+
size: metadata.raw_data().len() as u64,
290285
kind: SymbolKind::Data,
291286
scope: SymbolScope::Dynamic,
292287
weak: false,

compiler/rustc_metadata/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ doctest = false
99
[dependencies]
1010
libloading = "0.7.1"
1111
odht = { version = "0.3.1", features = ["nightly"] }
12-
snap = "1"
1312
tracing = "0.1"
1413
smallvec = { version = "1.6.1", features = ["union", "may_dangle"] }
1514
rustc_middle = { path = "../rustc_middle" }

compiler/rustc_metadata/src/locator.rs

Lines changed: 4 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@
213213
//! metadata::locator or metadata::creader for all the juicy details!
214214
215215
use crate::creader::Library;
216-
use crate::rmeta::{rustc_version, MetadataBlob, METADATA_HEADER};
216+
use crate::rmeta::{rustc_version, MetadataBlob};
217217

218218
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
219219
use rustc_data_structures::memmap::Mmap;
@@ -231,11 +231,10 @@ use rustc_span::symbol::{sym, Symbol};
231231
use rustc_span::Span;
232232
use rustc_target::spec::{Target, TargetTriple};
233233

234-
use snap::read::FrameDecoder;
235234
use std::fmt::Write as _;
236-
use std::io::{Read, Result as IoResult, Write};
235+
use std::io::{Result as IoResult, Write};
237236
use std::path::{Path, PathBuf};
238-
use std::{cmp, fmt, fs};
237+
use std::{fmt, fs};
239238
use tracing::{debug, info};
240239

241240
#[derive(Clone)]
@@ -757,34 +756,7 @@ fn get_metadata_section<'p>(
757756
loader.get_rlib_metadata(target, filename).map_err(MetadataError::LoadFailure)?
758757
}
759758
CrateFlavor::Dylib => {
760-
let buf =
761-
loader.get_dylib_metadata(target, filename).map_err(MetadataError::LoadFailure)?;
762-
// The header is uncompressed
763-
let header_len = METADATA_HEADER.len();
764-
debug!("checking {} bytes of metadata-version stamp", header_len);
765-
let header = &buf[..cmp::min(header_len, buf.len())];
766-
if header != METADATA_HEADER {
767-
return Err(MetadataError::LoadFailure(format!(
768-
"invalid metadata version found: {}",
769-
filename.display()
770-
)));
771-
}
772-
773-
// Header is okay -> inflate the actual metadata
774-
let compressed_bytes = &buf[header_len..];
775-
debug!("inflating {} bytes of compressed metadata", compressed_bytes.len());
776-
// Assume the decompressed data will be at least the size of the compressed data, so we
777-
// don't have to grow the buffer as much.
778-
let mut inflated = Vec::with_capacity(compressed_bytes.len());
779-
match FrameDecoder::new(compressed_bytes).read_to_end(&mut inflated) {
780-
Ok(_) => rustc_erase_owner!(OwningRef::new(inflated).map_owner_box()),
781-
Err(_) => {
782-
return Err(MetadataError::LoadFailure(format!(
783-
"failed to decompress metadata: {}",
784-
filename.display()
785-
)));
786-
}
787-
}
759+
loader.get_dylib_metadata(target, filename).map_err(MetadataError::LoadFailure)?
788760
}
789761
CrateFlavor::Rmeta => {
790762
// mmap the file, because only a small fraction of it is read.

0 commit comments

Comments
 (0)