RFR 8227040 [lworld][c1] Must repair stack frame before calling buffer_value_args
Tobias Hartmann
tobias.hartmann at oracle.com
Wed Jul 3 11:56:13 UTC 2019
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