[aarch64-port-dev ] RFR(M): 8201593: Print array length in ArrayIndexOutOfBoundsException.

Stuart Monteith stuart.monteith at linaro.org
Wed Apr 18 15:55:53 UTC 2018


Hi,
    I've had a look.

Stack trace in gdb for reference..

    message=0x3ffb77e0790 "assert(is_single_cpu() && !is_virtual())
failed", detail_fmt=0x3ffb77e0780 "type check", detail_args=...) at
/home/stuart/repos/jdk/src/hotspot/share/utilities/vmError.cpp:1244
#15 0x000003ffb6ebfbb4 in report_vm_error (file=0x3ffb77e07c0
"/home/stuart/repos/jdk/src/hotspot/share/c1/c1_LIR.hpp", line=0x19d,
error_msg=0x3ffb77e0790 "assert(is_single_cpu() && !is_virtual())
failed",
    detail_fmt=0x3ffb77e0780 "type check") at
/home/stuart/repos/jdk/src/hotspot/share/utilities/debug.cpp:230
#16 0x000003ffb6c0f0d0 in LIR_OprDesc::cpu_regnr (this=0x0) at
/home/stuart/repos/jdk/src/hotspot/share/c1/c1_LIR.hpp:413
#17 0x000003ffb6c43120 in LIR_OprDesc::as_register (this=0x0) at
/home/stuart/repos/jdk/src/hotspot/share/c1/c1_LIR.cpp:34
#18 0x000003ffb6c02ae0 in LIR_OprDesc::as_pointer_register (this=0x0)
at /home/stuart/repos/jdk/src/hotspot/share/c1/c1_LIR.hpp:439
#19 0x000003ffb6bfff08 in RangeCheckStub::emit_code
(this=0x3ffb0847e90, ce=0x3ff41a6d290) at
/home/stuart/repos/jdk/src/hotspot/cpu/aarch64/c1_CodeStubs_aarch64.cpp:76

c1_CodeStubs_aarch64.cpp: RangeCheckStub::emit_code(LIR_Assembler* ce)
 is being passed a NULL _array, and that is what is failing the
assertions.

C1 is, from the replay log,  compiling "java/nio/HeapByteBuffer". For
these methods, an array is not being passed..
The method void LIRGenerator::do_NIOCheckIndex(Intrinsic* x)  creates
RangeCheckStub with a NULL array parameter.

When it comes to  RangeCheckStub::emit_code, the following is failing
as _array is NULL:
  __ mov(rscratch2, _array->as_pointer_register());

Taking "Runtime1::generate_exception_throw" as an example of what is
called, it either takes no parameters, or now two parameters.

Of course, the following method doesn't take an array:
  static void throw_index_exception(JavaThread* thread, int index);
which is what is called by the stubs. I would expect it to be:
  static void throw_index_exception(JavaThread* thread, int index, array);

I'll keep digging.


On 18 April 2018 at 14:52, Andrew Haley <aph at redhat.com> wrote:
> On 04/18/2018 12:12 PM, Stuart Monteith wrote:
>>    On Aarch64 I'm getting the following during jlinking in the build process:
>
> DO you want to debug that or shall I?
>
> --
> Andrew Haley
> Java Platform Lead Engineer
> Red Hat UK Ltd. <https://www.redhat.com>
> EAC8 43EB D3EF DB98 CC77 2FAD A5CD 6035 332F A671


More information about the hotspot-runtime-dev mailing list