src/share/vm/runtime/vframe.hpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 6833129 Sdiff src/share/vm/runtime

src/share/vm/runtime/vframe.hpp

Print this page




 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 


src/share/vm/runtime/vframe.hpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File