disassembly for foreign call wrapper
Deneau, Tom
tom.deneau at amd.com
Thu Nov 21 14:11:25 PST 2013
Doug --
In the particular case of a foreign call to UNCOMMON_TRAP (from AMD64DeoptimizeOp), I'm trying to understand the role that the LIRFrameState info parameter plays. It doesn't get passed to the foreign Deoptimization::uncommon_trap which takes a JavaThread* and an int (the actionAndReason int).
Since the LIRFrameState info doesn't get passed, I was trying to understand how the JVM gets the deoptimization information it needs. Does it come from using a table in each nmethod to map a physical pc to a trap_scope?
-- Tom
-----Original Message-----
From: Doug Simon [mailto:doug.simon at oracle.com]
Sent: Thursday, November 21, 2013 2:59 PM
To: Deneau, Tom
Cc: graal-dev at openjdk.java.net
Subject: Re: disassembly for foreign call wrapper
This is no wrapper - just the foreign call plus maybe a prologue/epilogue around the call. For example, each of the calls in the output below is to foreign call described by SystemSubstitutions.JAVA_TIME_MILLIS:
$ mx --vm server unittest -G:Log=CodeInstall -G:MethodFilter=test System_nanoTime01 JUnit version 4.8 .Loaded disassembler from /Users/dsimon/linz/basic-graal/jdk1.7.0_45/product/jre/lib/hsdis-amd64.dylib
[thread:1] scope:
[thread:1] scope: Compiling
[thread:1] scope: Compiling.CodeInstall
Code installed for HotSpotMethod<System_nanoTime01.test()>
----------------------------------------------------------------------
com/oracle/graal/jtt/jdk/System_nanoTime01.test [0x000000010971dba0, 0x000000010971dc40] 1280 bytes [Disassembling for mach='i386:x86-64'] [Entry Point] [Verified Entry Point] [Constants]
# {method} {0x0000000112bbfde8} 'test' '()I' in 'com/oracle/graal/jtt/jdk/System_nanoTime01'
# [sp+0x20] (sp of caller)
0x000000010971dba0: mov %rax,-0x14000(%rsp)
0x000000010971dba8: sub $0x18,%rsp
0x000000010971dbac: mov %rbp,0x10(%rsp)
0x000000010971dbb1: callq 0x0000000108c22934 ; {runtime_call}
0x000000010971dbb6: nop
0x000000010971dbb7: mov %rax,0x8(%rsp)
0x000000010971dbbc: callq 0x0000000108c22934 ; {runtime_call}
0x000000010971dbc1: nop
0x000000010971dbc2: sub 0x8(%rsp),%rax
0x000000010971dbc7: cmp $0x0,%rax
0x000000010971dbcb: jg 0x000000010971dc0d
0x000000010971dbd1: mov $0x1,%eax
0x000000010971dbd6: jmpq 0x000000010971dbff
0x000000010971dbdb: nopl 0x0(%rax,%rax,1)
0x000000010971dbe0: mov %eax,0x4(%rsp)
0x000000010971dbe4: callq 0x0000000108c22934 ; {runtime_call}
0x000000010971dbe9: nop
0x000000010971dbea: sub 0x8(%rsp),%rax
0x000000010971dbef: cmp $0x0,%rax
0x000000010971dbf3: jg 0x000000010971dc2a
0x000000010971dbf9: mov 0x4(%rsp),%eax
0x000000010971dbfd: inc %eax
0x000000010971dbff: cmp $0x989680,%eax
0x000000010971dc05: jge 0x000000010971dc23
0x000000010971dc0b: jmp 0x000000010971dbe0
0x000000010971dc0d: mov $0x1,%eax
0x000000010971dc12: mov 0x10(%rsp),%rbp
0x000000010971dc17: add $0x18,%rsp
0x000000010971dc1b: mov -0x1784c1b(%rip),%rbx # 0x0000000107f99007
; {poll_return}
0x000000010971dc22: retq
0x000000010971dc23: mov $0x0,%eax
0x000000010971dc28: jmp 0x000000010971dc12
0x000000010971dc2a: mov $0x1,%eax
0x000000010971dc2f: jmp 0x000000010971dc12
[Exception Handler]
0x000000010971dc31: callq 0x000000010971dd20 ; {runtime_call}
0x000000010971dc36: nop
[Deopt Handler Code]
0x000000010971dc37: callq 0x00000001095deb00 ; {runtime_call}
0x000000010971dc3c: nop
[Stub Code]
0x000000010971dc3d: hlt
0x000000010971dc3e: hlt
0x000000010971dc3f: hlt
On Nov 21, 2013, at 9:17 PM, Deneau, Tom <tom.deneau at amd.com> wrote:
> Is there a Log scoping that will show the disassembly for the code that is the wrapper for a foreign call to a non-stub.
>
> I am currently using -G:Log=CodeInstall which gives me normal methods plus CompilingStub.CodeInstall .
>
> -- Tom
More information about the graal-dev
mailing list