Project

cfg2asm

0.01
No release in over a year
A tool for disassembling Graal CFG files
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 13.0.6
~> 3.8
= 0.81

Runtime

~> 4.0
 Project Readme

cfg2asm

cfg2asm is a tool for printing assembly from control flow-graph, or CFG, files dumped by the GraalVM compiler.

The C1Visualizer is the tool usually used to work with GraalVM control flow graphs. cfg2asm is an open-source equivalent that works from the command line.

cfg2asm was forked from Seafoam.

Installation

% brew install capstone               # macOS
% sudo apt-get install libcapstone3   # Ubuntu < 21.04
% sudo apt-get install libcapstone4   # Ubuntu >= 21.04
% gem install cfg2asm

Use

-Dgraal.PrintBackendCFG=true for Java, or --vm.Dgraal.PrintBackendCFG=true for Truffle.

% cfg2asm examples/java/exampleArithOperator.cfg.gz
[examples/java/exampleArithOperator.cfg.gz]
				;Comment 0:	VERIFIED_ENTRY
	0x124b8de80:	nop	dword ptr [rax + rax]
				;Comment 5:	block B0 null
				;Comment 5:	0 [rsi|DWORD, rdx|DWORD, rbp|QWORD] = LABEL numbPhis: 0 align: false label: ?
				;Comment 5:	4 [] = HOTSPOTLOCKSTACK frameMapBuilder: org.graalvm.compiler.lir.amd64.AMD64FrameMapBuilder@26ba755b slotKind: QWORD
				;Comment 5:	10 rsi|DWORD = ADD (x: rsi|DWORD, y: rdx|DWORD) size: DWORD
	0x124b8de85:	add	esi, edx
				;Comment 7:	12 rax|DWORD = MOVE rsi|DWORD moveKind: DWORD
	0x124b8de87:	mov	eax, esi
				;Comment 9:	14 RETURN (savedRbp: rbp|QWORD, value: rax|DWORD) isStub: false requiresReservedStackAccessCheck: false thread: r15 scratchForSafepointOnReturn: rcx config: org.graalvm.compiler.hotspot.GraalHotSpotVMConfig@6c71283a
	0x124b8de89:	mov	rcx, qword ptr [r15 + 0x108]
				;Comment 16:	POLL_RETURN_FAR
	0x124b8de90:	test	dword ptr [rcx], eax
	0x124b8de92:	ret	
				;Comment 19:	{Stub<ExceptionHandlerStub.exceptionHandler>@0x11a9b9980:CallingConvention[rax|QWORD[.], rdx|QWORD]:CallingConvention[rax|QWORD[.], rdx|QWORD]; temps=rdi|ILLEGAL,xmm14|ILLEGAL,xmm15|ILLEGAL,xmm12|ILLEGAL,xmm13|ILLEGAL,xmm10|ILLEGAL,xmm11|ILLEGAL,xmm7|ILLEGAL,xmm8|ILLEGAL,xmm9|ILLEGAL,xmm0|ILLEGAL,xmm1|ILLEGAL,xmm2|ILLEGAL,xmm3|ILLEGAL,xmm4|ILLEGAL,xmm5|ILLEGAL,xmm6|ILLEGAL,rax|ILLEGAL,rcx|ILLEGAL,rdx|ILLEGAL,rsi|ILLEGAL,r8|ILLEGAL,r9|ILLEGAL,r10|ILLEGAL,r11|ILLEGAL}
				;Comment 19:	EXCEPTION_HANDLER_ENTRY
	0x124b8de93:	call	0x11a9b9980
	0x124b8de98:	nop	
				;Comment 25:	{Field[name=CompilerToVM::Data::SharedRuntime_deopt_blob_unpack, type=address, offset=0, address=0x10646a4d0, value=4740607520]:0x11a8fee20}
				;Comment 25:	DEOPT_HANDLER_ENTRY
	0x124b8de99:	call	0x11a8fee20
	0x124b8de9e:	nop	
	0x124b8de9f:	hlt	

Author

cfg2asm was written by Chris Seaton at Shopify, chris.seaton@shopify.com.

License

MIT