hotspot/src/cpu/x86/vm/templateTable_x86_64.cpp
//-----------------------------------------------------------------------------
// Breakpoints
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
__ get_method(c_rarg1);
__ call_VM(noreg,
CAST_FROM_FN_PTR(address,
InterpreterRuntime::get_original_bytecode_at),
c_rarg1, r13);
__ mov(rbx, rax);
{- -------------------------------------------
(1) コード生成:
「InterpreterRuntime::_breakpoint() を呼んでブレークポイント処理を行う.」
---------------------------------------- -}
// post the breakpoint event
__ get_method(c_rarg1);
__ call_VM(noreg,
CAST_FROM_FN_PTR(address, InterpreterRuntime::_breakpoint),
c_rarg1, r13);
{- -------------------------------------------
(1) コード生成:
「InterpreterMacroAssembler::dispatch_only_normal() が生成するコードにより,
original のバイトコードに対応するテンプレートにジャンプする.」
(ここが InterpreterMacroAssembler::dispatch_next() ではないのは
original のバイトコードが実行されていない状態で safepoint になると困るから?? #TODO
(復帰させるときに同じ箇所からやり直させたら breakpoint が 2回出てしまうわけだし))
---------------------------------------- -}
// complete the execution of original bytecode
__ dispatch_only_normal(vtos);
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.