[aarch64-port-dev ] RFR: 8170188: jtreg compiler/types/TestMeetIncompatibleInterfaceArrays.java causes JVM crash

Andrew Haley aph at redhat.com
Wed Nov 23 15:46:34 UTC 2016


On 23/11/16 14:52, Sergey Nazarkin wrote:

> The issue doesn’t relate to any JIT, runtime fails right at template initialiser
> 
> V  [libjvm.so+0x2540d0]  Instruction_aarch64::f(unsigned int, int, int)+0x64
> V  [libjvm.so+0x255158]  Assembler::f(unsigned int, int, int)+0x30
> V  [libjvm.so+0x255aa8]  Assembler::ands(RegisterImpl*, RegisterImpl*, unsigned long)+0x7c
> V  [libjvm.so+0x766c7c]  InterpreterMacroAssembler::increment_mask_and_jump(Address, int, int, Registerp8

Here is the call to ands:

void InterpreterMacroAssembler::increment_mask_and_jump(Address counter_addr,
                                                        int increment, Address mask,
                                                        Register scratch, Register scratch2,
                                                        bool preloaded, Condition cond,
                                                        Label* where) {
  if (!preloaded) {
    ldrw(scratch, counter_addr);
  }
  add(scratch, scratch, increment);
  strw(scratch, counter_addr);
  ldrw(scratch2, mask);
  ands(scratch, scratch, scratch2);
  br(cond, *where);
}

So, the call to ands is not calling ands(Register, Register, unsigned
long), it is calling ands(Register, Register, Register); or it should
be.  The wrong method is being called, presumably because method
overload has failed.

> V  [libjvm.so+0xb32234]  InterpreterGenerator::generate_counter_incr(Label*, Label*, Label*)+0x1b4

The backtrace you should see is

0xffffb6a554d8 <Instruction_aarch64::zrf(RegisterImpl*, int)+20>:	
0xffffb6a56bb4 <Assembler::zrf(RegisterImpl*, int)+20>:
0xffffb6a5a46c <Assembler::ands(RegisterImpl*, RegisterImpl*, RegisterImpl*, Assembler::shift_kind, unsigned int)+32>:
0xffffb71b3f0c <InterpreterMacroAssembler::increment_mask_and_jump(Address, int, Address, RegisterImpl*, RegisterImpl*, bool, Assembler::Condition, Label*)+188>:	
0xffffb76eb168 <TemplateInterpreterGenerator::generate_counter_incr(Label*, Label*, Label*)+888>:
0xffffb76ef3b4 <TemplateInterpreterGenerator::generate_normal_entry(bool)+1528>:	
0xffffb76e8d94 <TemplateInterpreterGenerator::generate_method_entry(AbstractInterpreter::MethodKind)+452>:

The VM has been miscompiled.  There is no way that ands should ever
see (Register, Register, 0).  If there is a problem with an ambiguous
overload we should see a complaint from the compiler.

Andrew.


More information about the aarch64-port-dev mailing list