Auto merge of #131917 - jieyouxu:rmake-clang, r=Kobzol
Run the full stage 2 `run-make` test suite in `x86_64-gnu-debug` Run the full `run-make` test suite in the `x86_64-gnu-debug` CI job. This is currently the *only* CI job where `//@ needs-force-clang-based-test` will be satisfied, so some `run-make` tests will literally never be run otherwise. Before this PR, the CI job only ran `run-make` tests which contains the substring `clang` in its test name, which is both (1) a footgun because it's very easy to forget and (2) it masks tests that would otherwise fail (even failing to compile) because the test is skipped if doesn't have a `clang` in its test name. With the environment of `x86_64-gnu-debug`, two `run-make` tests failed before this PR: 1. `tests/run-make/issue-84395-lto-embed-bitcode/rmake.rs`: this was broken for a long time because `objcopy` in llvm bin tools was renamed to `llvm-objcopy`. This test was converted into a rmake.rs test, rather straight forward. 2. `tests/run-make/cross-lang-lto-riscv-abi/rmake.rs`: this was broken for a long time and never worked. The old version inspected human-readable output of `llvm-readobj --file-header` looking for substring `EF_RISCV_FLOAT_ABI_DOUBLE`, but the human-readable output will only contain something like `Flags: 0x5, RVC, double-float ABI`, hence it will never match. This test was fixed by instead using the `object` crate to actually decode the ELF headers looking for the specific `e_flags` based on reading the RISCV ELF psABI docs. This PR is best reviewed commit-by-commit, two commits setup the support library for functionality and two commits are for each of the failing `run-make` tests. I had to bump the `x86_64-gnu-debug` job to be ran with a runner with larger disk space. Part of #132034. try-job: x86_64-gnu-debug
This commit is contained in:
commit
b188577f14
9 changed files with 183 additions and 46 deletions
|
|
@ -222,6 +222,12 @@ pub struct CompletedProcess {
|
|||
}
|
||||
|
||||
impl CompletedProcess {
|
||||
#[must_use]
|
||||
#[track_caller]
|
||||
pub fn stdout(&self) -> Vec<u8> {
|
||||
self.output.stdout.clone()
|
||||
}
|
||||
|
||||
#[must_use]
|
||||
#[track_caller]
|
||||
pub fn stdout_utf8(&self) -> String {
|
||||
|
|
@ -234,12 +240,24 @@ impl CompletedProcess {
|
|||
String::from_utf8_lossy(&self.output.stdout.clone()).to_string()
|
||||
}
|
||||
|
||||
#[must_use]
|
||||
#[track_caller]
|
||||
pub fn stderr(&self) -> Vec<u8> {
|
||||
self.output.stderr.clone()
|
||||
}
|
||||
|
||||
#[must_use]
|
||||
#[track_caller]
|
||||
pub fn stderr_utf8(&self) -> String {
|
||||
String::from_utf8(self.output.stderr.clone()).expect("stderr is not valid UTF-8")
|
||||
}
|
||||
|
||||
#[must_use]
|
||||
#[track_caller]
|
||||
pub fn invalid_stderr_utf8(&self) -> String {
|
||||
String::from_utf8_lossy(&self.output.stderr.clone()).to_string()
|
||||
}
|
||||
|
||||
#[must_use]
|
||||
pub fn status(&self) -> ExitStatus {
|
||||
self.output.status
|
||||
|
|
|
|||
|
|
@ -60,6 +60,18 @@ pub fn llvm_pdbutil() -> LlvmPdbutil {
|
|||
LlvmPdbutil::new()
|
||||
}
|
||||
|
||||
/// Construct a new `llvm-dis` invocation. This assumes that `llvm-dis` is available
|
||||
/// at `$LLVM_BIN_DIR/llvm-dis`.
|
||||
pub fn llvm_dis() -> LlvmDis {
|
||||
LlvmDis::new()
|
||||
}
|
||||
|
||||
/// Construct a new `llvm-objcopy` invocation. This assumes that `llvm-objcopy` is available
|
||||
/// at `$LLVM_BIN_DIR/llvm-objcopy`.
|
||||
pub fn llvm_objcopy() -> LlvmObjcopy {
|
||||
LlvmObjcopy::new()
|
||||
}
|
||||
|
||||
/// A `llvm-readobj` invocation builder.
|
||||
#[derive(Debug)]
|
||||
#[must_use]
|
||||
|
|
@ -123,6 +135,20 @@ pub struct LlvmPdbutil {
|
|||
cmd: Command,
|
||||
}
|
||||
|
||||
/// A `llvm-dis` invocation builder.
|
||||
#[derive(Debug)]
|
||||
#[must_use]
|
||||
pub struct LlvmDis {
|
||||
cmd: Command,
|
||||
}
|
||||
|
||||
/// A `llvm-objcopy` invocation builder.
|
||||
#[derive(Debug)]
|
||||
#[must_use]
|
||||
pub struct LlvmObjcopy {
|
||||
cmd: Command,
|
||||
}
|
||||
|
||||
crate::macros::impl_common_helpers!(LlvmReadobj);
|
||||
crate::macros::impl_common_helpers!(LlvmProfdata);
|
||||
crate::macros::impl_common_helpers!(LlvmFilecheck);
|
||||
|
|
@ -132,6 +158,8 @@ crate::macros::impl_common_helpers!(LlvmNm);
|
|||
crate::macros::impl_common_helpers!(LlvmBcanalyzer);
|
||||
crate::macros::impl_common_helpers!(LlvmDwarfdump);
|
||||
crate::macros::impl_common_helpers!(LlvmPdbutil);
|
||||
crate::macros::impl_common_helpers!(LlvmDis);
|
||||
crate::macros::impl_common_helpers!(LlvmObjcopy);
|
||||
|
||||
/// Generate the path to the bin directory of LLVM.
|
||||
#[must_use]
|
||||
|
|
@ -390,3 +418,41 @@ impl LlvmPdbutil {
|
|||
self
|
||||
}
|
||||
}
|
||||
|
||||
impl LlvmObjcopy {
|
||||
/// Construct a new `llvm-objcopy` invocation. This assumes that `llvm-objcopy` is available
|
||||
/// at `$LLVM_BIN_DIR/llvm-objcopy`.
|
||||
pub fn new() -> Self {
|
||||
let llvm_objcopy = llvm_bin_dir().join("llvm-objcopy");
|
||||
let cmd = Command::new(llvm_objcopy);
|
||||
Self { cmd }
|
||||
}
|
||||
|
||||
/// Dump the contents of `section` into the file at `path`.
|
||||
#[track_caller]
|
||||
pub fn dump_section<S: AsRef<str>, P: AsRef<Path>>(
|
||||
&mut self,
|
||||
section_name: S,
|
||||
path: P,
|
||||
) -> &mut Self {
|
||||
self.cmd.arg("--dump-section");
|
||||
self.cmd.arg(format!("{}={}", section_name.as_ref(), path.as_ref().to_str().unwrap()));
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
impl LlvmDis {
|
||||
/// Construct a new `llvm-dis` invocation. This assumes that `llvm-dis` is available
|
||||
/// at `$LLVM_BIN_DIR/llvm-dis`.
|
||||
pub fn new() -> Self {
|
||||
let llvm_dis = llvm_bin_dir().join("llvm-dis");
|
||||
let cmd = Command::new(llvm_dis);
|
||||
Self { cmd }
|
||||
}
|
||||
|
||||
/// Provide an input file.
|
||||
pub fn input<P: AsRef<Path>>(&mut self, path: P) -> &mut Self {
|
||||
self.cmd.arg(path.as_ref());
|
||||
self
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -49,14 +49,17 @@ pub use external_deps::{c_build, cc, clang, htmldocck, llvm, python, rustc, rust
|
|||
|
||||
// These rely on external dependencies.
|
||||
pub use cc::{cc, cxx, extra_c_flags, extra_cxx_flags, Cc};
|
||||
pub use c_build::{build_native_dynamic_lib, build_native_static_lib, build_native_static_lib_optimized, build_native_static_lib_cxx};
|
||||
pub use c_build::{
|
||||
build_native_dynamic_lib, build_native_static_lib, build_native_static_lib_cxx,
|
||||
build_native_static_lib_optimized,
|
||||
};
|
||||
pub use cargo::cargo;
|
||||
pub use clang::{clang, Clang};
|
||||
pub use htmldocck::htmldocck;
|
||||
pub use llvm::{
|
||||
llvm_ar, llvm_bcanalyzer, llvm_dwarfdump, llvm_filecheck, llvm_nm, llvm_objdump, llvm_profdata,
|
||||
llvm_readobj, LlvmAr, LlvmBcanalyzer, LlvmDwarfdump, LlvmFilecheck, LlvmNm, LlvmObjdump,
|
||||
LlvmProfdata, LlvmReadobj,
|
||||
llvm_ar, llvm_bcanalyzer, llvm_dis, llvm_dwarfdump, llvm_filecheck, llvm_nm, llvm_objcopy,
|
||||
llvm_objdump, llvm_profdata, llvm_readobj, LlvmAr, LlvmBcanalyzer, LlvmDis, LlvmDwarfdump,
|
||||
LlvmFilecheck, LlvmNm, LlvmObjcopy, LlvmObjdump, LlvmProfdata, LlvmReadobj,
|
||||
};
|
||||
pub use python::python_command;
|
||||
pub use rustc::{aux_build, bare_rustc, rustc, rustc_path, Rustc};
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ run-make/branch-protection-check-IBT/Makefile
|
|||
run-make/cat-and-grep-sanity-check/Makefile
|
||||
run-make/extern-fn-reachable/Makefile
|
||||
run-make/incr-add-rust-src-component/Makefile
|
||||
run-make/issue-84395-lto-embed-bitcode/Makefile
|
||||
run-make/jobserver-error/Makefile
|
||||
run-make/libs-through-symlinks/Makefile
|
||||
run-make/split-debuginfo/Makefile
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue