Use llvm-readobj for run-make/crate-hash-rustc-version

This commit is contained in:
Jerry Wang 2024-07-15 19:52:22 -04:00
parent ec6e07b09d
commit eea6502dcb
No known key found for this signature in database
GPG Key ID: B9657729C5192EDC

View File

@ -4,17 +4,27 @@
//@ ignore-cross-compile
//@ only-unix
use run_make_support::{cmd, diff, dynamic_lib_name, is_darwin, run, run_fail, rustc};
use run_make_support::llvm;
use run_make_support::{diff, dynamic_lib_name, is_darwin, run, run_fail, rustc};
fn llvm_readobj() -> llvm::LlvmReadobj {
let mut cmd = llvm::llvm_readobj();
if is_darwin() {
cmd.symbols();
} else {
cmd.dynamic_table();
}
cmd
}
fn main() {
let flags = ["-Cprefer-dynamic", "-Csymbol-mangling-version=v0"];
let nm_flag = if is_darwin() { [].as_slice() } else { ["-D"].as_slice() };
// a.rs is compiled to a dylib
rustc().input("a.rs").crate_type("dylib").args(&flags).run();
// Store symbols
let symbols_before = cmd("nm").args(nm_flag).arg(dynamic_lib_name("a")).run().stdout_utf8();
let symbols_before = llvm_readobj().arg(dynamic_lib_name("a")).run().stdout_utf8();
// b.rs is compiled to a binary
rustc()
@ -35,7 +45,7 @@ fn main() {
.run();
// After compiling with a different rustc version, store symbols again.
let symbols_after = cmd("nm").args(nm_flag).arg(dynamic_lib_name("a")).run().stdout_utf8();
let symbols_after = llvm_readobj().arg(dynamic_lib_name("a")).run().stdout_utf8();
// As a sanity check, test if the symbols changed:
// If the symbols are identical, there's been an error.