RFR: 8139674: aarch64: guarantee failure in TestOptionsWithRanges.java

Vladimir Kozlov vladimir.kozlov at oracle.com
Fri Oct 16 00:53:27 UTC 2015


I don't think removing next line is right:

-        add(mdp, mdp, to_add);

it shifts to next metadata cell.

Also both exit paths execute the same instruction:

+      add(rscratch1, mdp, off_to_args);

may be you can simplify exit without them:

        bind(done);
+      add(mdp, mdp, off_to_args);

Thanks,
Vladimir

On 10/15/15 11:51 PM, Edward Nevill wrote:
> Hi,
>
> Please review the following webrev
>
> http://cr.openjdk.java.net/~enevill/8139674/webrev/
>
> JIRA issue: https://bugs.openjdk.java.net/browse/JDK-8139674
>
>
> The hotspot jtreg test runtime/CommandLine/OptionsValidation/TestOptionsWithRanges.java fails with a guarantee failure.
>
> # A fatal error has been detected by the Java Runtime Environment:
> #
> # Internal Error (assembler_aarch64.hpp:256), pid=22842, tid=22845
> # guarantee(chk == -1 || chk == 0) failed: Field too big for insn
>
> What is happening is that the code in InterpreterMacroAssembler::profile_arguments_type adjusts mdp to point past the arguments and uses negative offsets to index fields at the start of the method data structure.
>
> However, negative ldr offsets are very limited on aarch64 (-256 bytes) so this easily overflows when TypeProfileArgsLimit is large (>=16).
>
> The solution is to defer incrementing mdp until we are finished with all the args and use positive offsets instead.
>
> Tested with hotspot jtreg
>
> Before: Test results: passed: 896; failed: 6; error: 10
> After: Test results: passed: 896; failed: 5; error: 10
>
> Thanks for your help,
> Ed.
>
>


More information about the hotspot-compiler-dev mailing list