hg: valhalla/valhalla/hotspot: Fix and cleanup in vwithfield
Karen Kinnear
karen.kinnear at oracle.com
Thu Jun 8 01:15:13 UTC 2017
Frederic,
Thank you for the explanation. Got it - I had missed the original value type passed
on the stack by reference needs to be popped off.
thank you,
Karen
> On Jun 7, 2017, at 5:16 PM, Frederic Parain <frederic.parain at oracle.com> wrote:
>
> Karen,
>
> The integer returned is not the size of the new value type, it’s a stack
> adjustment value.
>
> The vwithfield runtime entry returns a new value type in thread->vm_result
> and an integer which is used by the assembly code to adjust the stack
> pointer (the vwithfield bytecode must consume the new field value and the
> original value type passed on the stack before pushing the new value).
> We are doing this because we cannot manipulate the expression stack from
> the runtime and the assembly code doesn’t know the size of
> the new field value (one slot or two slot depending on the field type).
>
> The bug was that the stack adjustment returned was missing the size of
> the original value type passed on the stack, leading to a “shift” of operands
> on the expression stack because the original value type was never popped.
> This issue caused some GC issues (because of the shift, there was a
> mismatch between the oopmap computed and the real location of references),
> and could eventually caused some stack overflow issues.
>
> Fred
>
>
>> On Jun 7, 2017, at 17:04, Karen Kinnear <karen.kinnear at oracle.com> wrote:
>>
>> Frederic,
>>
>> Looks good. Thank you for the cleanup.
>>
>> One question please - why do you add type2size(T_VALUETYPE) * stackElementSize
>> when you return the size of the new value type result?
>>
>> thanks,
>> Karen
>>
>>> On Jun 7, 2017, at 3:41 PM, Frederic Parain <frederic.parain at oracle.com> wrote:
>>>
>>> Fixing a bug in vwithfield leading to buggy stack management.
>>> Thanks to Mr Simms for having spotted and identify the issue.
>>> I took the opportunity to do a clean up of the vwithfield method,
>>> removing raw pointer arithmetic on the expression stack, using
>>> the frame API instead.
>>>
>>> Fred
>>>
>>>
>>>> On Jun 7, 2017, at 15:39, frederic.parain at oracle.com wrote:
>>>>
>>>> Changeset: b03e14ea3e9b
>>>> Author: fparain
>>>> Date: 2017-06-07 15:38 -0400
>>>> URL: http://hg.openjdk.java.net/valhalla/valhalla/hotspot/rev/b03e14ea3e9b
>>>>
>>>> Fix and cleanup in vwithfield
>>>>
>>>> ! src/share/vm/interpreter/interpreterRuntime.cpp
>>>>
>>>
>>
>
More information about the valhalla-dev
mailing list