< prev index next >

src/hotspot/share/interpreter/interpreterRuntime.hpp

Print this page

*** 40,72 **** class InterpreterRuntime: AllStatic { friend class BytecodeClosure; // for method and bcp friend class PrintingClosure; // for method and bcp private: ! // Helper functions to access current interpreter state ! static frame last_frame(JavaThread *thread) { return thread->last_frame(); } ! static Method* method(JavaThread *thread) { return last_frame(thread).interpreter_frame_method(); } ! static address bcp(JavaThread *thread) { return last_frame(thread).interpreter_frame_bcp(); } ! static int bci(JavaThread *thread) { return last_frame(thread).interpreter_frame_bci(); } ! static void set_bcp_and_mdp(address bcp, JavaThread*thread); ! static Bytecodes::Code code(JavaThread *thread) { // pass method to avoid calling unsafe bcp_to_method (partial fix 4926272) ! return Bytecodes::code_at(method(thread), bcp(thread)); } ! static Bytecode bytecode(JavaThread *thread) { return Bytecode(method(thread), bcp(thread)); } ! static int get_index_u1(JavaThread *thread, Bytecodes::Code bc) ! { return bytecode(thread).get_index_u1(bc); } ! static int get_index_u2(JavaThread *thread, Bytecodes::Code bc) ! { return bytecode(thread).get_index_u2(bc); } ! static int get_index_u2_cpcache(JavaThread *thread, Bytecodes::Code bc) ! { return bytecode(thread).get_index_u2_cpcache(bc); } ! static int get_index_u4(JavaThread *thread, Bytecodes::Code bc) ! { return bytecode(thread).get_index_u4(bc); } ! static int number_of_dimensions(JavaThread *thread) { return bcp(thread)[3]; } ! static ConstantPoolCacheEntry* cache_entry_at(JavaThread *thread, int i) { return method(thread)->constants()->cache()->entry_at(i); } ! static ConstantPoolCacheEntry* cache_entry(JavaThread *thread) { return cache_entry_at(thread, Bytes::get_native_u2(bcp(thread) + 1)); } static void note_trap_inner(JavaThread* thread, int reason, const methodHandle& trap_method, int trap_bci, TRAPS); static void note_trap(JavaThread *thread, int reason, TRAPS); #ifdef CC_INTERP // Profile traps in C++ interpreter. --- 40,97 ---- class InterpreterRuntime: AllStatic { friend class BytecodeClosure; // for method and bcp friend class PrintingClosure; // for method and bcp private: ! // Helper class to access current interpreter state ! class LastFrameAccessor : public StackObj { ! frame _last_frame; ! public: ! LastFrameAccessor(JavaThread* thread) { ! assert(thread == Thread::current(), "sanity"); ! _last_frame = thread->last_frame(); ! } ! bool is_interpreted_frame() const { return _last_frame.is_interpreted_frame(); } ! Method* method() const { return _last_frame.interpreter_frame_method(); } ! address bcp() const { return _last_frame.interpreter_frame_bcp(); } ! int bci() const { return _last_frame.interpreter_frame_bci(); } ! address mdp() const { return _last_frame.interpreter_frame_mdp(); } ! ! void set_bcp(address bcp) { _last_frame.interpreter_frame_set_bcp(bcp); } ! void set_mdp(address dp) { _last_frame.interpreter_frame_set_mdp(dp); } ! // pass method to avoid calling unsafe bcp_to_method (partial fix 4926272) ! Bytecodes::Code code() const { return Bytecodes::code_at(method(), bcp()); } ! ! Bytecode bytecode() const { return Bytecode(method(), bcp()); } ! int get_index_u1(Bytecodes::Code bc) const { return bytecode().get_index_u1(bc); } ! int get_index_u2(Bytecodes::Code bc) const { return bytecode().get_index_u2(bc); } ! int get_index_u2_cpcache(Bytecodes::Code bc) const ! { return bytecode().get_index_u2_cpcache(bc); } ! int get_index_u4(Bytecodes::Code bc) const { return bytecode().get_index_u4(bc); } ! int number_of_dimensions() const { return bcp()[3]; } ! ConstantPoolCacheEntry* cache_entry_at(int i) const ! { return method()->constants()->cache()->entry_at(i); } ! ConstantPoolCacheEntry* cache_entry() const { return cache_entry_at(Bytes::get_native_u2(bcp() + 1)); } ! ! oop callee_receiver(Symbol* signature) { ! return _last_frame.interpreter_callee_receiver(signature); ! } ! BasicObjectLock* monitor_begin() const { ! return _last_frame.interpreter_frame_monitor_begin(); ! } ! BasicObjectLock* monitor_end() const { ! return _last_frame.interpreter_frame_monitor_end(); } ! BasicObjectLock* next_monitor(BasicObjectLock* current) const { ! return _last_frame.next_monitor_in_interpreter_frame(current); ! } ! ! frame& get_frame() { return _last_frame; } ! }; ! static void set_bcp_and_mdp(address bcp, JavaThread*thread); static void note_trap_inner(JavaThread* thread, int reason, const methodHandle& trap_method, int trap_bci, TRAPS); static void note_trap(JavaThread *thread, int reason, TRAPS); #ifdef CC_INTERP // Profile traps in C++ interpreter.
*** 137,147 **** // Breakpoints static void _breakpoint(JavaThread* thread, Method* method, address bcp); static Bytecodes::Code get_original_bytecode_at(JavaThread* thread, Method* method, address bcp); static void set_original_bytecode_at(JavaThread* thread, Method* method, address bcp, Bytecodes::Code new_code); ! static bool is_breakpoint(JavaThread *thread) { return Bytecodes::code_or_bp_at(bcp(thread)) == Bytecodes::_breakpoint; } // Safepoints static void at_safepoint(JavaThread* thread); // Debugger support --- 162,172 ---- // Breakpoints static void _breakpoint(JavaThread* thread, Method* method, address bcp); static Bytecodes::Code get_original_bytecode_at(JavaThread* thread, Method* method, address bcp); static void set_original_bytecode_at(JavaThread* thread, Method* method, address bcp, Bytecodes::Code new_code); ! static bool is_breakpoint(JavaThread *thread) { return Bytecodes::code_or_bp_at(LastFrameAccessor(thread).bcp()) == Bytecodes::_breakpoint; } // Safepoints static void at_safepoint(JavaThread* thread); // Debugger support
< prev index next >