Encode Reverse PInvoke frame stack slot in GCInfo#2484
Conversation
| INT32 slot = decoder.GetReversePInvokeFrameStackSlot(); | ||
| assert(slot != NO_REVERSE_PINVOKE_FRAME); | ||
|
|
||
| *ppPreviousTransitionFrame = (PTR_VOID)-1; |
There was a problem hiding this comment.
Could you also set *ppPreviousTransitionFrame to the address of the slot?
If I understand the JIT logic for the slot offset, it should call GetFramePointer and use that as a base if there is one; otherwise use GetSP() as the base.
Once you do that, could you please also verify under debugger that it computes the right address for both frame pointer and non-framepointer cases?
|
I have stepped through this in debugger. I see two problems:
To fix this problem, the base should be picked based on gcInfoDecoder.GetStackBaseRegister() instead. |
12e3563 to
d1ebc54
Compare
Fix #2115. Set ppPreviousTransitionFrame.
d1ebc54 to
8a3390a
Compare
|
It works significantly better after last fixes, but the test program finishes with 'ASSERT_UNCONDITIONALLY', when trying to "Reset nesting levels for exceptions on this thread that might not be currently in flight". It looks like there is an another issue, but this part works right. |
I do not see this problem. I agree that it is a different issue. Could you please open an issue with repro step details? |
Fix #2115