Skip to content

Commit

Permalink
Auto merge of rust-lang#13114 - weihanglo:trim-paths-explicit-cwd, r=…
Browse files Browse the repository at this point in the history
…epage

fix: explicitly remap current dir by using `.`
  • Loading branch information
bors committed Dec 8, 2023
2 parents 047dc18 + fcd4221 commit 6feabf9
Show file tree
Hide file tree
Showing 2 changed files with 97 additions and 59 deletions.
2 changes: 1 addition & 1 deletion src/cargo/core/compiler/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1230,7 +1230,7 @@ fn trim_paths_args(
// * path dependencies outside workspace root directory
if is_local && pkg_root.strip_prefix(ws_root).is_ok() {
remap.push(ws_root);
remap.push("="); // empty to remap to relative paths.
remap.push("=."); // remap to relative rustc work dir explicitly
} else {
remap.push(pkg_root);
remap.push("=");
Expand Down
154 changes: 96 additions & 58 deletions tests/testsuite/profile_trim_paths.rs
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ fn release_profile_default_to_object() {
[COMPILING] foo v0.0.1 ([CWD])
[RUNNING] `rustc [..]\
-Zremap-path-scope=object \
--remap-path-prefix=[CWD]= \
--remap-path-prefix=[CWD]=. \
--remap-path-prefix=[..]/lib/rustlib/src/rust=/rustc/[..]
[FINISHED] release [..]",
)
Expand Down Expand Up @@ -121,7 +121,7 @@ fn one_option() {
[COMPILING] foo v0.0.1 ([CWD])
[RUNNING] `rustc [..]\
-Zremap-path-scope={option} \
--remap-path-prefix=[CWD]= \
--remap-path-prefix=[CWD]=. \
--remap-path-prefix=[..]/lib/rustlib/src/rust=/rustc/[..]
[FINISHED] dev [..]",
))
Expand Down Expand Up @@ -158,7 +158,7 @@ fn multiple_options() {
[COMPILING] foo v0.0.1 ([CWD])
[RUNNING] `rustc [..]\
-Zremap-path-scope=diagnostics,macro,object \
--remap-path-prefix=[CWD]= \
--remap-path-prefix=[CWD]=. \
--remap-path-prefix=[..]/lib/rustlib/src/rust=/rustc/[..]
[FINISHED] dev [..]",
)
Expand Down Expand Up @@ -193,7 +193,7 @@ fn profile_merge_works() {
[COMPILING] foo v0.0.1 ([CWD])
[RUNNING] `rustc [..]\
-Zremap-path-scope=diagnostics \
--remap-path-prefix=[CWD]= \
--remap-path-prefix=[CWD]=. \
--remap-path-prefix=[..]/lib/rustlib/src/rust=/rustc/[..]
[FINISHED] custom [..]",
)
Expand Down Expand Up @@ -243,7 +243,7 @@ fn registry_dependency() {
[COMPILING] foo v0.0.1 ([CWD])
[RUNNING] `rustc [..]\
-Zremap-path-scope=object \
--remap-path-prefix=[CWD]= \
--remap-path-prefix=[CWD]=. \
--remap-path-prefix=[..]/lib/rustlib/src/rust=/rustc/[..]
[FINISHED] dev [..]
[RUNNING] `target/debug/foo[EXE]`"
Expand Down Expand Up @@ -297,7 +297,7 @@ fn git_dependency() {
[COMPILING] foo v0.0.1 ([CWD])
[RUNNING] `rustc [..]\
-Zremap-path-scope=object \
--remap-path-prefix=[CWD]= \
--remap-path-prefix=[CWD]=. \
--remap-path-prefix=[..]/lib/rustlib/src/rust=/rustc/[..]
[FINISHED] dev [..]
[RUNNING] `target/debug/foo[EXE]`"
Expand Down Expand Up @@ -338,12 +338,12 @@ fn path_dependency() {
[COMPILING] bar v0.0.1 ([..]/cocktail-bar)
[RUNNING] `rustc [..]\
-Zremap-path-scope=object \
--remap-path-prefix=[CWD]= \
--remap-path-prefix=[CWD]=. \
--remap-path-prefix=[..]/lib/rustlib/src/rust=/rustc/[..]
[COMPILING] foo v0.0.1 ([CWD])
[RUNNING] `rustc [..]\
-Zremap-path-scope=object \
--remap-path-prefix=[CWD]= \
--remap-path-prefix=[CWD]=. \
--remap-path-prefix=[..]/lib/rustlib/src/rust=/rustc/[..]
[FINISHED] dev [..]
[RUNNING] `target/debug/foo[EXE]`"
Expand Down Expand Up @@ -392,7 +392,7 @@ fn path_dependency_outside_workspace() {
[COMPILING] foo v0.0.1 ([CWD])
[RUNNING] `rustc [..]\
-Zremap-path-scope=object \
--remap-path-prefix=[CWD]= \
--remap-path-prefix=[CWD]=. \
--remap-path-prefix=[..]/lib/rustlib/src/rust=/rustc/[..]
[FINISHED] dev [..]
[RUNNING] `target/debug/foo[EXE]`"
Expand Down Expand Up @@ -446,40 +446,73 @@ fn diagnostics_works() {
"\
[RUNNING] [..]rustc [..]\
-Zremap-path-scope=diagnostics \
--remap-path-prefix=[CWD]= \
--remap-path-prefix=[CWD]=. \
--remap-path-prefix=[..]/lib/rustlib/src/rust=/rustc/[..]",
)
.run();
}

#[cfg(target_os = "macos")]
#[cargo_test(requires_nm, nightly, reason = "-Zremap-path-scope is unstable")]
fn object_works() {
object_works_helper(|path| {
mod object_works {
use super::*;

fn inspect_debuginfo(path: &std::path::Path) -> Vec<u8> {
std::process::Command::new("nm")
.arg("-pa")
.arg(path)
.output()
.expect("nm works")
.stdout
})
}

#[cargo_test(requires_nm, nightly, reason = "-Zremap-path-scope is unstable")]
fn with_split_debuginfo_off() {
object_works_helper("off", inspect_debuginfo);
}

#[cargo_test(requires_nm, nightly, reason = "-Zremap-path-scope is unstable")]
fn with_split_debuginfo_packed() {
object_works_helper("packed", inspect_debuginfo);
}

#[cargo_test(requires_nm, nightly, reason = "-Zremap-path-scope is unstable")]
fn with_split_debuginfo_unpacked() {
object_works_helper("unpacked", inspect_debuginfo);
}
}

#[cfg(target_os = "linux")]
#[cargo_test(requires_readelf, nightly, reason = "-Zremap-path-scope is unstable")]
fn object_works() {
object_works_helper(|path| {
mod object_works {
use super::*;

fn inspect_debuginfo(path: &std::path::Path) -> Vec<u8> {
std::process::Command::new("readelf")
.arg("-wi")
.arg("--debug-dump=info")
.arg("--debug-dump=no-follow-links") // older version can't recognized but just a warning
.arg(path)
.output()
.expect("readelf works")
.stdout
})
}

#[cargo_test(requires_readelf, nightly, reason = "-Zremap-path-scope is unstable")]
fn with_split_debuginfo_off() {
object_works_helper("off", inspect_debuginfo);
}

#[cargo_test(requires_readelf, nightly, reason = "-Zremap-path-scope is unstable")]
fn with_split_debuginfo_packed() {
object_works_helper("packed", inspect_debuginfo);
}

#[cargo_test(requires_readelf, nightly, reason = "-Zremap-path-scope is unstable")]
fn with_split_debuginfo_unpacked() {
object_works_helper("unpacked", inspect_debuginfo);
}
}

#[cfg(unix)]
fn object_works_helper(run: impl Fn(&std::path::Path) -> Vec<u8>) {
fn object_works_helper(split_debuginfo: &str, run: impl Fn(&std::path::Path) -> Vec<u8>) {
use std::os::unix::ffi::OsStrExt;

let registry_src = paths::home().join(".cargo/registry/src");
Expand All @@ -495,14 +528,19 @@ fn object_works_helper(run: impl Fn(&std::path::Path) -> Vec<u8>) {
let p = project()
.file(
"Cargo.toml",
r#"
&format!(
r#"
[package]
name = "foo"
version = "0.0.1"
[dependencies]
bar = "0.0.1"
"#,
[profile.dev]
split-debuginfo = "{split_debuginfo}"
"#
),
)
.file("src/main.rs", "fn main() { bar::f(); }")
.build();
Expand All @@ -523,34 +561,21 @@ fn object_works_helper(run: impl Fn(&std::path::Path) -> Vec<u8>) {

p.cargo("clean").run();

p.change_file(
"Cargo.toml",
r#"
[package]
name = "foo"
version = "0.0.1"
[dependencies]
bar = "0.0.1"
[profile.dev]
trim-paths = "object"
"#,
);

p.cargo("build --verbose -Ztrim-paths")
.arg("--config")
.arg(r#"profile.dev.trim-paths="object""#)
.masquerade_as_nightly_cargo(&["-Ztrim-paths"])
.with_stderr(&format!(
"\
[COMPILING] bar v0.0.1
[RUNNING] `rustc [..]\
[RUNNING] `rustc [..]-C split-debuginfo={split_debuginfo} [..]\
-Zremap-path-scope=object \
--remap-path-prefix={pkg_remap} \
--remap-path-prefix=[..]/lib/rustlib/src/rust=/rustc/[..]
[COMPILING] foo v0.0.1 ([CWD])
[RUNNING] `rustc [..]\
[RUNNING] `rustc [..]-C split-debuginfo={split_debuginfo} [..]\
-Zremap-path-scope=object \
--remap-path-prefix=[CWD]= \
--remap-path-prefix=[CWD]=. \
--remap-path-prefix=[..]/lib/rustlib/src/rust=/rustc/[..]
[FINISHED] dev [..]",
))
Expand All @@ -560,31 +585,44 @@ fn object_works_helper(run: impl Fn(&std::path::Path) -> Vec<u8>) {
assert!(bin_path.is_file());
let stdout = run(&bin_path);
assert!(memchr::memmem::find(&stdout, rust_src).is_none());
if cfg!(target_os = "macos") {
for line in stdout.split(|c| c == &b'\n') {
let registry = memchr::memmem::find(line, registry_src_bytes).is_none();
let local = memchr::memmem::find(line, pkg_root).is_none();
if registry && local {
continue;
}
for line in stdout.split(|c| c == &b'\n') {
let registry = memchr::memmem::find(line, registry_src_bytes).is_none();
let local = memchr::memmem::find(line, pkg_root).is_none();
if registry && local {
continue;
}

#[cfg(target_os = "macos")]
{
// `OSO` symbols can't be trimmed at this moment.
// See <https://github.com/rust-lang/rust/issues/116948#issuecomment-1793617018>
if memchr::memmem::find(line, b" OSO ").is_some() {
// `OSO` symbols can't be trimmed at this moment.
// See <https://github.com/rust-lang/rust/issues/116948#issuecomment-1793617018>
// TODO: Change to `is_none()` once the issue is resolved.
continue;
}

// on macOS `SO` symbols are embedded in final binaries and should be trimmed.
// See rust-lang/rust#117652.
assert!(
memchr::memmem::find(line, b" SO ").is_some(),
"untrimmed `SO` symbol found"
)
if memchr::memmem::find(line, b" SO ").is_some() {
continue;
}
}

#[cfg(target_os = "linux")]
{
// There is a bug in rustc `-Zremap-path-scope`.
// See rust-lang/rust/pull/118518
if memchr::memmem::find(line, b"DW_AT_comp_dir").is_some() {
continue;
}
if memchr::memmem::find(line, b"DW_AT_GNU_dwo_name").is_some() {
continue;
}
}
} else {
assert!(memchr::memmem::find(&stdout, registry_src_bytes).is_none());
assert!(memchr::memmem::find(&stdout, pkg_root).is_none());

panic!(
"unexpected untrimmed symbol: {}",
String::from_utf8(line.into()).unwrap()
);
}
}

Expand Down Expand Up @@ -700,7 +738,7 @@ fn lldb_works_after_trimmed() {
"\
[RUNNING] `rustc [..]\
-Zremap-path-scope=object \
--remap-path-prefix=[CWD]= \
--remap-path-prefix=[CWD]=. \
--remap-path-prefix=[..]/lib/rustlib/src/rust=/rustc/[..]",
)
.run();
Expand Down

0 comments on commit 6feabf9

Please sign in to comment.