RFR 8222712 [lworld] print parameter types for different compiled entry points

Ioi Lam ioi.lam at oracle.com
Thu Apr 18 01:09:46 UTC 2019


https://bugs.openjdk.java.net/browse/JDK-8222712
http://cr.openjdk.java.net/~iklam/valhalla/8222712-print-param-types-for-diff-entry-points.v01/

Compiled methods can have up to 3 entry points that take different types
of parameters. For debugging purposes, it's useful to print the types of 
each
entry point.

The following example shows how the [Verified Entry Point] of a C1 method
shuffles the parameters before jumping to the [Verified Value Entry Point]:

[Disassembling for mach='i386:x86-64']
   # {method} {0x00007fa9108ed690} 'test' '(QI2CStatic$V;IIIIIIII)I' in 
'I2CStatic'
[Entry Point]
[Verified Entry Point]
[Verified Value Entry Point (RO)]
   # parm0: rsi = int
   # parm1: rdx = int
   # parm2: rcx = int
   # parm3: r8 = int
   # parm4: r9 = int
   # parm5: rdi = int
   # parm6: [sp+0x40] = int (sp of caller)
   # parm7: [sp+0x48] = int [RESERVED]
   # parm8: [sp+0x50] = int
   # parm9: [sp+0x58] = int [RESERVED]
   # parm10: [sp+0x60] = int
   # parm11: [sp+0x68] = int
   0x00007fa924e371e0: push %rbp
   0x00007fa924e371e1: sub $0x30,%rsp
   0x00007fa924e371e5: mov $0x7fa9108ed690,%rbx
   0x00007fa924e371ef: callq 0x00007fa9249d9ac0 ; {runtime_call 
buffer_value_args}
   0x00007fa924e371f4: mov 0x10(%rax),%r11d
   0x00007fa924e371f8: mov %esi,0x10(%r11)
   0x00007fa924e371fc: mov %edx,0x14(%r11)
   0x00007fa924e37200: mov %r11,%rsi
   0x00007fa924e37203: mov %rcx,%rdx
   0x00007fa924e37206: mov %r8,%rcx
   0x00007fa924e37209: mov %r9,%r8
   0x00007fa924e3720c: mov %rdi,%r9
   0x00007fa924e3720f: mov 0x40(%rsp),%rdi
   0x00007fa924e37214: mov 0x50(%rsp),%r13
   0x00007fa924e37219: mov %r13,0x40(%rsp)
   0x00007fa924e3721e: mov 0x60(%rsp),%r13
   0x00007fa924e37223: mov %r13,0x48(%rsp)
   0x00007fa924e37228: mov 0x68(%rsp),%r13
   0x00007fa924e3722d: mov %r13,0x50(%rsp)
   0x00007fa924e37232: pop %rbp
   0x00007fa924e37233: add $0x30,%rsp
   0x00007fa924e37237: jmpq 0x00007fa924e37240
   ...
[Verified Value Entry Point]
   # parm0: rsi:rsi = 'java/lang/Object'
   # parm1: rdx = int
   # parm2: rcx = int
   # parm3: r8 = int
   # parm4: r9 = int
   # parm5: rdi = int
   # parm6: [sp+0x40] = int (sp of caller)
   # parm7: [sp+0x48] = int
   # parm8: [sp+0x50] = int
   0x00007fa924e37240: mov %eax,-0x16000(%rsp)
   0x00007fa924e37247: push %rbp
   0x00007fa924e37248: sub $0x30,%rsp



More information about the valhalla-dev mailing list