308 map->clear();
309 assert(map->include_argument_oops(), "should be set by clear");
310 if (jfa->last_Java_pc() != nullptr) {
311 frame fr(jfa->last_Java_sp(), jfa->last_Java_fp(), jfa->last_Java_pc());
312 return fr;
313 }
314 frame fr(jfa->last_Java_sp(), jfa->last_Java_fp());
315 return fr;
316 }
317
318 UpcallStub::FrameData* UpcallStub::frame_data_for_frame(const frame& frame) const {
319 ShouldNotCallThis();
320 return nullptr;
321 }
322
323 bool frame::upcall_stub_frame_is_first() const {
324 ShouldNotCallThis();
325 return false;
326 }
327
328 //------------------------------------------------------------------------------
329 // frame::verify_deopt_original_pc
330 //
331 // Verifies the calculated original PC of a deoptimization PC for the
332 // given unextended SP. The unextended SP might also be the saved SP
333 // for MethodHandle call sites.
334 #ifdef ASSERT
335 void frame::verify_deopt_original_pc(nmethod* nm, intptr_t* unextended_sp, bool is_method_handle_return) {
336 frame fr;
337
338 // This is ugly but it's better than to change {get,set}_original_pc
339 // to take an SP value as argument. And it's only a debugging
340 // method anyway.
341 fr._unextended_sp = unextended_sp;
342
343 address original_pc = nm->get_original_pc(&fr);
344 assert(nm->insts_contains_inclusive(original_pc),
345 "original PC must be in the main code section of the compiled method (or must be immediately following it)");
346 assert(nm->is_method_handle_return(original_pc) == is_method_handle_return, "must be");
347 }
|
308 map->clear();
309 assert(map->include_argument_oops(), "should be set by clear");
310 if (jfa->last_Java_pc() != nullptr) {
311 frame fr(jfa->last_Java_sp(), jfa->last_Java_fp(), jfa->last_Java_pc());
312 return fr;
313 }
314 frame fr(jfa->last_Java_sp(), jfa->last_Java_fp());
315 return fr;
316 }
317
318 UpcallStub::FrameData* UpcallStub::frame_data_for_frame(const frame& frame) const {
319 ShouldNotCallThis();
320 return nullptr;
321 }
322
323 bool frame::upcall_stub_frame_is_first() const {
324 ShouldNotCallThis();
325 return false;
326 }
327
328 JavaThread** frame::saved_thread_address(const frame& f) {
329 Unimplemented();
330 return nullptr;
331 }
332
333 //------------------------------------------------------------------------------
334 // frame::verify_deopt_original_pc
335 //
336 // Verifies the calculated original PC of a deoptimization PC for the
337 // given unextended SP. The unextended SP might also be the saved SP
338 // for MethodHandle call sites.
339 #ifdef ASSERT
340 void frame::verify_deopt_original_pc(nmethod* nm, intptr_t* unextended_sp, bool is_method_handle_return) {
341 frame fr;
342
343 // This is ugly but it's better than to change {get,set}_original_pc
344 // to take an SP value as argument. And it's only a debugging
345 // method anyway.
346 fr._unextended_sp = unextended_sp;
347
348 address original_pc = nm->get_original_pc(&fr);
349 assert(nm->insts_contains_inclusive(original_pc),
350 "original PC must be in the main code section of the compiled method (or must be immediately following it)");
351 assert(nm->is_method_handle_return(original_pc) == is_method_handle_return, "must be");
352 }
|