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