Top


定義場所(file name)

hotspot/src/cpu/x86/vm/templateTable_x86_64.cpp

説明(description)

//-----------------------------------------------------------------------------
// Breakpoints

名前(function name)

void TemplateTable::_breakpoint() {

本体部(body)

  {- -------------------------------------------
  (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.