Skip to content

debuginfo: emit DW_TAG_call_site entries#154200

Merged
rust-bors[bot] merged 1 commit intorust-lang:mainfrom
resrever:enable-dwarf-call-sites
Mar 25, 2026
Merged

debuginfo: emit DW_TAG_call_site entries#154200
rust-bors[bot] merged 1 commit intorust-lang:mainfrom
resrever:enable-dwarf-call-sites

Conversation

@resrever
Copy link
Copy Markdown
Contributor

Set FlagAllCallsDescribed on function definition DIEs so LLVM emits DW_TAG_call_site entries, letting debuggers and analysis tools track tail calls.

@rustbot rustbot added A-LLVM Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues. S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Mar 22, 2026
@resrever resrever force-pushed the enable-dwarf-call-sites branch from 74a48c8 to 79e7936 Compare March 22, 2026 03:58
@rust-log-analyzer

This comment has been minimized.

@resrever resrever marked this pull request as ready for review March 22, 2026 12:16
@rustbot rustbot added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Mar 22, 2026
@rustbot rustbot removed the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label Mar 22, 2026
@rustbot
Copy link
Copy Markdown
Collaborator

rustbot commented Mar 22, 2026

r? @JohnTitor

rustbot has assigned @JohnTitor.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: compiler, debuginfo
  • compiler, debuginfo expanded to 69 candidates
  • Random selection from 13 candidates

@resrever resrever force-pushed the enable-dwarf-call-sites branch from 79e7936 to 84ad0ab Compare March 22, 2026 12:38
@rustbot
Copy link
Copy Markdown
Collaborator

rustbot commented Mar 22, 2026

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.

@resrever resrever force-pushed the enable-dwarf-call-sites branch from 84ad0ab to 9677d7a Compare March 22, 2026 12:42
@JohnTitor
Copy link
Copy Markdown
Member

@rustbot reroll

@dingxiangfei2009
Copy link
Copy Markdown
Contributor

Thank you for your contribution! 🙇

@bors r+

@rust-bors
Copy link
Copy Markdown
Contributor

rust-bors bot commented Mar 25, 2026

📌 Commit 9677d7a has been approved by dingxiangfei2009

It is now in the queue for this repository.

@rust-bors rust-bors bot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 25, 2026
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));
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have filed a PR upstream llvm/llvm-project#188477 to add this flag bit to the C header.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh I forgot to link my upstream PR to add the flag. Yours appears to be format changes only?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay... so my clangd automatically apply those formatting and apparently git-clang-format agreed with it.

@dingxiangfei2009
Copy link
Copy Markdown
Contributor

@bors r-

@rust-bors rust-bors bot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. labels Mar 25, 2026
@dingxiangfei2009
Copy link
Copy Markdown
Contributor

Sorry, fat finger.

@bors r+

@rust-bors
Copy link
Copy Markdown
Contributor

rust-bors bot commented Mar 25, 2026

📌 Commit 9677d7a has been approved by dingxiangfei2009

It is now in the queue for this repository.

@rust-bors rust-bors bot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Mar 25, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Mar 25, 2026
…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.
rust-bors bot pushed a commit that referenced this pull request Mar 25, 2026
…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)
@rust-bors rust-bors bot merged commit 2f16030 into rust-lang:main Mar 25, 2026
11 checks passed
@resrever resrever deleted the enable-dwarf-call-sites branch March 25, 2026 23:15
github-actions bot pushed a commit to rust-lang/miri that referenced this pull request Mar 26, 2026
…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)
rust-bors bot pushed a commit that referenced this pull request Mar 27, 2026
…=dingxiangfei2009"

This reverts commit 2f16030, reversing
changes made to 6e3c174.
rust-bors bot pushed a commit that referenced this pull request Mar 27, 2026
Revert "Rollup merge of #154200 - resrever:enable-dwarf-call-sites, r=dingxiangfei2009"
Kobzol added a commit to Kobzol/rust that referenced this pull request Mar 27, 2026
…-sites, r=dingxiangfei2009"

This reverts commit 2f16030, reversing
changes made to 6e3c174.
@RalfJung
Copy link
Copy Markdown
Member

FTR this is being reverted in #154468.

rust-bors bot pushed a commit that referenced this pull request Mar 28, 2026
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.
resrever added a commit to resrever/rust that referenced this pull request Mar 29, 2026
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>
@resrever
Copy link
Copy Markdown
Contributor Author

FTR this is being reverted in #154468.

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-LLVM Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues. S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants