RFR: 8229118: [TESTBUG] serviceability/sa/ClhsdbFindPC fails on AArch64

Chris Plummer chris.plummer at oracle.com
Mon Aug 12 20:45:02 UTC 2019


Hi Nick,

Adding to Andrew comments, maybe the solution is to have the test extend 
LingeredApp so it can produce a more reliable stack trace other than the 
default one you get with LingeredApp. If that's too much trouble, I 
don't mind the solution you came up with, but seems writing a 
LingeredApp subclass that is specific for this test would be cleaner.

thanks,

Chris

On 8/12/19 3:24 AM, Nick Gasson wrote:
> Thanks Andrew. Can someone from the serviceability team check this is 
> OK to push?
>
> Nick
>
>
> On 08/08/2019 18:16, Andrew Dinn wrote:
>> Hi Nick,
>>
>> On 08/08/2019 10:32, Nick Gasson wrote:
>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8229118
>>> Webrev: http://cr.openjdk.java.net/~ngasson/8229118/webrev.0/
>>>
>>> This test starts a sub-process with -Xcomp and then uses the SA to 
>>> get a
>>> stack trace of it. It expects to see this line:
>>>
>>>    In code in NMethod for jdk/test/lib/apps/LingeredApp.main
>>>
>>> But actually on AArch64 the stack trace looks like this:
>>>
>>>   - java.lang.Thread.sleep(long) @bci=0, pc=0x0000ffff74603d08, 
>>> Method*=0x0000ffff031baf98 (Compiled frame; information may be 
>>> imprecise)
>>>   - jdk.test.lib.apps.LingeredApp.main(java.lang.String[]) @bci=53, 
>>> line=502, pc=0x0000ffff6c9276e0, Method*=0x0000ffff03611d48 
>>> (Interpreted frame)
>>>
>>> The main method is interpreted even though we're running with
>>> -Xcomp. That's because it is deoptimized almost immediately, because
>>> main calls some methods on java.nio.file.Paths, but that class hasn't
>>> been loaded when main is compiled.
>>>
>>> X86 can patch in the address of the method on-the-fly, but AArch64 
>>> can't
>>> do this because of restrictions on which instructions can be legally
>>> rewritten.
>>>
>>> This patch lifts the code that uses the java.nio classes out of
>>> LingeredApp::main into a separate static method. LingeredApp.main now
>>> only uses classes that are loaded very early in boot, before main is
>>> compiled. The stack trace now looks like:
>>>
>>> "main" #1 prio=5 tid=0x0000ffffb4022800 nid=0xd610 waiting on 
>>> condition [0x0000ffffbb755000]
>>>     java.lang.Thread.State: TIMED_WAITING (sleeping)
>>>     JavaThread state: _thread_blocked
>>>   - java.lang.Thread.sleep(long) @bci=0, pc=0x0000fffface414c8, 
>>> Method*=0x0000ffff3dac8a28 (Compiled frame; information may be 
>>> imprecise)
>>>   - jdk.test.lib.apps.LingeredApp.pollLockFile(java.lang.String) 
>>> @bci=30, line=499, pc=0x0000ffffa50818e0, Method*=0x0000ffff3c122cf0 
>>> (Interpreted frame)
>>>   - jdk.test.lib.apps.LingeredApp.main(java.lang.String[]) @bci=25, 
>>> line=529, pc=0x0000ffffa59afd58, Method*=0x0000ffff3c122de0 
>>> (Compiled frame)
>>>
>>> I.e. pollLockFile was deoptimized to an interpreted frame but
>>> LingeredApp.main is still a compiled frame which is what 
>>> ClhsdbFindPC is
>>> looking for.
>>>
>>> This solution does seem a bit hacky, so if it's not acceptable an
>>> alternative is to just skip the -Xcomp part of the test on AArch64.
>>>
>>> Ran a full jtreg test on AArch64/x86 to check for regressions.
>> Yuck! That's a nice hack to avoid the indeterminate effect of -Xcomp.
>> However, my gut feeling is still that relying on -Xcomp in tests is just
>> a /really/ bad idea and I'd prefer to omit it but . . .
>>
>> I'm not 100% clear what the point of this test is but it looks like it
>> is meant to exercise the stack backtrace code when there is a compiled
>> method on the stack. If so then I guess your hack fits the bill while
>> removing the -Xcomp flag from the command line would not fulfil the
>> test's remit. If that is the point of the test then I agree,
>> reluctantly, that your hack is the right solution. On those grounds I'm
>> happy to accept the patch. However, I'd prefer someone else (Andrew
>> Haley?) also to review this before it gets pushed.
>>
>> regards,
>>
>>
>> Andrew Dinn
>> -----------
>> Senior Principal Software Engineer
>> Red Hat UK Ltd
>> Registered in England and Wales under Company Registration No. 03798903
>> Directors: Michael Cunningham, Michael ("Mike") O'Neill, Eric Shander
>>




More information about the serviceability-dev mailing list