-
Notifications
You must be signed in to change notification settings - Fork 5.2k
JIT: Skip GC info for trivial async calls for x86 #121941
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
For x86 we only report GC pointers live in callee save registers, and we also avoid reporting any trivial call. There is compensating code upstream of the GC reporting that returns for trivial calls, but this code did not account for the GC ref returned for async continuations. Thus it was possible that we made it into the GC encoder with a trivial call and then hit an assert.
|
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
This PR fixes an assertion failure in the GC encoder for x86 when processing trivial async calls. The issue occurred because the code that masks out return registers for GC reporting only accounted for the standard integer return register (EAX), but not the long return register pair (EDX:EAX) or the async continuation return register (ECX). The fix extends the mask to include all three register sets.
|
PTAL @dotnet/jit-contrib. |
The fix presumably merged in #121941.
The fix presumably merged in #121941. Cc @dotnet/ilc-contrib
For x86 we only report GC pointers live in callee save registers, and we also avoid reporting any trivial call.
There is compensating code upstream of the GC reporting that returns for trivial calls, but this code did not account for the GC ref returned for async continuations. Thus it was possible that we made it into the GC encoder with a trivial call and then hit an assert.
Fix #121872