Fix interpreter passing managed "this" in presence of return buffer#117661
Merged
janvorli merged 1 commit intodotnet:mainfrom Jul 16, 2025
Merged
Fix interpreter passing managed "this" in presence of return buffer#117661janvorli merged 1 commit intodotnet:mainfrom
janvorli merged 1 commit intodotnet:mainfrom
Conversation
The CallStubGenerator is using the native x64 Windows calling convention for the case when both "this" and "return buffer" arguments are passed to native callees. However, the CLR ABI diverges from this convention. While the native one passes the return buffer first and the this pointer second, the CLR ABI always passes the "this" pointer first. This fixes a number of failures on the runtime startup path when running interpreted.
Contributor
|
Tagging subscribers to this area: @BrzVlad, @janvorli, @kg |
12 tasks
Contributor
There was a problem hiding this comment.
Pull Request Overview
This PR updates the CallStubGenerator to use the CLR ABI ordering for the this pointer when a return buffer is present, ensuring this is always passed in the first argument register rather than following the native Windows x64 convention.
- Removes the special-case Windows/AMD64 branch that swapped the registers when a return buffer was present.
- Always sets
m_r1to 0 for thethispointer under the CLR ABI. - Updates the comment to clarify the CLR ABI behavior.
kg
approved these changes
Jul 15, 2025
This was referenced Jul 15, 2025
Open
Member
Author
|
/ba-g the Android build timeouts are a known issue |
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
The CallStubGenerator is using the native x64 Windows calling convention for the case when both "this" and "return buffer" arguments are passed to native callees. However, the CLR ABI diverges from this convention. While the native one passes the return buffer first and the this pointer second, the CLR ABI always passes the "this" pointer first.
This fixes a number of failures on the runtime startup path when running interpreted.