291 for (int x = 0; x < 5; ++x) { // check up to a couple of backlinks
292 intptr_t* prev_sp = *(intptr_t**)sp;
293 if (prev_sp == 0) break; // end of stack
294 assert(prev_sp>sp, "broken stack");
295 sp = prev_sp;
296 }
297
298 if (sender_nm->is_deopt_mh_entry(_pc)) { // checks for deoptimization
299 address original_pc = sender_nm->get_original_pc(this);
300 assert(sender_nm->insts_contains(original_pc), "original PC must be in nmethod");
301 assert(sender_nm->is_method_handle_return(original_pc), "must be");
302 }
303 #endif
304 }
305 }
306
307 intptr_t *frame::initial_deoptimization_info() {
308 // unused... but returns fp() to minimize changes introduced by 7087445
309 return fp();
310 }
|
291 for (int x = 0; x < 5; ++x) { // check up to a couple of backlinks
292 intptr_t* prev_sp = *(intptr_t**)sp;
293 if (prev_sp == 0) break; // end of stack
294 assert(prev_sp>sp, "broken stack");
295 sp = prev_sp;
296 }
297
298 if (sender_nm->is_deopt_mh_entry(_pc)) { // checks for deoptimization
299 address original_pc = sender_nm->get_original_pc(this);
300 assert(sender_nm->insts_contains(original_pc), "original PC must be in nmethod");
301 assert(sender_nm->is_method_handle_return(original_pc), "must be");
302 }
303 #endif
304 }
305 }
306
307 intptr_t *frame::initial_deoptimization_info() {
308 // unused... but returns fp() to minimize changes introduced by 7087445
309 return fp();
310 }
311
312 #ifndef PRODUCT
313 // This is a generic constructor which is only used by pns() in debug.cpp.
314 frame::frame(void* sp, void* fp, void* pc) : _sp((intptr_t*)sp), _unextended_sp((intptr_t*)sp) {
315 find_codeblob_and_set_pc_and_deopt_state((address)pc); // also sets _fp and adjusts _unextended_sp
316 }
317 #endif
|