src/share/vm/runtime/deoptimization.cpp

changeset 2620
4f148718983e
parent 2508
b92c45f2bc75
child 2868
2e038ad0c1d0
equal deleted inserted replaced
2618:df1347358fe6 2620:4f148718983e
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 }

mercurial