[RFC] Introduce BreakAtCompileId

Leslie Zhai zhaixiang at loongson.cn
Tue Nov 10 01:31:31 UTC 2020


Hi Mikael,

Thanks for your teaching!


在 2020年11月10日 06:24, Mikael Vidstedt 写道:
> Please take this to hotspot-dev-compiler if you want to continue the discussion.
>
>
> FWIW “continue” does take an argument, would that work for your use case?

Yes!  It should work for my use case.  It doesn't need to make the same 
wheel any more :)

>
> (gdb) help continue
> Continue program being debugged, after signal or breakpoint.
> Usage: continue [N]
> If proceeding from breakpoint, a number N may be used as an argument,
> which means to set the ignore count of that breakpoint to N - 1 (so that
> the breakpoint won't break until the Nth time it is reached).

NullCheck  also generated signal SIGSEGV:


      064       LD    Rd, [Rt + #12 (8-bit)]  @ indOffset8    # 
compressed ptr @ loadN ! Field: java/lang/String.value
      068       decode_heap_oop   Rd, Rt  @ decodeHeapOop
      070       MOV    Rd, [Rt + #12 (8-bit)]  @ indOffset8 @ loadRange
=>074       NullCheck   Rd


It needs to press `c` when the base register is indeed NULL by comparing 
with other CPUs.  So continue N -1 might not precise.

Thanks,
Leslie Zhai

>
> If non-stop mode is enabled, continue only the current thread,
> otherwise all the threads in the program are continued.  To
> continue all stopped threads in non-stop mode, use the -a option.
> Specifying -a and an ignore count simultaneously is an error.
>
>
> Cheers,
> Mikael
>
>
>> On Nov 9, 2020, at 7:48 AM, Leslie Zhai <zhaixiang at loongson.cn> wrote:
>>
>> Hi,
>>
>> OptoBreakpoint is very useful for debugging C2 compiler when porting some cpu for jdk8u. It is able to `b breakpoint` for breaking at the prolog about for example Compile_id = 2. But when fixed several bugs for C2, it needs to press `c` times and times again for reaching the proper Compile_id.
>>
>> I `grep` Opto related options.  But there is no such one to break at the precise Compile_id.  Please teach me if there was :)
>>
>> So here comes BreakAtCompileId. It is able to break at the precise Compile_id which you want to debug.
>>
>>
>> gdb -ex=r --args $JAVA -Xcomp -XX:+PrintCompilation -XX:BreakAtCompileId=430  -version
>>
>>
>> (gdb) b breakpoint
>> Breakpoint 1 at 0x7ffff633b0d0: breakpoint. (133 locations)
>>
>>     6333  433       3 java.util.ImmutableCollections$List12::get (35 bytes)   made not entrant
>>
>> Thread 2 "java" hit Breakpoint 1, 0x00007ffff711f410 in os::breakpoint() () at /home/zhaixiang/projects
>> 452         if (pslash != NULL) {
>> (gdb) si
>> 0x00007fffe01b46d1 in ?? ()
>> (gdb) x/22i $pc-44
>>     0x7fffe01b46a5:      shl    $0x3,%edx
>>     0x7fffe01b46a8:      movabs $0x800000000,%r11
>>     0x7fffe01b46b2:      add    %r11,%r10
>>     0x7fffe01b46b5:      cmp    %r10,%rax
>>     0x7fffe01b46b8:      jne    0x7fffd87cf920
>>     0x7fffe01b46be:      nop
>>     0x7fffe01b46bf:      nop
>>     0x7fffe01b46c0:      mov    %eax,-0x16000(%rsp)
>>     0x7fffe01b46c7:      push   %rbp
>>     0x7fffe01b46c8:      sub    $0x10,%rsp
>>     0x7fffe01b46cc:      callq  0x7ffff711f410 <_ZN2os10breakpointEv>
>> => 0x7fffe01b46d1:      mov    0xc(%rsi),%r11d
>>     0x7fffe01b46d5:      mov    0x10(%rsi),%r10d
>>     0x7fffe01b46d9:      cmp    %r11d,%r10d
>>     0x7fffe01b46dc:      je     0x7fffe01b46f6
>>     0x7fffe01b46de:      mov    $0x1,%eax
>>     0x7fffe01b46e3:      add    $0x10,%rsp
>>     0x7fffe01b46e7:      pop    %rbp
>>     0x7fffe01b46e8:      cmp    0x128(%r15),%rsp
>>     0x7fffe01b46ef:      ja     0x7fffe01b46fa
>>     0x7fffe01b46f5:      retq
>>     0x7fffe01b46f6:      xor    %eax,%eax
>> (gdb) i r
>> rax            0x7fffe01b46c0      140736953272000
>> rbx            0x8004699e8         34364365288
>> rcx            0x1                 1
>> rdx            0x7fffc5068980      140736498928000
>> rsi            0x62a020b40         26474580800
>> rdi            0x1                 1
>> rbp            0x7ffff5a668d0      0x7ffff5a668d0
>> rsp            0x7ffff5a66290      0x7ffff5a66290
>> r8             0x80008eeb0         34360323760
>> r9             0x7ffb4cf60         34354810720
>> r10            0x800012488         34359813256
>> r11            0x800000000         34359738368
>> r12            0x0                 0
>> r13            0x7292dae5          1922226917
>> r14            0x62a020818         26474579992
>> r15            0x7ffff00271e0      140737220080096
>> rip            0x7fffe01b46d1      0x7fffe01b46d1
>> eflags         0x206               [ PF IF ]
>> cs             0x33                51
>> ss             0x2b                43
>> ds             0x0                 0
>> es             0x0                 0
>> fs             0x0                 0
>> gs             0x0                 0
>>
>>
>> Thanks,
>> Leslie Zhai
>>



More information about the hotspot-compiler-dev mailing list