hotspot/src/cpu/x86/vm/templateInterpreter_x86_64.cpp
address TemplateInterpreterGenerator::generate_StackOverflowError_handler() {
{- -------------------------------------------
(1) (ここからが生成するコードの始まり)
---------------------------------------- -}
address entry = __ pc();
{- -------------------------------------------
(1) (デバッグ用の処理) (#ifdef ASSERT 時にのみ実行)
コード生成: (デバッグ用の処理)
---------------------------------------- -}
#ifdef ASSERT
{
Label L;
__ lea(rax, Address(rbp,
frame::interpreter_frame_monitor_block_top_offset *
wordSize));
__ cmpptr(rax, rsp); // rax = maximal rsp for current rbp (stack
// grows negative)
__ jcc(Assembler::aboveEqual, L); // check if frame is complete
__ stop ("interpreter frame not set up");
__ bind(L);
}
#endif // ASSERT
{- -------------------------------------------
(1) #TODO
---------------------------------------- -}
// Restore bcp under the assumption that the current frame is still
// interpreted
__ restore_bcp();
{- -------------------------------------------
(1) コード生成:
「オペランドスタック("expression stack")を空にする.」
---------------------------------------- -}
// expression stack must be empty before entering the VM if an
// exception happened
__ empty_expression_stack();
{- -------------------------------------------
(1) コード生成:
「InterpreterRuntime::throw_StackOverflowError() を呼び出す.」
---------------------------------------- -}
// throw exception
__ call_VM(noreg,
CAST_FROM_FN_PTR(address,
InterpreterRuntime::throw_StackOverflowError));
{- -------------------------------------------
(1) 以上で生成したコードの先頭アドレスをリターン.
---------------------------------------- -}
return entry;
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.