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 ("dissassembler.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