Repository navigation
Conversation
This was referenced Oct 27, 2026
Contributor
CI Test ResultsRun: #40698944892 | Commit:
Status Overview
Legend: ✅ passed | ❌ failed | ⚪ skipped | 🚫 cancelled Summary: Total: 32 | Passed: 32 | Failed: 0 Updated: 2026-10-28 14:06:50 UTC |
Contributor
…nto paul.fournillon/fix-unwind-failure-encoding
2 of 3 tasks
This branch has not been deployed
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 do?:
Preserve native and Java ancestry during ARM64 CPU and wall profiling. Correct DWARF return-address rules, account for temporary C1 argument/save areas and JNI wrapper frame phases, and recover saved register contexts at Linux vDSO signal returns.
Add deterministic native regressions, a focused GraalVM native-transition regression, and remount chaos coverage shared with the standalone stress harness.
Motivation:
Native leaves can keep their return address in LR rather than a stack slot. Applying the wrong initial or restored DWARF rule loses callers or invents a caller from stale stack contents. C1 runtime calls can also leave temporary argument/save areas outside the compiled frame size. Object-arraycopy subtype calls keep two such areas live.
JNI wrappers restore SP before checking pending exceptions. Applying the full frame size in that window skips the real caller. A bounded instruction decoder recovers the remaining saved pair or live LR according to the interrupted phase. The prologue also accounts for the saved pair before local stack allocation.
Linux ARM64 omits CFI for its vDSO signal-return trampoline. Nested CPU and wall signals need its saved exact PC and register context to resume a correct walk. Linux also supports custom signal restorers; unsupported restorers without signal CFI must stop with truthful truncation.
Additional Notes:
rt_sigreturnsequence without signal CFI stops with truncation. Signal CFI takes precedence; unrelated syscalls retain normal unwinding.How to test the change?:
./.claude/commands/build-and-summarize :ddprof-lib:gtestDebug JAVA_TEST_HOME=/path/to/graalvm \ ./.claude/commands/build-and-summarize :ddprof-test:testDebug \ '-Ptests=*NativeUnwindRegressionTest' -Pskip-gtest -PkeepJFRs JAVA_TEST_HOME=/path/to/graalvm \ ./.claude/commands/build-and-summarize :ddprof-test:testDebug \ -Ptests=VirtualThreadCarrierChaosTest -Pskip-gtest -PkeepJFRsValidation for signed
bbe09e6d8, based on #887 at50d2704d2.bbe09e6d8The JNI-wrapper production-walker regression fails on the prior production code at the pending allocation and three epilogue phases. A separate diagnostic captured the incorrect full-frame advance after SP restoration. The phase defect is confirmed; the historical CI recording did not retain native registers, so its exact interrupted PC remains unproven. Strict Java workload and assertion bytes are unchanged by this correction.
The prior ARM64 release allocator failure is tracked separately by #911. Its test/probe changes do not overlap this delta.
Both GraalVM selections include the unchanged remount chaos checks. Before consolidation, four C1 regressions failed. Independent review exposed two additional cases, each reproduced before correction: the double-save arraycopy layout and a custom restorer without a registered library.
For Datadog employees: