RFR: 8225429: Regression in disassembly quality

Andrew Haley aph at redhat.com
Thu Jun 6 15:19:05 UTC 2019


In a debug build, if you printed a disassembled method, you used to
get a lot of information about a method. Now, you just get raw
disassembly. This patch restores the status quo ante,

http://cr.openjdk.java.net/~aph/8225429-1/

There are other bugs in the new disassembly output: in particular
options processing seems to be very broken. However, this patch is
enough to get things going again, so at least we can get some work
done.

Before:

  # {method} {0x00007f2f64833660} 'decodeModuleName' '(ILjava/lang/String;)Ljava/lang/String;' in 'jdk/internal/module/ModuleInfo$ConstantPool'
  # this: rsi:rsi = 'jdk/internal/module/ModuleInfo$ConstantPool'
  # parm0: rdx = int
  # parm1: rcx:rcx = 'java/lang/String'
  # [sp+0x40] (sp of caller)
 ;; N542: # B1 <- BLOCK HEAD IS JUNK Freq: 1

  0x00007f2fb1168440: mov r10d,DWORD PTR [rsi+0x8]
  0x00007f2fb1168444: movabs r12,0x800000000
  0x00007f2fb116844e: add r10,r12
  0x00007f2fb1168451: xor r12,r12
  0x00007f2fb1168454: cmp rax,r10
  0x00007f2fb1168457: jne 0x00007f2fb104d6a0 ; {runtime_call ic_miss_stub}
  0x00007f2fb116845d: nop
  0x00007f2fb116845e: nop
  0x00007f2fb116845f: nop
[Verified Entry Point]
 ;; B1: # B54 B2 <- BLOCK HEAD IS JUNK Freq: 1

  0x00007f2fb1168460: mov DWORD PTR [rsp-0x16000],eax
  0x00007f2fb1168467: push rbp
  0x00007f2fb1168468: sub rsp,0x30 ;*synchronization entry
                                                ; - jdk.internal.module.ModuleInfo$ConstantPool::decodeModuleName at -1 (line 877)

  0x00007f2fb116846c: mov r10,rsi
  0x00007f2fb116846f: mov r9,rcx
  0x00007f2fb1168472: mov edi,DWORD PTR [rcx+0xc] ;*getfield value {reexecute=0 rethrow=0 return_oop=0}
                                                ; - java.lang.String::length at 1 (line 658)
                                                ; - jdk.internal.module.ModuleInfo$ConstantPool::decodeModuleName at 1 (line 877)
                                                ; implicit exception: dispatches to 0x00007f2fb116872a
 ;; B2: # B55 B3 <- B1 Freq: 0.999999

Now you only get this, even in a debug build:

  0x00007ff1c5176c20: mov r10d,DWORD PTR [rsi+0x8]
  0x00007ff1c5176c24: movabs r12,0x800000000
  0x00007ff1c5176c2e: add r10,r12
  0x00007ff1c5176c31: xor r12,r12
  0x00007ff1c5176c34: cmp rax,r10
  0x00007ff1c5176c37: jne 0x00007ff1c5113da0
  0x00007ff1c5176c3d: nop
  0x00007ff1c5176c3e: nop
  0x00007ff1c5176c3f: nop
  0x00007ff1c5176c40: mov DWORD PTR [rsp-0x16000],eax
  0x00007ff1c5176c47: push rbp
  0x00007ff1c5176c48: sub rsp,0x30
  0x00007ff1c5176c4c: mov r11,rsi
  0x00007ff1c5176c4f: mov r9,rcx
  0x00007ff1c5176c52: mov r10d,DWORD PTR [rcx+0xc]

There are no comments at all, just raw disassembly.

This patch restores the status quo ante:

  # {method} {0x00007f9f53c2e3c0} 'decodeModuleName' '(ILjava/lang/String;)Ljava/lang/String;' in 'jdk/internal/module/ModuleInfo$ConstantPool'
  # this:     rsi:rsi   = 'jdk/internal/module/ModuleInfo$ConstantPool'
  # parm0:    rdx       = int
  # parm1:    rcx:rcx   = 'java/lang/String'
  #           [sp+0x40]  (sp of caller)
 ;; N551: #     out( B1 ) <- BLOCK HEAD IS JUNK  Freq: 1
  0x00007f9fb4d64620:   mov    r10d,DWORD PTR [rsi+0x8]
  0x00007f9fb4d64624:   movabs r12,0x800000000
  0x00007f9fb4d6462e:   add    r10,r12
  0x00007f9fb4d64631:   xor    r12,r12
  0x00007f9fb4d64634:   cmp    rax,r10
  0x00007f9fb4d64637:   jne    0x00007f9fb4cfeda0           ;   {runtime_call ic_miss_stub}
  0x00007f9fb4d6463d:   nop
  0x00007f9fb4d6463e:   nop
  0x00007f9fb4d6463f:   nop
[Verified Entry Point]
 ;; B1: #       out( B55 B2 ) <- BLOCK HEAD IS JUNK  Freq: 1
  0x00007f9fb4d64640:   mov    DWORD PTR [rsp-0x16000],eax
  0x00007f9fb4d64647:   push   rbp
  0x00007f9fb4d64648:   sub    rsp,0x30                     ;*synchronization entry
                                                            ; - jdk.internal.module.ModuleInfo$ConstantPool::decodeModuleName at -1 (line 876)
  0x00007f9fb4d6464c:   mov    r11,rsi
  0x00007f9fb4d6464f:   mov    r9,rcx
  0x00007f9fb4d64652:   mov    r10d,DWORD PTR [rcx+0xc]     ;*getfield value {reexecute=0 rethrow=0 return_oop=0}
                                                            ; - java.lang.String::length at 1 (line 673)
                                                            ; - jdk.internal.module.ModuleInfo$ConstantPool::decodeModuleName at 1 (line 876)
                                                            ; implicit exception: dispatches to 0x00007f9fb4d648fe
 ;; B2: #       out( B56 B3 ) <- in( B1 )  Freq: 0.999999

-- 
Andrew Haley
Java Platform Lead Engineer
Red Hat UK Ltd. <https://www.redhat.com>
https://keybase.io/andrewhaley
EAC8 43EB D3EF DB98 CC77 2FAD A5CD 6035 332F A671


More information about the hotspot-dev mailing list