http://openjdk.java.net/groups/hotspot/docs/jvmtiImpl.pdf : JVM Tool Interface (JVM TI) Implementation in HotSpot, Copyright 2007, Sun Microsystems, Inc
JVMTI 関係のソースコードは hotspot/src/share/vm/prims/ ディレクトリ下にある (See: here for details).
ただし, JVMTI 関係のソースコードの中には, ビルド時に hotspot/src/share/vm/prims/jvmti.xml という XML ファイルから XSLT で自動生成されるものがある.
そのため, ビルド手順は以下のようになっている.
関連するビルド規則は hotspot/make/${os}/makefiles/jvmti.make に書かれている
また, bytecodeInterpreter 関係の JVMTI コードは bytecodeInterpreterWithChecks.xml から自動生成されている.
ついでに, JVMTI 関係の解説用 HTML ファイル(jvmti.html) も jvmti.xml から生成される (ただしこいつは普通にビルドするだけでは作られないようだが...). 中身は http://docs.oracle.com/javase/7/docs/platform/jvmti/jvmti.html と全く同じ.
以下, 生成されるソースコードと生成元の一覧.
Generated Files | Original Files |
---|---|
jvmtiEnter.cpp | jvmtiEnter.xsl (パラメータは interface jvmti) |
jvmtiEnterTrace.cpp | jvmtiEnter.xsl (パラメータは trace Trace) |
jvmtiEnvRecommended.cpp | jvmtiEnv.xsl (※) |
jvmtiEnv.hpp | jvmtiHpp.xsl |
jvmti.h | jvmtiH.xsl |
bytecodeInterpreterWithChecks.cpp | bytecodeInterpreterWithChecks.xml, bytecodeInterpreterWithChecks.xsl |
jvmti.html | jvmti.xsl |
(※) 正確には, まず jvmtiEnv.xsl から jvmtiEnvStub.cpp を作成し, その後 jvmtiEnvFill.class という Java プログラムで jvmtiEnvRecommended.cpp を生成する. jvmtiEnvStub.cpp は JvmtiEnv クラスのメソッド定義を書いたファイル. ただし各メソッドの body 部分には単に "return JVMTI_ERROR_MUST_POSSESS_CAPABILITY" とだけ書かれている. その後で jvmtiEnvFill.class プログラムが jvmtiEnv.cpp から各関数の中身を抽出してくることで jvmtiEnvRecommended.cpp が生成される. (ところで jvmtiEnvRecommended.cpp は何のためのファイル?? #TODO)
((cite: hotspot/make/linux/makefiles/jvmti.make))
$(JvmtiOutDir)/jvmtiEnter.cpp: $(both) $(JvmtiSrcDir)/jvmtiEnter.xsl
@echo Generating $@
$(XSLT) -IN $(JvmtiSrcDir)/jvmti.xml -XSL $(JvmtiSrcDir)/jvmtiEnter.xsl -OUT $(JvmtiOutDir)/jvmtiEnter.cpp -PARAM interface jvmti
((cite: hotspot/make/linux/makefiles/jvmti.make))
$(JvmtiOutDir)/jvmtiEnterTrace.cpp: $(both) $(JvmtiSrcDir)/jvmtiEnter.xsl
@echo Generating $@
$(XSLT) -IN $(JvmtiSrcDir)/jvmti.xml -XSL $(JvmtiSrcDir)/jvmtiEnter.xsl -OUT $(JvmtiOutDir)/jvmtiEnterTrace.cpp -PARAM interface jvmti -PARAM trace Trace
((cite: hotspot/make/linux/makefiles/jvmti.make))
$(JvmtiOutDir)/jvmtiEnvRecommended.cpp: $(both) $(JvmtiSrcDir)/jvmtiEnv.xsl $(JvmtiSrcDir)/jvmtiEnv.cpp $(JvmtiEnvFillClass)
@echo Generating $@
$(XSLT) -IN $(JvmtiSrcDir)/jvmti.xml -XSL $(JvmtiSrcDir)/jvmtiEnv.xsl -OUT $(JvmtiOutDir)/jvmtiEnvStub.cpp
$(QUIETLY) $(REMOTE) $(RUN.JAVA) -classpath $(JvmtiOutDir) jvmtiEnvFill $(JvmtiSrcDir)/jvmtiEnv.cpp $(JvmtiOutDir)/jvmtiEnvStub.cpp $(JvmtiOutDir)/jvmtiEnvRecommended.cpp
((cite: hotspot/make/linux/makefiles/jvmti.make))
$(JvmtiOutDir)/jvmtiEnv.hpp: $(both) $(JvmtiSrcDir)/jvmtiHpp.xsl
@echo Generating $@
$(XSLT) -IN $(JvmtiSrcDir)/jvmti.xml -XSL $(JvmtiSrcDir)/jvmtiHpp.xsl -OUT $(JvmtiOutDir)/jvmtiEnv.hpp
((cite: hotspot/make/linux/makefiles/jvmti.make))
$(JvmtiOutDir)/jvmti.h: $(both) $(JvmtiSrcDir)/jvmtiH.xsl
@echo Generating $@
$(XSLT) -IN $(JvmtiSrcDir)/jvmti.xml -XSL $(JvmtiSrcDir)/jvmtiH.xsl -OUT $(JvmtiOutDir)/jvmti.h
((cite: hotspot/make/linux/makefiles/jvmti.make))
$(JvmtiOutDir)/bytecodeInterpreterWithChecks.cpp: $(JvmtiGenClass) $(InterpreterSrcDir)/bytecodeInterpreter.cpp $(InterpreterSrcDir)/bytecodeInterpreterWithChecks.xml $(InterpreterSrcDir)/bytecodeInterpreterWithChecks.xsl
@echo Generating $@
$(XSLT) -IN $(InterpreterSrcDir)/bytecodeInterpreterWithChecks.xml -XSL $(InterpreterSrcDir)/bytecodeInterpreterWithChecks.xsl -OUT $(JvmtiOutDir)/bytecodeInterpreterWithChecks.cpp
((cite: hotspot/make/linux/makefiles/jvmti.make))
$(JvmtiOutDir)/jvmti.html: $(both) $(JvmtiSrcDir)/jvmti.xsl
@echo Generating $@
$(XSLT) -IN $(JvmtiSrcDir)/jvmti.xml -XSL $(JvmtiSrcDir)/jvmti.xsl -OUT $(JvmtiOutDir)/jvmti.html
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.