385 if (WizardMode) {
386 tty->print_cr("Error in fill_from_frame: pc_desc for "
387 INTPTR_FORMAT " not found or invalid at %d",
388 _frame.pc(), decode_offset);
389 nm()->print();
390 nm()->method()->print_codes();
391 nm()->print_code();
392 nm()->print_pcs();
393 }
394 #endif
395 // Provide a cheap fallback in product mode. (See comment above.)
396 found_bad_method_frame();
397 fill_from_compiled_native_frame();
398 return;
399 }
400
401 // Decode first part of scopeDesc
402 DebugInfoReadStream buffer(nm(), decode_offset);
403 _sender_decode_offset = buffer.read_int();
404 _method = methodOop(buffer.read_oop());
405 _bci = buffer.read_bci();
406
407 assert(_method->is_method(), "checking type of decoded method");
408 }
409
410 // The native frames are handled specially. We do not rely on ScopeDesc info
411 // since the pc might not be exact due to the _last_native_pc trick.
412 inline void vframeStreamCommon::fill_from_compiled_native_frame() {
413 _mode = compiled_mode;
414 _sender_decode_offset = DebugInformationRecorder::serialized_null;
415 _method = nm()->method();
416 _bci = 0;
417 }
418
419 inline bool vframeStreamCommon::fill_from_frame() {
420 // Interpreted frame
421 if (_frame.is_interpreted_frame()) {
422 fill_from_interpreter_frame();
423 return true;
424 }
425
|
385 if (WizardMode) {
386 tty->print_cr("Error in fill_from_frame: pc_desc for "
387 INTPTR_FORMAT " not found or invalid at %d",
388 _frame.pc(), decode_offset);
389 nm()->print();
390 nm()->method()->print_codes();
391 nm()->print_code();
392 nm()->print_pcs();
393 }
394 #endif
395 // Provide a cheap fallback in product mode. (See comment above.)
396 found_bad_method_frame();
397 fill_from_compiled_native_frame();
398 return;
399 }
400
401 // Decode first part of scopeDesc
402 DebugInfoReadStream buffer(nm(), decode_offset);
403 _sender_decode_offset = buffer.read_int();
404 _method = methodOop(buffer.read_oop());
405 // Deoptimization needs reexecute bit to determine whether to reexecute the bytecode
406 // only at the time when it "unpack_frames", and the reexecute bit info could always
407 // be obtained from the scopeDesc in the compiledVFrame. As a result, we don't keep
408 // the reexecute bit here.
409 bool dummy_reexecute;
410 _bci = buffer.read_bci_and_reexecute(dummy_reexecute);
411
412 assert(_method->is_method(), "checking type of decoded method");
413 }
414
415 // The native frames are handled specially. We do not rely on ScopeDesc info
416 // since the pc might not be exact due to the _last_native_pc trick.
417 inline void vframeStreamCommon::fill_from_compiled_native_frame() {
418 _mode = compiled_mode;
419 _sender_decode_offset = DebugInformationRecorder::serialized_null;
420 _method = nm()->method();
421 _bci = 0;
422 }
423
424 inline bool vframeStreamCommon::fill_from_frame() {
425 // Interpreted frame
426 if (_frame.is_interpreted_frame()) {
427 fill_from_interpreter_frame();
428 return true;
429 }
430
|