hotspot/src/cpu/x86/vm/frame_x86.inline.hpp

Print this page
rev 611 : Merge

*** 1,10 **** - #ifdef USE_PRAGMA_IDENT_HDR - #pragma ident "@(#)frame_x86.inline.hpp 1.76 07/09/17 09:35:34 JVM" - #endif /* ! * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 73,91 **** inline frame::frame(intptr_t* sp, intptr_t* fp) { _sp = sp; _unextended_sp = sp; _fp = fp; _pc = (address)(sp[-1]); ! assert(_pc != NULL, "no pc?"); _cb = CodeCache::find_blob(_pc); ! // In case of native stubs, the pc retreived here might be ! // wrong. (the _last_native_pc will have the right value) ! // So do not put add any asserts on the _pc here. ! ! // QQQ The above comment is wrong and has been wrong for years. This constructor ! // should (and MUST) not be called in that situation. In the native situation ! // the pc should be supplied to the constructor. _deopt_state = not_deoptimized; if (_cb != NULL && _cb->is_nmethod() && ((nmethod*)_cb)->is_deopt_pc(_pc)) { _pc = (((nmethod*)_cb)->get_original_pc(this)); _deopt_state = is_deoptimized; } else { --- 70,93 ---- inline frame::frame(intptr_t* sp, intptr_t* fp) { _sp = sp; _unextended_sp = sp; _fp = fp; _pc = (address)(sp[-1]); ! ! // Here's a sticky one. This constructor can be called via AsyncGetCallTrace ! // when last_Java_sp is non-null but the pc fetched is junk. If we are truly ! // unlucky the junk value could be to a zombied method and we'll die on the ! // find_blob call. This is also why we can have no asserts on the validity ! // of the pc we find here. AsyncGetCallTrace -> pd_get_top_frame_for_signal_handler ! // -> pd_last_frame should use a specialized version of pd_last_frame which could ! // call a specilaized frame constructor instead of this one. ! // Then we could use the assert below. However this assert is of somewhat dubious ! // value. ! // assert(_pc != NULL, "no pc?"); ! _cb = CodeCache::find_blob(_pc); ! _deopt_state = not_deoptimized; if (_cb != NULL && _cb->is_nmethod() && ((nmethod*)_cb)->is_deopt_pc(_pc)) { _pc = (((nmethod*)_cb)->get_original_pc(this)); _deopt_state = is_deoptimized; } else {
*** 155,165 **** return &(get_interpreterState()->_locals); } inline intptr_t* frame::interpreter_frame_bcx_addr() const { assert(is_interpreted_frame(), "must be interpreted"); ! return (jint*) &(get_interpreterState()->_bcp); } // Constant pool cache --- 157,167 ---- return &(get_interpreterState()->_locals); } inline intptr_t* frame::interpreter_frame_bcx_addr() const { assert(is_interpreted_frame(), "must be interpreted"); ! return (intptr_t*) &(get_interpreterState()->_bcp); } // Constant pool cache
*** 175,185 **** return &(get_interpreterState()->_method); } inline intptr_t* frame::interpreter_frame_mdx_addr() const { assert(is_interpreted_frame(), "must be interpreted"); ! return (jint*) &(get_interpreterState()->_mdx); } // top of expression stack inline intptr_t* frame::interpreter_frame_tos_address() const { assert(is_interpreted_frame(), "wrong frame type"); --- 177,187 ---- return &(get_interpreterState()->_method); } inline intptr_t* frame::interpreter_frame_mdx_addr() const { assert(is_interpreted_frame(), "must be interpreted"); ! return (intptr_t*) &(get_interpreterState()->_mdx); } // top of expression stack inline intptr_t* frame::interpreter_frame_tos_address() const { assert(is_interpreted_frame(), "wrong frame type");
*** 287,292 **** } inline void frame::set_saved_oop_result(RegisterMap* map, oop obj) { *((oop*) map->location(rax->as_VMReg())) = obj; } - --- 289,293 ----