43 lines
1.4 KiB
Rust
43 lines
1.4 KiB
Rust
// Checks debuginfo compression both for the always-enabled zlib, and when the optional zstd is
|
|
// enabled:
|
|
// - via rustc's `debuginfo-compression`,
|
|
// - and via rust-lld's `compress-debug-sections`
|
|
|
|
//@ needs-llvm-zstd: we want LLVM/LLD to be built with zstd support
|
|
//@ needs-rust-lld: the system linker will most likely not support zstd
|
|
//@ only-linux
|
|
//@ ignore-cross-compile
|
|
|
|
use run_make_support::{Rustc, llvm_readobj, run_in_tmpdir};
|
|
|
|
fn check_compression(compression: &str, to_find: &str) {
|
|
// check compressed debug sections via rustc flag
|
|
prepare_and_check(to_find, |rustc| {
|
|
rustc.arg(&format!("-Zdebuginfo-compression={compression}"))
|
|
});
|
|
|
|
// check compressed debug sections via rust-lld flag
|
|
prepare_and_check(to_find, |rustc| {
|
|
rustc.link_arg(&format!("-Wl,--compress-debug-sections={compression}"))
|
|
});
|
|
}
|
|
|
|
fn prepare_and_check<F: FnOnce(&mut Rustc) -> &mut Rustc>(to_find: &str, prepare_rustc: F) {
|
|
run_in_tmpdir(|| {
|
|
let mut rustc = Rustc::new();
|
|
rustc
|
|
.arg("-Zlinker-features=+lld")
|
|
.arg("-Clink-self-contained=+linker")
|
|
.arg("-Zunstable-options")
|
|
.arg("-Cdebuginfo=full")
|
|
.input("main.rs");
|
|
prepare_rustc(&mut rustc).run();
|
|
llvm_readobj().arg("-t").arg("main").run().assert_stdout_contains(to_find);
|
|
});
|
|
}
|
|
|
|
fn main() {
|
|
check_compression("zlib", "ZLIB");
|
|
check_compression("zstd", "ZSTD");
|
|
}
|