Skip to content

Commit 52853c2

Browse files
committed
Don't compress dylib metadata
1 parent 008be2d commit 52853c2

File tree

4 files changed

+21
-22
lines changed

4 files changed

+21
-22
lines changed

Cargo.lock

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3367,7 +3367,6 @@ dependencies = [
33673367
"rustc_type_ir",
33683368
"serde_json",
33693369
"smallvec",
3370-
"snap",
33713370
"tempfile",
33723371
"thorin-dwp",
33733372
"tracing",

compiler/rustc_codegen_ssa/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ tempfile = "3.2"
1717
thorin-dwp = "0.6"
1818
pathdiff = "0.2.0"
1919
serde_json = "1.0.59"
20-
snap = "1"
2120
smallvec = { version = "1.8.1", features = ["union", "may_dangle"] }
2221
regex = "1.4"
2322

compiler/rustc_codegen_ssa/src/back/metadata.rs

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ use object::{
1010
ObjectSymbol, SectionFlags, SectionKind, SymbolFlags, SymbolKind, SymbolScope,
1111
};
1212

13-
use snap::write::FrameEncoder;
14-
1513
use rustc_data_structures::memmap::Mmap;
1614
use rustc_data_structures::owned_slice::{try_slice_owned, OwnedSlice};
1715
use rustc_metadata::fs::METADATA_FILENAME;
@@ -482,12 +480,8 @@ pub fn create_compressed_metadata_file(
482480
symbol_name: &str,
483481
) -> Vec<u8> {
484482
let mut compressed = rustc_metadata::METADATA_HEADER.to_vec();
485-
// Our length will be backfilled once we're done writing
486-
compressed.write_all(&[0; 4]).unwrap();
487-
FrameEncoder::new(&mut compressed).write_all(metadata.raw_data()).unwrap();
488-
let meta_len = rustc_metadata::METADATA_HEADER.len();
489-
let data_len = (compressed.len() - meta_len - 4) as u32;
490-
compressed[meta_len..meta_len + 4].copy_from_slice(&data_len.to_be_bytes());
483+
compressed.write_all(&(metadata.raw_data().len() as u32).to_be_bytes()).unwrap();
484+
compressed.extend(metadata.raw_data());
491485

492486
let Some(mut file) = create_object_file(sess) else {
493487
return compressed.to_vec();

compiler/rustc_metadata/src/locator.rs

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -806,19 +806,26 @@ fn get_metadata_section<'p>(
806806
let compressed_len = u32::from_be_bytes(len_bytes) as usize;
807807

808808
// Header is okay -> inflate the actual metadata
809-
let compressed_bytes = &buf[data_start..(data_start + compressed_len)];
810-
debug!("inflating {} bytes of compressed metadata", compressed_bytes.len());
811-
// Assume the decompressed data will be at least the size of the compressed data, so we
812-
// don't have to grow the buffer as much.
813-
let mut inflated = Vec::with_capacity(compressed_bytes.len());
814-
FrameDecoder::new(compressed_bytes).read_to_end(&mut inflated).map_err(|_| {
815-
MetadataError::LoadFailure(format!(
816-
"failed to decompress metadata: {}",
817-
filename.display()
818-
))
819-
})?;
809+
let compressed_bytes = buf.slice(|buf| &buf[data_start..(data_start + compressed_len)]);
810+
if &compressed_bytes[..cmp::min(METADATA_HEADER.len(), compressed_bytes.len())]
811+
== METADATA_HEADER
812+
{
813+
// The metadata was not actually compressed.
814+
compressed_bytes
815+
} else {
816+
debug!("inflating {} bytes of compressed metadata", compressed_bytes.len());
817+
// Assume the decompressed data will be at least the size of the compressed data, so we
818+
// don't have to grow the buffer as much.
819+
let mut inflated = Vec::with_capacity(compressed_bytes.len());
820+
FrameDecoder::new(&*compressed_bytes).read_to_end(&mut inflated).map_err(|_| {
821+
MetadataError::LoadFailure(format!(
822+
"failed to decompress metadata: {}",
823+
filename.display()
824+
))
825+
})?;
820826

821-
slice_owned(inflated, Deref::deref)
827+
slice_owned(inflated, Deref::deref)
828+
}
822829
}
823830
CrateFlavor::Rmeta => {
824831
// mmap the file, because only a small fraction of it is read.

0 commit comments

Comments
 (0)