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.


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