Skip to content

Commit

Permalink
Rollup merge of rust-lang#130156 - nebulark:test_buildinfo, r=jieyouxu
Browse files Browse the repository at this point in the history
Add test for S_OBJNAME & update test for LF_BUILDINFO cl and cmd

Update the unit test for checking cl and cmd in LF_BUILDINFO. With llvm-pdbutil we can now more specifically check if the string appears at the right location instead of just checking whether the string exists at all.
Context: rust-lang#96475
  • Loading branch information
workingjubilee authored Sep 11, 2024
2 parents 9e42180 + 713828d commit d86d1ad
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 19 deletions.
6 changes: 6 additions & 0 deletions src/tools/run-make-support/src/external_deps/llvm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,12 @@ pub fn llvm_dwarfdump() -> LlvmDwarfdump {
LlvmDwarfdump::new()
}

/// Construct a new `llvm-pdbutil` invocation. This assumes that `llvm-pdbutil` is available
/// at `$LLVM_BIN_DIR/llvm-pdbutil`.
pub fn llvm_pdbutil() -> LlvmPdbutil {
LlvmPdbutil::new()
}

/// A `llvm-readobj` invocation builder.
#[derive(Debug)]
#[must_use]
Expand Down
4 changes: 4 additions & 0 deletions tests/run-make/pdb-buildinfo-cl-cmd/filecheck.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
CHECK: LF_BUILDINFO
CHECK: rustc.exe
CHECK: main.rs
CHECK: "-g" "--crate-name" "my_crate_name" "--crate-type" "bin" "-Cmetadata=dc9ef878b0a48666"
24 changes: 5 additions & 19 deletions tests/run-make/pdb-buildinfo-cl-cmd/rmake.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
//@ only-windows-msvc
// Reason: pdb files are unique to this architecture

use run_make_support::{assert_contains, bstr, env_var, rfs, rustc};
use run_make_support::{llvm, rustc};

fn main() {
rustc()
Expand All @@ -17,23 +17,9 @@ fn main() {
.crate_type("bin")
.metadata("dc9ef878b0a48666")
.run();
let tests = [
&env_var("RUSTC"),
r#""main.rs""#,
r#""-g""#,
r#""--crate-name""#,
r#""my_crate_name""#,
r#""--crate-type""#,
r#""bin""#,
r#""-Cmetadata=dc9ef878b0a48666""#,
];
for test in tests {
assert_pdb_contains(test);
}
}

fn assert_pdb_contains(needle: &str) {
let needle = needle.as_bytes();
use bstr::ByteSlice;
assert!(&rfs::read("my_crate_name.pdb").find(needle).is_some());
let pdbutil_result =
llvm::llvm_pdbutil().arg("dump").arg("-ids").input("my_crate_name.pdb").run();

llvm::llvm_filecheck().patterns("filecheck.txt").stdin_buf(pdbutil_result.stdout_utf8()).run();
}
1 change: 1 addition & 0 deletions tests/run-make/pdb-sobjname/main.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
fn main() {}
20 changes: 20 additions & 0 deletions tests/run-make/pdb-sobjname/rmake.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// Check if the pdb file contains an S_OBJNAME entry with the name of the .o file

// This is because it used to be missing in #96475.
// See https://github.com/rust-lang/rust/pull/115704

//@ only-windows-msvc
// Reason: pdb files are unique to this architecture

use run_make_support::{llvm, rustc};

fn main() {
rustc().input("main.rs").arg("-g").crate_name("my_great_crate_name").crate_type("bin").run();

let pdbutil_result = llvm::llvm_pdbutil()
.arg("dump")
.arg("-symbols")
.input("my_great_crate_name.pdb")
.run()
.assert_stdout_contains_regex("S_OBJNAME.+my_great_crate_name.*\\.o");
}

0 comments on commit d86d1ad

Please sign in to comment.