hotspot/src/share/vm/runtime/deoptimization.cpp
changeset 8657 5bb183666ecd
parent 8107 78e5bd944384
child 9437 9981851b4b8c
equal deleted inserted replaced
8655:fec854507832 8657:5bb183666ecd
    99   _number_of_frames          = number_of_frames;
    99   _number_of_frames          = number_of_frames;
   100   _frame_sizes               = frame_sizes;
   100   _frame_sizes               = frame_sizes;
   101   _frame_pcs                 = frame_pcs;
   101   _frame_pcs                 = frame_pcs;
   102   _register_block            = NEW_C_HEAP_ARRAY(intptr_t, RegisterMap::reg_count * 2);
   102   _register_block            = NEW_C_HEAP_ARRAY(intptr_t, RegisterMap::reg_count * 2);
   103   _return_type               = return_type;
   103   _return_type               = return_type;
       
   104   _initial_fp                = 0;
   104   // PD (x86 only)
   105   // PD (x86 only)
   105   _counter_temp              = 0;
   106   _counter_temp              = 0;
   106   _initial_fp                = 0;
       
   107   _unpack_kind               = 0;
   107   _unpack_kind               = 0;
   108   _sender_sp_temp            = 0;
   108   _sender_sp_temp            = 0;
   109 
   109 
   110   _total_frame_sizes         = size_of_frames();
   110   _total_frame_sizes         = size_of_frames();
   111 }
   111 }
   457                                       caller_adjustment * BytesPerWord,
   457                                       caller_adjustment * BytesPerWord,
   458                                       number_of_frames,
   458                                       number_of_frames,
   459                                       frame_sizes,
   459                                       frame_sizes,
   460                                       frame_pcs,
   460                                       frame_pcs,
   461                                       return_type);
   461                                       return_type);
   462 #if defined(IA32) || defined(AMD64)
   462   // On some platforms, we need a way to pass fp to the unpacking code
   463   // We need a way to pass fp to the unpacking code so the skeletal frames
   463   // so the skeletal frames come out correct.
   464   // come out correct. This is only needed for x86 because of c2 using ebp
   464   info->set_initial_fp((intptr_t) array->sender().fp());
   465   // as an allocatable register. So this update is useless (and harmless)
       
   466   // on the other platforms. It would be nice to do this in a different
       
   467   // way but even the old style deoptimization had a problem with deriving
       
   468   // this value. NEEDS_CLEANUP
       
   469   // Note: now that c1 is using c2's deopt blob we must do this on all
       
   470   // x86 based platforms
       
   471   intptr_t** fp_addr = (intptr_t**) (((address)info) + info->initial_fp_offset_in_bytes());
       
   472   *fp_addr = array->sender().fp(); // was adapter_caller
       
   473 #endif /* IA32 || AMD64 */
       
   474 
   465 
   475   if (array->frames() > 1) {
   466   if (array->frames() > 1) {
   476     if (VerifyStack && TraceDeoptimization) {
   467     if (VerifyStack && TraceDeoptimization) {
   477       tty->print_cr("Deoptimizing method containing inlining");
   468       tty->print_cr("Deoptimizing method containing inlining");
   478     }
   469     }