RFR 8227040 [lworld][c1] Must repair stack frame before calling buffer_value_args

Ioi Lam ioi.lam at oracle.com
Wed Jul 3 17:32:07 UTC 2019


Hi Tobias

Thanks for the review. I've fixed the comments and pushed.

- Ioi

On 7/3/19 4:56 AM, Tobias Hartmann wrote:
> Hi Ioi,
>
> looks good to me.
>
> Please re-align the comment in c1_MacroAssembler_x86.cpp:346 and 436.
>
> Thanks,
> Tobias
>
> On 03.07.19 07:13, Ioi Lam wrote:
>> https://bugs.openjdk.java.net/browse/JDK-8227040
>> http://cr.openjdk.java.net/~iklam/valhalla/8227040-repair-frame-before-buffer_value_args.v01/
>>
>> When a C1-compiled method is called by C2, it needs to pack all the fields
>> of its value arguments back to buffered objects. In some cases, usually when the
>> value arguments have floating point fields, the C1 callee may require more
>> stack than what has been provided by the C2 caller. On x64, this is handled
>> by the following "stack repair" instructions in the "Verified Entry Point"
>> of the callee
>>
>>      pop %r13
>>      sub <sp_inc>,%rsp
>>      push %r13
>>      movq <real_frame_size>,<frame_size - 8>(%rsp)
>>
>> The stack must be repaired before it can be walked (for GC, etc). This bug
>> happens because we call Runtime1::buffer_value_args, which may GC, before
>> the stack is repaired.
>>
>> The fix is to move the stack repair code before calling buffer_value_args.
>> I also added one test case that would reliably catch this type of error.
>>
>> Thanks
>> - Ioi



More information about the valhalla-dev mailing list