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