RFR (S) 8144518: ClassVerboseTest crashes on Windows

Coleen Phillimore coleen.phillimore at oracle.com
Wed Jan 18 02:24:01 UTC 2017


Actually, I did look at Bytecodes::_tableswitch handling through the jvm 
and both other instances (verifier and relocator) that don't use 
Bytecode_tableswitch use different address calculation.  They align the 
bcp to u4 first and then do get_Java_u4().

The relocator has the disturbing comment
             // We cannot use the Bytecode_tableswitch abstraction, 
since the padding might not be correct.

This is because the code stream has had code inserted at this point.

Coleen


On 1/17/17 9:13 PM, Coleen Phillimore wrote:
>
>
> On 1/17/17 7:02 PM, David Holmes wrote:
>> Hi Coleen,
>>
>> The bug report does not explain the problem so it is unclear whether 
>> this workaround is minimal. Also some commentary somewhere would be 
>> useful else the bug might return inadvertently - more generally I'd 
>> like to understand what other code might be impacted by this.
>
> Christian and I spent a solid week looking for the windows Visual 
> Studio bug that caused this but weren't able to find it.  He verified 
> that it's fixed in VS2015.  I think that's in the bug report.  The 
> code generated is in the bug report with annotations of what lines the 
> code it was executing and which instructions caused the truncation and 
> sign extension leading to a negative offset from the start of _bcp.
>
> There's a small reproducer in the bug report for 8144518.
>
> I did a grep of all the "address.*-" and looked through the lines of 
> code but I didn't generate windows assembly code to examine for all 
> the pointer subtractions.  I don't plan to do this.   From the 
> reproducer, there needed to be the swap_u4, even though the load that 
> crashed was before the swap_u4 code.  The scenario that caused this 
> bug seems very specific and if it exists in any other places in the 
> jvm, we can keep an eye out for it.  This crash, while intermittent, 
> was fairly consistent.
>
> We think it's best to get this workaround into jdk 9 before ZBB since 
> this bug has been seen several times, and we finally narrowed down the 
> problem and don't have to close it as not reproduceable again.
>
> There is a line above the dest_offset_at code which I was going to 
> remove, since it's describing code I changed, which doesn't make for a 
> good comment.  Any further commentary or explanation of this bug will 
> be vague, since we don't have the VS compiler to debug to find the 
> real problem, and won't make sense in the source code.
>
> Did you look at the code? It's a simplification of the expression that 
> was in the original, that would have been better from the start.
>
> Thanks,
> Coleen
>
>>
>> Thanks,
>> David
>>
>> On 18/01/2017 8:49 AM, Coleen Phillimore wrote:
>>> I should have also sent this to hotspot-dev, since Bytecode_tableswitch
>>> is used by the compiler ci code.
>>> thanks,
>>> Coleen
>>>
>>>
>>> On 1/17/17 1:49 PM, Coleen Phillimore wrote:
>>>> Summary: simplify Bytecode_tableswitch code so windows doesn't
>>>> generate bad code for it.
>>>>
>>>> open webrev at http://cr.openjdk.java.net/~coleenp/8144518.01/webrev
>>>> bug link https://bugs.openjdk.java.net/browse/JDK-8144518
>>>>
>>>> Verified generated code does not have sign extended value that is
>>>> subtracted, giving the wrong offset.  Ran all rbt nightly tests. Ran
>>>> some -Xcomp tests.
>>>>
>>>> See more info in bug https://bugs.openjdk.java.net/browse/JDK-8171968
>>>>
>>>> Thanks,
>>>> Coleen
>>>>
>>>>
>>>
>



More information about the hotspot-runtime-dev mailing list