debuginfo: emit DW_TAG_call_site entries#154200
debuginfo: emit DW_TAG_call_site entries#154200rust-bors[bot] merged 1 commit intorust-lang:mainfrom
Conversation
74a48c8 to
79e7936
Compare
This comment has been minimized.
This comment has been minimized.
|
r? @JohnTitor rustbot has assigned @JohnTitor. Use Why was this reviewer chosen?The reviewer was selected based on:
|
79e7936 to
84ad0ab
Compare
|
This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed. Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers. |
84ad0ab to
9677d7a
Compare
|
@rustbot reroll |
|
Thank you for your contribution! 🙇 @bors r+ |
| ASSERT_DIFLAG_VALUE(FlagNonTrivial, 1 << 26); | ||
| ASSERT_DIFLAG_VALUE(FlagBigEndian, 1 << 27); | ||
| ASSERT_DIFLAG_VALUE(FlagLittleEndian, 1 << 28); | ||
| static_assert(DINode::DIFlags::FlagAllCallsDescribed == (1 << 29)); |
There was a problem hiding this comment.
I have filed a PR upstream llvm/llvm-project#188477 to add this flag bit to the C header.
There was a problem hiding this comment.
Oh I forgot to link my upstream PR to add the flag. Yours appears to be format changes only?
There was a problem hiding this comment.
Okay... so my clangd automatically apply those formatting and apparently git-clang-format agreed with it.
|
@bors r- |
|
Sorry, fat finger. @bors r+ |
…r=dingxiangfei2009 debuginfo: emit DW_TAG_call_site entries Set `FlagAllCallsDescribed` on function definition DIEs so LLVM emits DW_TAG_call_site entries, letting debuggers and analysis tools track tail calls.
…uwer Rollup of 22 pull requests Successful merges: - #153049 (Add `-Zsanitize=kernel-hwaddress`) - #153702 (Add macro matcher for `guard` fragment specifier) - #154200 (debuginfo: emit DW_TAG_call_site entries) - #154263 (interpret: when passing an argument fails, point at that argument) - #154269 (miri recursive validation: only check one layer deep) - #154313 (Init `self_decl` with a correct visibility) - #154344 (Update LLVM to 22.1.2) - #154348 (re-enable enzyme/autodiff builds on dist-aarch64-apple) - #154351 (Overhaul `Erasable` impls) - #154363 (delegation: fix zero-args nested delegation ICE) - #154364 (delegation: don't propagate synthetic params, remove lifetime hacks) - #151148 (Add functions to `GrowableBitSet`) - #154090 (Move tests in the statics category) - #154112 (some `tests/ui/macros` cleanup) - #154131 (begin `tests/ui/structs-enums` cleanup) - #154216 (unstably mark `NonNull::with_exposed_provenance` as const) - #154230 (Moved and rename issue-50411 to tests/ui/mir/inliner-double-elaborate) - #154233 (Move ui/issues tests to relevant subdirectories) - #154288 (Fix typo in doc comment for `char::to_titlecase`) - #154355 (delegation: add const type ICE test) - #154358 (install-template.sh: Optimize by using Bourne shell builtins.) - #154360 (fromrangeiter-overflow-checks: accept optional `signext` for argument)
…uwer Rollup of 22 pull requests Successful merges: - rust-lang/rust#153049 (Add `-Zsanitize=kernel-hwaddress`) - rust-lang/rust#153702 (Add macro matcher for `guard` fragment specifier) - rust-lang/rust#154200 (debuginfo: emit DW_TAG_call_site entries) - rust-lang/rust#154263 (interpret: when passing an argument fails, point at that argument) - rust-lang/rust#154269 (miri recursive validation: only check one layer deep) - rust-lang/rust#154313 (Init `self_decl` with a correct visibility) - rust-lang/rust#154344 (Update LLVM to 22.1.2) - rust-lang/rust#154348 (re-enable enzyme/autodiff builds on dist-aarch64-apple) - rust-lang/rust#154351 (Overhaul `Erasable` impls) - rust-lang/rust#154363 (delegation: fix zero-args nested delegation ICE) - rust-lang/rust#154364 (delegation: don't propagate synthetic params, remove lifetime hacks) - rust-lang/rust#151148 (Add functions to `GrowableBitSet`) - rust-lang/rust#154090 (Move tests in the statics category) - rust-lang/rust#154112 (some `tests/ui/macros` cleanup) - rust-lang/rust#154131 (begin `tests/ui/structs-enums` cleanup) - rust-lang/rust#154216 (unstably mark `NonNull::with_exposed_provenance` as const) - rust-lang/rust#154230 (Moved and rename issue-50411 to tests/ui/mir/inliner-double-elaborate) - rust-lang/rust#154233 (Move ui/issues tests to relevant subdirectories) - rust-lang/rust#154288 (Fix typo in doc comment for `char::to_titlecase`) - rust-lang/rust#154355 (delegation: add const type ICE test) - rust-lang/rust#154358 (install-template.sh: Optimize by using Bourne shell builtins.) - rust-lang/rust#154360 (fromrangeiter-overflow-checks: accept optional `signext` for argument)
Revert "Rollup merge of #154200 - resrever:enable-dwarf-call-sites, r=dingxiangfei2009"
|
FTR this is being reverted in #154468. |
Revert "Rollup merge of #154200 - resrever:enable-dwarf-call-sites, r=dingxiangfei2009" This reverts commit 2f16030, reversing changes made to 6e3c174. Debugging perf. hit from #154384. The binary size hits from #154468 (comment) were due to this PR, not all of the copmile-time hits though.
Set `FlagAllCallsDescribed` on function definition DIEs when optimizations are enabled, so LLVM emits DW_TAG_call_site entries. This lets debuggers and analysis tools track tail calls. Unlike the previous attempt (rust-lang#154200, reverted in rust-lang#154468), this gates the flag on opt-level != 0, matching Clang's behavior. At -O0 no tail-call optimization occurs, so the debugger can reconstruct the full call stack without call site entries. This eliminates the ~2% binary size and ~0.3% compile-time regressions that were observed in debug (unoptimized) builds. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Thank you for bringing this to my attention. I would have missed it without your message. This is my first PR to rust-lang, and I'm learning a lot about the process! I'll make a follow-up PR to gate this behind optimized debug builds, since tailcalls will only occur with optimization. That should soften the perf impact in the reverted PR. Looks like in the perf suite only ripgrep does optimized debug builds, so the rest shouldn't see a perf diff, and those ripgrep will be more debuggable. |
Set
FlagAllCallsDescribedon function definition DIEs so LLVM emits DW_TAG_call_site entries, letting debuggers and analysis tools track tail calls.