JDK-8153173 : aarch64: hotspot crashes after the 8.1 LSE patch is merged
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Priority: P4
  • Status: Closed
  • Resolution: Duplicate
  • OS: linux
  • CPU: aarch64
  • Submitted: 2016-03-31
  • Updated: 2016-03-31
  • Resolved: 2016-03-31
Related Reports
Duplicate :  
Description
Testcase:
import java.util.concurrent.atomic.AtomicReference;
import sun.misc.Unsafe;
public class TestUnsafe extends AtomicReference<Node>{
  public static void main(String[] args) {
    for (int i = 0; i < 10000; i++) {
        Node n1 = new Node(i);
        Node n2 = new Node(i+1);
        TestUnsafe t = new TestUnsafe(n1);
        Node old = t.foo(n2);

        if(old.next.v > 20000) {
           System.out.println("not enter here" + old.next.v);
        }
    }
  }
  TestUnsafe(Node n) {super(n);}

  public Node foo(Node n) {
    Node old;
    old = this.getAndSet(n); // inline sun.misc.Unsafe::getAndSetObject here
    old.next = n;
    return old;
  }
}
class Node
{
   int v;
   Node next;
   Node(int i) {v = i; next = null;}
}

Hotspot error message:
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (/home/yangfei/openjdk9_hs-comp/hotspot/src/cpu/aarch64/vm/assembler_aarch64.hpp:1157), pid=7967, tid=8040
#  guarantee(Rs != Rn && Rs != Rt) failed: unpredictable instruction
......

Stack: [0x0000007e1b800000,0x0000007e1ba00000],  sp=0x0000007e1b9fcd70,  free space=2035k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V  [libjvm.so+0xf8ddb0]  VMError::report(outputStream*, bool)+0x111c
V  [libjvm.so+0xf8fd44]  VMError::report_and_die(int, char const*, char const*, std::__va_list, Thread*, unsigned char*, void*, void*, cha
r const*, int, unsigned long)+0x528
V  [libjvm.so+0xf8f720]  VMError::report_and_die(Thread*, char const*, int, char const*, char const*, std::__va_list)+0x90
V  [libjvm.so+0x75a1d0]  report_vm_error(char const*, int, char const*, char const*, ...)+0x104
V  [libjvm.so+0x40b684]  Assembler::stlxrw(RegisterImpl*, RegisterImpl*, RegisterImpl*)+0x74
V  [libjvm.so+0xc20008]  MacroAssembler::atomic_xchgalw(RegisterImpl*, RegisterImpl*, RegisterImpl*)+0x164
V  [libjvm.so+0x4f58f8]  LIR_Assembler::atomic_op(LIR_Code, LIR_OprDesc*, LIR_OprDesc*, LIR_OprDesc*, LIR_OprDesc*)+0x4dc
V  [libjvm.so+0x4e3d80]  LIR_Assembler::emit_op2(LIR_Op2*)+0x488
V  [libjvm.so+0x4d5994]  LIR_Op2::emit_code(LIR_Assembler*)+0x30
V  [libjvm.so+0x4e2510]  LIR_Assembler::emit_lir_list(LIR_List*)+0x184
V  [libjvm.so+0x4e2360]  LIR_Assembler::emit_block(BlockBegin*)+0x198
V  [libjvm.so+0x4e2150]  LIR_Assembler::emit_code(BlockList*)+0x6c
V  [libjvm.so+0x485cc4]  Compilation::emit_code_body()+0x128
V  [libjvm.so+0x485fd0]  Compilation::compile_java_method()+0x238
V  [libjvm.so+0x48631c]  Compilation::compile_method()+0xec
V  [libjvm.so+0x4869a8]  Compilation::Compilation(AbstractCompiler*, ciEnv*, ciMethod*, int, BufferBlob*, DirectiveSet*)+0x200
V  [libjvm.so+0x48c78c]  Compiler::compile_method(ciEnv*, ciMethod*, int, DirectiveSet*)+0xa0
V  [libjvm.so+0x6eeb6c]  CompileBroker::invoke_compiler_on_method(CompileTask*)+0x608
V  [libjvm.so+0x6edc4c]  CompileBroker::compiler_thread_loop()+0x288
V  [libjvm.so+0xf19ef0]  compiler_thread_entry(JavaThread*, Thread*)+0x80
V  [libjvm.so+0xf14830]  JavaThread::thread_main_inner()+0x15c
V  [libjvm.so+0xf146a0]  JavaThread::run()+0x1c4
V  [libjvm.so+0xd3359c]  java_start(Thread*)+0x194
C  [libpthread.so.0+0x7c50]  start_thread+0xb0
C  [libc.so.6+0xdac60]  thread_start+0x30