How to use gdb to debug C1 compiler's internal error?
dean.long at oracle.com
dean.long at oracle.com
Thu Mar 22 20:59:57 UTC 2018
Gdb is not very useful for getting stack backtraces in generated JIT
code, and it wouldn't know where to start because it apparently jumped
to 0x000000000000dead. I suggest trying -XX:+C1Breakpoint and then
single-stepping through the generated code.
dl
On 3/22/18 9:32 AM, Leslie Zhai wrote:
> Hi HotSpot compiler developers,
>
> I am new to HotSpot C1 compiler, and I am trying to implement a new
> greedy register allocation skeleton for academy research, but might
> wrongly modified some code, for example,
> `Runtime1::generate_handle_exception` in
> jdk/src/hotspot/cpu/x86/c1_Runtime1_x86.cpp, then `install_code`
> failed to work and thrown such internal error:
>
> ...
>
> [Stub Code]
> 0x00007fffe13752a0: mov $0x0,%rbx ; {no_reloc}
> 0x00007fffe13752aa: jmpq 0x00007fffe13752aa ; {runtime_call}
> [Exception Handler]
> 0x00007fffe13752af: jmpq 0x00007fffe1004ee0 ; {runtime_call}
> [Deopt Handler Code]
> 0x00007fffe13752b4: callq 0x00007fffe13752b9
> 0x00007fffe13752b9: subq $0x5,(%rsp)
> 0x00007fffe13752be: jmpq 0x00007fffe11072e0 ; {runtime_call}
> 0x00007fffe13752c3: hlt
> 0x00007fffe13752c4: hlt
> 0x00007fffe13752c5: hlt
> 0x00007fffe13752c6: hlt
> 0x00007fffe13752c7: hlt
> Decoding compiled method 0x00007fffe136d310:
> Code:
> [Entry Point]
> # {method} {0x00007fffe015e0e0} 'fillInStackTrace'
> '(I)Ljava/lang/Throwable;' in 'java/lang/Throwable'
> # this: rsi:rsi = 'java/lang/Throwable'
> # parm0: rdx = int
> # [sp+0x50] (sp of caller)
> 0x00007fffe136d4a0: mov 0x8(%rsi),%r10d
> 0x00007fffe136d4a4: shl $0x3,%r10
> 0x00007fffe136d4a8: cmp %r10,%rax
> 0x00007fffe136d4ab: je 0x00007fffe136d4b8
> 0x00007fffe136d4b1: jmpq 0x00007fffe1105c40 ; {runtime_call}
> 0x00007fffe136d4b6: nop
> 0x00007fffe136d4b7: nop
> [Verified Entry Point]
> 0x00007fffe136d4b8: mov %eax,-0x16000(%rsp)
> 0x00007fffe136d4bf: push %rbp
> 0x00007fffe136d4c0: mov %rsp,%rbp
> 0x00007fffe136d4c3: sub $0x40,%rsp
> 0x00007fffe136d4c7: mov %rsp,%rax
> 0x00007fffe136d4ca: and $0xfffffffffffffff0,%rax
> 0x00007fffe136d4ce: cmp %rsp,%rax
> 0x00007fffe136d4d1: je 0x00007fffe136d54e
> 0x00007fffe136d4d7: mov %rsp,-0x28(%rsp)
> 0x00007fffe136d4dc: sub $0x80,%rsp
> 0x00007fffe136d4e3: mov %rax,0x78(%rsp)
> 0x00007fffe136d4e8: mov %rcx,0x70(%rsp)
> 0x00007fffe136d4ed: mov %rdx,0x68(%rsp)
> 0x00007fffe136d4f2: mov %rbx,0x60(%rsp)
> 0x00007fffe136d4f7: mov %rbp,0x50(%rsp)
> 0x00007fffe136d4fc: mov %rsi,0x48(%rsp)
> 0x00007fffe136d501: mov %rdi,0x40(%rsp)
> 0x00007fffe136d506: mov %r8,0x38(%rsp)
> 0x00007fffe136d50b: mov %r9,0x30(%rsp)
> 0x00007fffe136d510: mov %r10,0x28(%rsp)
> 0x00007fffe136d515: mov %r11,0x20(%rsp)
> 0x00007fffe136d51a: mov %r12,0x18(%rsp)
> 0x00007fffe136d51f: mov %r13,0x10(%rsp)
> 0x00007fffe136d524: mov %r14,0x8(%rsp)
> 0x00007fffe136d529: mov %r15,(%rsp)
> 0x00007fffe136d52d: mov $0x7ffff6dbea09,%rdi ; {external_word}
> 0x00007fffe136d537: mov $0x7fffe136d4d7,%rsi ; {internal_word}
> 0x00007fffe136d541: mov %rsp,%rdx
> 0x00007fffe136d544: and $0xfffffffffffffff0,%rsp
> 0x00007fffe136d548: callq 0x00007ffff68211ee ; {runtime_call}
> 0x00007fffe136d54d: hlt
> ;; move 1 -> 2
> ;; move 0 -> 1
> 0x00007fffe136d54e: mov %rsi,(%rsp)
> 0x00007fffe136d552: cmp $0x0,%rsi
> 0x00007fffe136d556: lea (%rsp),%rsi
> 0x00007fffe136d55a: cmove (%rsp),%rsi ; OopMap{[0]=Oop off=191}
> 0x00007fffe136d55f: mov $0x7fffe136d55f,%r10 ; {section_word}
> 0x00007fffe136d569: mov %r10,0x208(%r15)
> 0x00007fffe136d570: mov %rsp,0x200(%r15)
> 0x00007fffe136d577: cmpb $0x0,0x1602de2c(%rip) #
> 0x00007ffff739b3aa
> ; {external_word}
> 0x00007fffe136d57e: je 0x00007fffe136d5b8
> 0x00007fffe136d584: push %rsi
> 0x00007fffe136d585: push %rdx
> 0x00007fffe136d586: mov $0x7fffe015e0e0,%rsi ;
> {metadata({method} {0x00007fffe015e0e0} 'fillInStackTrace'
> '(I)Ljava/lang/Throwable;' in 'java/lang/Throwable')}
> 0x00007fffe136d590: mov %r15,%rdi
> 0x00007fffe136d593: test $0xf,%esp
> 0x00007fffe136d599: je 0x00007fffe136d5b1
> 0x00007fffe136d59f: sub $0x8,%rsp
> 0x00007fffe136d5a3: callq 0x00007ffff69c48ae ; {runtime_call}
> 0x00007fffe136d5a8: add $0x8,%rsp
> 0x00007fffe136d5ac: jmpq 0x00007fffe136d5b6
> 0x00007fffe136d5b1: callq 0x00007ffff69c48ae ; {runtime_call}
> 0x00007fffe136d5b6: pop %rdx
> 0x00007fffe136d5b7: pop %rsi
> 0x00007fffe136d5b8: lea 0x220(%r15),%rdi
> 0x00007fffe136d5bf: movl $0x4,0x298(%r15)
> 0x00007fffe136d5ca: callq 0x00007ffff4f55fef ; {runtime_call}
> 0x00007fffe136d5cf: vzeroupper
> 0x00007fffe136d5d2: movl $0x5,0x298(%r15)
> 0x00007fffe136d5dd: mov %r15d,%ecx
> 0x00007fffe136d5e0: shr $0x4,%ecx
> 0x00007fffe136d5e3: and $0xffc,%ecx
> 0x00007fffe136d5e9: mov $0x7ffff7ff3000,%r10 ; {external_word}
> 0x00007fffe136d5f3: mov %ecx,(%r10,%rcx,1)
> 0x00007fffe136d5f7: cmpl $0x0,0x1603f89f(%rip) #
> 0x00007ffff73acea0
> ; {external_word}
> 0x00007fffe136d601: jne 0x00007fffe136d615
> 0x00007fffe136d607: cmpl $0x0,0x30(%r15)
> 0x00007fffe136d60f: je 0x00007fffe136d636
> 0x00007fffe136d615: mov %rax,-0x8(%rbp)
> 0x00007fffe136d619: mov %r15,%rdi
> 0x00007fffe136d61c: mov %rsp,%r12
> 0x00007fffe136d61f: sub $0x0,%rsp
> 0x00007fffe136d623: and $0xfffffffffffffff0,%rsp
> 0x00007fffe136d627: callq 0x00007ffff6a691da ; {runtime_call}
> 0x00007fffe136d62c: mov %r12,%rsp
> 0x00007fffe136d62f: xor %r12,%r12
> 0x00007fffe136d632: mov -0x8(%rbp),%rax
> 0x00007fffe136d636: movl $0x8,0x298(%r15)
> 0x00007fffe136d641: cmpl $0x1,0x2c4(%r15)
> 0x00007fffe136d64c: je 0x00007fffe136d6e8
> 0x00007fffe136d652: cmpb $0x0,0x1602dd51(%rip) #
> 0x00007ffff739b3aa
> ; {external_word}
> 0x00007fffe136d659: je 0x00007fffe136d697
> 0x00007fffe136d65f: mov %rax,-0x8(%rbp)
> 0x00007fffe136d663: mov $0x7fffe015e0e0,%rsi ;
> {metadata({method} {0x00007fffe015e0e0} 'fillInStackTrace'
> '(I)Ljava/lang/Throwable;' in 'java/lang/Throwable')}
> 0x00007fffe136d66d: mov %r15,%rdi
> 0x00007fffe136d670: test $0xf,%esp
> 0x00007fffe136d676: je 0x00007fffe136d68e
> 0x00007fffe136d67c: sub $0x8,%rsp
> 0x00007fffe136d680: callq 0x00007ffff69c4ab8 ; {runtime_call}
> 0x00007fffe136d685: add $0x8,%rsp
> 0x00007fffe136d689: jmpq 0x00007fffe136d693
> 0x00007fffe136d68e: callq 0x00007ffff69c4ab8 ; {runtime_call}
> 0x00007fffe136d693: mov -0x8(%rbp),%rax
> 0x00007fffe136d697: mov $0x0,%r10
> 0x00007fffe136d6a1: mov %r10,0x200(%r15)
> 0x00007fffe136d6a8: mov $0x0,%r10
> 0x00007fffe136d6b2: mov %r10,0x208(%r15)
> 0x00007fffe136d6b9: test %rax,%rax
> 0x00007fffe136d6bc: je 0x00007fffe136d6c5
> 0x00007fffe136d6c2: mov (%rax),%rax
> 0x00007fffe136d6c5: mov 0x38(%r15),%rcx
> 0x00007fffe136d6c9: movl $0x0,0x108(%rcx)
> 0x00007fffe136d6d3: leaveq
> 0x00007fffe136d6d4: cmpq $0x0,0x8(%r15)
> 0x00007fffe136d6dc: jne 0x00007fffe136d6e3
> 0x00007fffe136d6e2: retq
> 0x00007fffe136d6e3: jmpq Stub::forward exception ; {runtime_call}
> 0x00007fffe136d6e8: mov %rax,-0x8(%rbp)
> 0x00007fffe136d6ec: mov %rsp,%r12
> 0x00007fffe136d6ef: sub $0x0,%rsp
> 0x00007fffe136d6f3: and $0xfffffffffffffff0,%rsp
> 0x00007fffe136d6f7: callq 0x00007ffff69c8b64 ; {runtime_call}
> 0x00007fffe136d6fc: mov %r12,%rsp
> 0x00007fffe136d6ff: xor %r12,%r12
> 0x00007fffe136d702: mov -0x8(%rbp),%rax
> 0x00007fffe136d706: jmpq 0x00007fffe136d652
> 0x00007fffe136d70b: hlt
> 0x00007fffe136d70c: hlt
> 0x00007fffe136d70d: hlt
> 0x00007fffe136d70e: hlt
> 0x00007fffe136d70f: hlt
>
> #
> # A fatal error has been detected by the Java Runtime Environment:
> #
> # SIGSEGV (0xb) at pc=0x000000000000dead, pid=2174,
> tid=0x00007ffff7fc8700
> #
> # JRE version: OpenJDK Runtime Environment (8.0) (build
> 1.8.0-internal-debug-xiangzhai_2018_03_19_20_27-b00)
> # Java VM: OpenJDK 64-Bit Server VM (25.71-b00-debug compiled mode
> linux-amd64 compressed oops)
> # Problematic frame:
> # C 0x000000000000dead
> #
> # Core dump written. Default location:
> /data/project/openjdk/jdk8u/hotspot/test/compiler/5057225/core or
> core.2174
> #
> # An error report file with more information is saved as:
> #
> /data/project/openjdk/jdk8u/hotspot/test/compiler/5057225/hs_err_pid2174.log
>
> Compiled method (c1) 21870 156 ! 3
> java.lang.ClassLoader::loadClass (122 bytes)
> total in heap [0x00007fffe12bcc90,0x00007fffe12beee0] = 8784
> relocation [0x00007fffe12bcdc0,0x00007fffe12bcfb8] = 504
> main code [0x00007fffe12bcfc0,0x00007fffe12be2c0] = 4864
> stub code [0x00007fffe12be2c0,0x00007fffe12be460] = 416
> metadata [0x00007fffe12be460,0x00007fffe12be4a0] = 64
> scopes data [0x00007fffe12be4a0,0x00007fffe12be848] = 936
> scopes pcs [0x00007fffe12be848,0x00007fffe12becd8] = 1168
> dependencies [0x00007fffe12becd8,0x00007fffe12bece0] = 8
> handler table [0x00007fffe12bece0,0x00007fffe12beea8] = 456
> nul chk table [0x00007fffe12beea8,0x00007fffe12beee0] = 56
> Compiled method (c1) 21871 156 ! 3
> java.lang.ClassLoader::loadClass (122 bytes)
> total in heap [0x00007fffe12bcc90,0x00007fffe12beee0] = 8784
> relocation [0x00007fffe12bcdc0,0x00007fffe12bcfb8] = 504
> main code [0x00007fffe12bcfc0,0x00007fffe12be2c0] = 4864
> stub code [0x00007fffe12be2c0,0x00007fffe12be460] = 416
> metadata [0x00007fffe12be460,0x00007fffe12be4a0] = 64
> scopes data [0x00007fffe12be4a0,0x00007fffe12be848] = 936
> scopes pcs [0x00007fffe12be848,0x00007fffe12becd8] = 1168
> dependencies [0x00007fffe12becd8,0x00007fffe12bece0] = 8
> handler table [0x00007fffe12bece0,0x00007fffe12beea8] = 456
> nul chk table [0x00007fffe12beea8,0x00007fffe12beee0] = 56
> #
> # If you would like to submit a bug report, please visit:
> # http://bugreport.java.com/bugreport/crash.jsp
> #
> Current thread is 140737353910016
> Dumping core ...
>
> [Switching to Thread 0x7ffff7fc8700 (LWP 2178)]
> __GI_raise (sig=sig at entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
> 51 }
> (gdb) bt
> #0 __GI_raise (sig=sig at entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
> #1 0x00007ffff740c4da in __GI_abort () at abort.c:89
> #2 0x00007ffff6905d0b in os::abort (dump_core=true)
> at
> /data/project/openjdk/jdk8u/hotspot/src/os/linux/vm/os_linux.cpp:1515
> #3 0x00007ffff6ac75fc in VMError::report_and_die (this=0x7ffff7fc6400)
> at
> /data/project/openjdk/jdk8u/hotspot/src/share/vm/utilities/vmError.cpp:1060
> #4 0x00007ffff6ac7d29 in crash_handler (sig=11, info=0x7ffff7fc6630,
> ucVoid=0x7ffff7fc6500)
> at
> /data/project/openjdk/jdk8u/hotspot/src/os/linux/vm/vmError_linux.cpp:106
> #5 <signal handler called>
> #6 0x00007ffff690071a in os::print_hex_dump (st=0x7ffff7fc6c30,
> start=0xde8d <error: Cannot access memory at address 0xde8d>,
> end=0xdecd <error: Cannot access memory at address 0xdecd>,
> unitsize=1)
> at
> /data/project/openjdk/jdk8u/hotspot/src/share/vm/runtime/os.cpp:802
> #7 0x00007ffff691328e in os::print_context (st=0x7ffff7fc6c30,
> context=0x7ffff7fc6f00)
> at
> /data/project/openjdk/jdk8u/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp:823
> #8 0x00007ffff6ac5adb in VMError::report (this=0x7ffff7fc6d50,
> st=0x7ffff7fc6c30)
> at
> /data/project/openjdk/jdk8u/hotspot/src/share/vm/utilities/vmError.cpp:534
> #9 0x00007ffff6ac70cc in VMError::report_and_die (this=0x7ffff7fc6d50)
> at
> /data/project/openjdk/jdk8u/hotspot/src/share/vm/utilities/vmError.cpp:971
> #10 0x00007ffff6912bde in JVM_handle_linux_signal (sig=11,
> info=0x7ffff7fc7030, ucVoid=0x7ffff7fc6f00,
> abort_if_unrecognized=1)
> at
> /data/project/openjdk/jdk8u/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp:541
> #11 0x00007ffff690be1d in signalHandler (sig=11, info=0x7ffff7fc7030,
> uc=0x7ffff7fc6f00)
> at
> /data/project/openjdk/jdk8u/hotspot/src/os/linux/vm/os_linux.cpp:4435
> #12 <signal handler called>
> ...
>
> So backtrace or set breakpoint might be helpful for debugging
> compiling thread, but doesn't work for running thread? I am reading
> Analyzing and Debugging the HotSpot VM at the OS Level[1] please give
> me some advice, thanks a lot!
>
> [1] http://www.progdoc.de/papers/JavaOne2014/javaone2014_con3138.html
>
More information about the hotspot-compiler-dev
mailing list