Handle 8-byte call in VPIC snippet for nestmates #3005
Merged
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.
When x86 PicBuilder is carrying out a direct call to a private method of
a nestmate, it sets the return address so that the call will return into
the code in the VPIC snippet, which in the case of a virtual dispatch
would be something like the following:
In particular, the callee should return to the jmp instruction, whose
address has been calculated as 7 + the address of the call instruction.
But the call is sometimes one byte longer. The variability is now dealt
with as follows:
When overwriting the call, PicBuilder now writes a value that works
for both 7- and 8-byte offsets to the jmp instruction.
When doing direct dispatch for nestmates, PicBuilder now detects the
offset to jmp, in order to compute the correct return address.
Fixes #2955