review request (M): 6667042 PrintAssembly option does not work without special plugin

John Rose John.Rose at Sun.COM
Sun Feb 24 01:01:43 PST 2008


For putback to http://hg.openjdk.java.net/jdk7/hotspot-comp-gate/hotspot
6667042: PrintAssembly option does not work without special plugin
Summary: remove old private plugin interface, simplify, rework old  
plugin to use unchanged Gnu sources

   http://webrev.invokedynamic.info/jrose/6667042

-- John

P.S. More details:

The following HotSpot options (with -XX:) require an externally  
loadable disassembler module:
  +PrintAssembly  print assembly code for bytecoded and native methods
  +PrintNMethods  print nmethods as they are generated
  +PrintNativeNMethods  print native method wrappers as they are  
generated
  +PrintSignatureHandlers  print native method signature handlers
  +PrintAdapterHandlers  print adapters (i2c, c2i) as they are generated
  +PrintStubCode  print stubs: deopt, uncommon trap, exception,  
safepoint, runtime support
  +PrintInterpreter  print interpreter code

The original module ("disassembler.so") was dynamically loaded and  
called via a private C++ interface.

It was implemented in the late 1990's using an early version of the  
Gnu disassembler, gdb-4.16.

Three factors made this age poorly.
* The interface (C++ ABI) required close coupling between the JVM  
build toolchain and the disassembler.
* The implementation of the disassembler was produced by forking a  
copy of binutils and editing it.
* The implementation was not released to open source.

It has been replaced by a plugin, also in a shared library, called  
via an ANSI C interface.
An implementation of this interface on top of the current Gnu  
binutils is released as open source.
It may be implemented in other ways also.

Changes to JVM command line interface:
* Enable these these options under UnlockDiagnosticVMOptions in  
product mode.
* Make the CompileCommand 'print' use the external disassembler, if  
present.
* -XX:CompileCommand='option',$method,'PrintOptoAssembly' produces  
the old print command output.
* -XX:CompileCommand='option',$method,'PrintNMethods' continues to work

The DisassemblerEnv supplied a number of callbacks, but only two were  
significant, print and print_address.




More information about the hotspot-compiler-dev mailing list