hotspot/src/cpu/sparc/vm/templateTable_sparc.cpp
void TemplateTable::_breakpoint() {
{- -------------------------------------------
(1)
---------------------------------------- -}
// Note: We get here even if we are single stepping..
// jbug inists on setting breakpoints at every bytecode
// even if we are in single step mode.
{- -------------------------------------------
(1) (assert) (See: TemplateTable::transition())
---------------------------------------- -}
transition(vtos, vtos);
{- -------------------------------------------
(1) コード生成:
「まず InterpreterRuntime::get_original_bytecode_at() を呼んで,
original のバイトコード取得する.」
---------------------------------------- -}
// get the unpatched byte code
__ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::get_original_bytecode_at), Lmethod, Lbcp);
__ mov(O0, Lbyte_code);
{- -------------------------------------------
(1) コード生成:
「InterpreterRuntime::_breakpoint() を呼んでブレークポイント処理を行う.」
---------------------------------------- -}
// post the breakpoint event
__ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::_breakpoint), Lmethod, Lbcp);
{- -------------------------------------------
(1) コード生成:
「InterpreterMacroAssembler::dispatch_normal() が生成するコードにより,
original のバイトコードに対応するテンプレートにジャンプする.」
(ここが InterpreterMacroAssembler::dispatch_next() ではないのは
original のバイトコードが実行されていない状態で safepoint になると困るから?? #TODO
(復帰させるときに同じ箇所からやり直させたら breakpoint が 2回出てしまうわけだし))
---------------------------------------- -}
// complete the execution of original bytecode
__ dispatch_normal(vtos);
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.