fix: explicitly remap current dir by using .#13114
Merged
bors merged 4 commits intorust-lang:masterfrom Dec 8, 2023
Merged
Conversation
Collaborator
|
r? @ehuss (rustbot has picked a reviewer for you, use r? to override) |
Contributor
|
☔ The latest upstream changes (presumably #13118) made this pull request unmergeable. Please resolve the merge conflicts. |
a714f44 to
9b6cc88
Compare
weihanglo
commented
Dec 6, 2023
src/cargo/core/compiler/mod.rs
Outdated
| 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("=."); // explicitly remap to cwd (rustc working dir). |
Member
Author
There was a problem hiding this comment.
Actually I am not sure if we want to fix this in cargo or in rustc…
Member
Author
There was a problem hiding this comment.
- Run
clang main.c -gdwarf -fdebug-prefix-map="$PWD"= -gsplit-dwarf- on Linux
DW_AT_comp_diris gone, as same as the result from rustc. - on macOS
N_SOandN_OSOare gone, as same as the result from rustc.
- on Linux
- Run
gcc main.c -gdwarf -fdebug-prefix-map="$PWD"= -gsplit-dwarf- on Linux it generates empty
DW_AT_comp_dir. - on macOS it generates
N_SOwith value/.
- on Linux it generates empty
Without bothering whether this should be fixed in rustc or cargo, I would propose we add an . for remapping the current working directory.
For more on gcc/clang remap options, see: https://reproducible-builds.org/docs/build-path/
dd6b7c7 to
39c6aa5
Compare
9c7a261 to
c424d8f
Compare
Member
Author
|
This is ready for review, but somehow a bit convoluted. |
epage
reviewed
Dec 8, 2023
epage
reviewed
Dec 8, 2023
epage
reviewed
Dec 8, 2023
c424d8f to
de33737
Compare
Also demonstarte that on Linux with split-debuginfo on the remap is broken
In https://github.com/rust-lang/rust/blob/87e1447aa/compiler/rustc_codegen_llvm/src/debuginfo/metadata.rs#L856 when the remap result of `work_dir` is an empty string, LLVM won't generate some symbols for root debuginfo node. For example, `N_SO` and `N_OSO` on macOS, or `DW_AT_comp_dir` on Linux when debuginfo is splitted. Precisely, it is observed that when the `DIFile` of compile unit was provied with an empty compilation `Directory` string, LLVM would not emit those symbols for the root DI node. This behavior is not desired, resulting in corrupted debuginfo and degrading debugging experience. This is might not be a bug of `--remap-path-prefix` in rustc, since `-fdebug-prefix-map` in clang 16 could have the same result (`DW_AT_comp_dir` is gone when `work_dir` is remapped to an empty string). However, in gcc 12 `fdebug-prefix-map` will return an absolute work_dir when an empty string occurs. To not bother whether this needs to be fixed in rustc or not, let's fix it by always appending an explicit `.` when `--remap-path-prefix` remaps to relative workspace root a.k.a. where rustc is invoking. For more on gcc/clang remap options, see https://reproducible-builds.org/docs/build-path/
de33737 to
bb86adf
Compare
515f3cd to
fcd4221
Compare
Contributor
|
@bors r+ |
Contributor
Contributor
Contributor
|
☀️ Test successful - checks-actions |
bors
added a commit
to rust-lang-ci/rust
that referenced
this pull request
Dec 9, 2023
Update cargo 12 commits in 9787229614b27854cf73d57ffae430d7c1e6caa4..6feabf94773286928b7d73d0d313c0c5562b66af 2023-12-06 02:29:23 +0000 to 2023-12-08 22:38:37 +0000 - fix: explicitly remap current dir by using `.` (rust-lang/cargo#13114) - Don't rely on mtime to test changes (rust-lang/cargo#13143) - refactor: Pull PackageIdSpec into schema (rust-lang/cargo#13128) - fix: Print rustc messages colored on wincon (rust-lang/cargo#13140) - Add a windows manifest file (rust-lang/cargo#13131) - Avoid writing CACHEDIR.TAG if it already exists (rust-lang/cargo#13132) - re-enable flaky tests thanks to update to `gix-config`. (rust-lang/cargo#11821) (rust-lang/cargo#13130) - fix bash completion in directory with spaces (rust-lang/cargo#13126) - test: re-ignore git auth tests for gitoxide (rust-lang/cargo#13129) - fix(toml): Disallow inheriting of dependency public status (rust-lang/cargo#13125) - re-enable previously disabled tests with Windows-specific fix (rust-lang/cargo#13117) - refactor: Clarify PackageId constructor names (rust-lang/cargo#13123) r? ghost
bors
added a commit
to rust-lang-ci/rust
that referenced
this pull request
Dec 9, 2023
Update cargo 13 commits in 9787229614b27854cf73d57ffae430d7c1e6caa4..66ad359b408ccdf867cceb30cc2dff1ed4afd82d 2023-12-06 02:29:23 +0000 to 2023-12-09 12:30:01 +0000 - chore: downgrade to openssl v1.1.1 (rust-lang/cargo#13144) - fix: explicitly remap current dir by using `.` (rust-lang/cargo#13114) - Don't rely on mtime to test changes (rust-lang/cargo#13143) - refactor: Pull PackageIdSpec into schema (rust-lang/cargo#13128) - fix: Print rustc messages colored on wincon (rust-lang/cargo#13140) - Add a windows manifest file (rust-lang/cargo#13131) - Avoid writing CACHEDIR.TAG if it already exists (rust-lang/cargo#13132) - re-enable flaky tests thanks to update to `gix-config`. (rust-lang/cargo#11821) (rust-lang/cargo#13130) - fix bash completion in directory with spaces (rust-lang/cargo#13126) - test: re-ignore git auth tests for gitoxide (rust-lang/cargo#13129) - fix(toml): Disallow inheriting of dependency public status (rust-lang/cargo#13125) - re-enable previously disabled tests with Windows-specific fix (rust-lang/cargo#13117) - refactor: Clarify PackageId constructor names (rust-lang/cargo#13123)
bors
added a commit
to rust-lang-ci/rust
that referenced
this pull request
Dec 12, 2023
Update cargo 20 commits in 9787229614b27854cf73d57ffae430d7c1e6caa4..1aa9df1a5be205cce621f0bc0ea6062a5e22a98c 2023-12-06 02:29:23 +0000 to 2023-12-12 14:52:31 +0000 - crates-io: Add support for other 2xx HTTP status codes (rust-lang/cargo#13158) - Remove the deleted feature test_2018_feature from the test (rust-lang/cargo#13156) - refactor(schema): Remove reliance on cargo types (rust-lang/cargo#13154) - fix(toml)!: Disallow `[lints]` in virtual workspaces (rust-lang/cargo#13155) - Limit exported-private-dependencies lints to libraries (rust-lang/cargo#13135) - chore: update to gix-index@0.27.1 (rust-lang/cargo#13148) - Update curl-sys to bring in curl 8.5.0 (rust-lang/cargo#13147) - chore: downgrade to openssl v1.1.1 (rust-lang/cargo#13144) - fix: explicitly remap current dir by using `.` (rust-lang/cargo#13114) - Don't rely on mtime to test changes (rust-lang/cargo#13143) - refactor: Pull PackageIdSpec into schema (rust-lang/cargo#13128) - fix: Print rustc messages colored on wincon (rust-lang/cargo#13140) - Add a windows manifest file (rust-lang/cargo#13131) - Avoid writing CACHEDIR.TAG if it already exists (rust-lang/cargo#13132) - re-enable flaky tests thanks to update to `gix-config`. (rust-lang/cargo#11821) (rust-lang/cargo#13130) - fix bash completion in directory with spaces (rust-lang/cargo#13126) - test: re-ignore git auth tests for gitoxide (rust-lang/cargo#13129) - fix(toml): Disallow inheriting of dependency public status (rust-lang/cargo#13125) - re-enable previously disabled tests with Windows-specific fix (rust-lang/cargo#13117) - refactor: Clarify PackageId constructor names (rust-lang/cargo#13123)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What does this PR try to resolve?
In https://github.com/rust-lang/rust/blob/87e1447aa/compiler/rustc_codegen_llvm/src/debuginfo/metadata.rs#L856
when the remap result of
work_diris an empty string,LLVM won't generate some symbols for root debuginfo node.
For example,
N_SOandN_OSOon macOS,or
DW_AT_comp_dirandDW_AT_GNU_dwo_namewhen debuginfo is splitted.Precisely, it is observed that when the
DIFileof a root DI node of acompile unit
DIFilewas provied with an emptyDirectorystring,LLVM would not emit those symbols for the root DI node.
This behavior is not desired,
resulting in corrupted debuginfo and degrading debugging experience.
This is might not be a bug of
--remap-path-prefixin rustc,since
-fdebug-prefix-mapin clang 16 could have the same result(
DW_AT_comp_diris gone whenwork_diris remapped to an empty string).However, in gcc 12
fdebug-prefix-mapwill return an absolute work_dirwhen an empty string occurs.
To not bother whether this needs to be fixed in rustc or not,
let's fix it by always appending an explicit
.when
--remap-path-prefixremaps to relative workspace roota.k.a. where rustc is invoking.
How should we test and review this PR?
Build rustc
Without a possible fix in rustc like rust-lang/rust#118518, the debuginfo is not corrputed even we dont remap to
.explicitly. Therefore, to test it manually you need to build rustc from rust-lang/rust#118518. Generally,Then cargo +stage1 build is available, and you can build package via
After build a package, I would recommend playing with debuggers, either gdb or lldb.
After remapping, supposedly you need to launch the debugger from the same location the build kicked off, usually the workspace root.
Please help verify that source files still show, and breakpoints can pause/resume at either local or registry packages.
I don't want to build rustc
You can use either
objdump -Wiorreadelf -wiordsymutil -sto inspect debug symbols, though it doesn't help much.Additional information
It would be awesome if somebody can help verify the behavior on Windows 😆.