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