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

Sergey Nazarkin snazarkin at azul.com
Wed Nov 23 15:57:35 UTC 2016


OK, I see we're speaking about different JDK, I’ referencing to JDK8 from ARRCH64-port project


Sergey Nazarkin




> On 23 Nov 2016, at 18:46, Andrew Haley <aph at redhat.com> wrote:
> 
> 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