hotspot/src/share/vm/prims/jvmtiEnv.cpp
// method_oop - pre-checked for validity, but may be NULL meaning obsolete method
// bytecode_count_ptr - pre-checked for NULL
// bytecodes_ptr - pre-checked for NULL
jvmtiError
JvmtiEnv::GetBytecodes(methodOop method_oop, jint* bytecode_count_ptr, unsigned char** bytecodes_ptr) {
{- -------------------------------------------
(1) method_oop 引数が NULL の場合は, JVMTI_ERROR_INVALID_METHODID エラーをリターン
---------------------------------------- -}
NULL_CHECK(method_oop, JVMTI_ERROR_INVALID_METHODID);
{- -------------------------------------------
(1) (変数宣言など)
---------------------------------------- -}
HandleMark hm;
methodHandle method(method_oop);
{- -------------------------------------------
(1) methodOop から bytecode の大きさを取得し, その分だけメモリを確保する.
(確保に失敗したらエラーをリターン)
---------------------------------------- -}
jint size = (jint)method->code_size();
jvmtiError err = allocate(size, bytecodes_ptr);
if (err != JVMTI_ERROR_NONE) {
return err;
}
{- -------------------------------------------
(1) 引数の bytecode_count_ptr を取得した大きさに設定し,
JvmtiClassFileReconstituter::copy_bytecodes() でバイトコード情報を取得する.
---------------------------------------- -}
(*bytecode_count_ptr) = size;
// get byte codes
JvmtiClassFileReconstituter::copy_bytecodes(method, *bytecodes_ptr);
{- -------------------------------------------
(1) リターン
---------------------------------------- -}
return JVMTI_ERROR_NONE;
} /* end GetBytecodes */
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.