Conversation
Use the caller shadow stack virtual IP for the interpreter continuation transition frame and exercise both cold and warm FCall paths. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 8a57fff8-6c30-4d3c-ac72-a80975122a96
|
Azure Pipelines: Successfully started running 3 pipeline(s). 13 pipeline(s) were filtered out due to trigger conditions. There may be pipelines that require an authorized user to comment /azp run to run. |
|
Tagging subscribers to this area: @steveisok, @tommcdon, @dotnet/dotnet-diag |
Add the active re-enable tracker beside the project-level WebAssembly exclusion. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 8a57fff8-6c30-4d3c-ac72-a80975122a96
|
This got opened too early, fixing |
There was a problem hiding this comment.
Copilot review overview
🔵 Needs a closer look
The transition-frame virtual IP should be derived lazily during stack inspection.
Review tier: Lite
Findings: None
What changed in this PR
Fixes Wasm async continuation stack walking and adds focused regression coverage.
Changes:
- Updates Wasm continuation transition-frame metadata.
- Adds a Wasm-specific async test runner.
- Runs cold and warm diagnostic stack-trace scenarios.
| File | Description |
|---|---|
src/tests/async/diagnostic-ip-stacktrace/diagnostic-ip-stacktrace.cs |
Runs the diagnostic scenario twice. |
src/tests/async/async.csproj |
Keeps the general async runner disabled on Wasm. |
src/tests/async/async-wasm.csproj |
Adds the focused Wasm runner. |
src/coreclr/vm/interpexec.cpp |
Updates the Wasm continuation transition frame return address. |
This reverts commit b3b2ec9.
Guard synchronous-wait tests with the multithreading capability, quarantine the two exact unsupported Wasm cases, and preserve all native coverage. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 8a57fff8-6c30-4d3c-ac72-a80975122a96
|
Azure Pipelines: Successfully started running 3 pipeline(s). 13 pipeline(s) were filtered out due to trigger conditions. There may be pipelines that require an authorized user to comment /azp run to run. |
|
Tagging subscribers to 'arch-wasm': @lewing, @pavelsavara |
| transitionBlock.m_StackPointer = callersStackPointer; | ||
| transitionBlock.m_ReturnAddress = (TADDR)&AsyncHelpers_ResumeInterpreterContinuation; | ||
| // Keep the return address consistent with the managed R2R frame represented by the caller's stack pointer. | ||
| transitionBlock.m_ReturnAddress = GetWasmVirtualIPFromStackPointer(callersStackPointer); |
There was a problem hiding this comment.
This will be a performance problem, but this will fix CI for now. For some reason, I kept hitting issues where I couldn't get this to repro on my local machine, but the fix looks reasonable for now.
Enable the full runner, gate multithreading-dependent tests by capability, and quarantine only exact unsupported Wasm scenarios. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 8a57fff8-6c30-4d3c-ac72-a80975122a96
Keep the shared TestLibrary reference on standalone async children while relying on the parent test targets for the merged runner. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 8a57fff8-6c30-4d3c-ac72-a80975122a96
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
Unresolved critical and moderate test-gating issues remain in pinvoke.cs and simple-eh.cs.
Get a fresh assessment by requesting another Copilot review.
Review tier: Lite
Findings: 1
Open (1)
Resolved since last review (2)
| public class Async2PInvoke | ||
| { | ||
| [ActiveIssue("https://github.com/dotnet/runtime/issues/124219", typeof(TestLibrary.PlatformDetection), nameof(TestLibrary.PlatformDetection.IsWasm))] | ||
| [Fact] |

Summary
ResumeInterpreterContinuationtransition frameAsync2PInvoke.TestEntryPointunder [wasm][coreclr] GetUnmanagedCallersOnlyThunk: unknown thunk for unmanaged callers only method #124219 andAsync2CollectibleAlcunder Browser WASM collectible ALC test has no loadable assembly path #134001StringComparer.OrdinalRoot cause
The Wasm FCall supplied the managed caller's R2R shadow stack pointer but used the native
ResumeInterpreterContinuationentrypoint as the transition block return address. On the warm path, stack walking paired those unrelated values and failed theGetWasmVirtualIPFromStackPointer(sp) == controlPCinvariant.#133768 also enabled the full
src/tests/asyncrunner on Wasm. Many tests intentionally block on incomplete tasks and therefore require multithreading; those tests now usePlatformDetection.IsMultithreadingSupportedrather than disabling the whole runner.Validation
Resolves #133931
Note
This pull request description was generated with GitHub Copilot assistance.