459 // area as created by the compiled frame will not be usable by
460 // the interpreter. (Depending on the calling convention there
461 // may not even be enough space).
462
463 // QQQ I'd rather see this pushed down into last_frame_adjust
464 // and have it take the sender (aka caller).
465
466 if (deopt_sender.is_compiled_frame() || caller_was_method_handle) {
467 caller_adjustment = last_frame_adjust(0, callee_locals);
468 } else if (callee_locals > callee_parameters) {
469 // The caller frame may need extending to accommodate
470 // non-parameter locals of the first unpacked interpreted frame.
471 // Compute that adjustment.
472 caller_adjustment = last_frame_adjust(callee_parameters, callee_locals);
473 }
474
475 // If the sender is deoptimized the we must retrieve the address of the handler
476 // since the frame will "magically" show the original pc before the deopt
477 // and we'd undo the deopt.
478
479 frame_pcs[0] = deopt_sender.raw_pc();
480
481 #ifndef SHARK
482 assert(CodeCache::find_blob_unsafe(frame_pcs[0]) != NULL, "bad pc");
483 #endif // SHARK
484
485 UnrollBlock* info = new UnrollBlock(array->frame_size() * BytesPerWord,
486 caller_adjustment * BytesPerWord,
487 caller_was_method_handle ? 0 : callee_parameters,
488 number_of_frames,
489 frame_sizes,
490 frame_pcs,
491 return_type);
492 // On some platforms, we need a way to pass some platform dependent
493 // information to the unpacking code so the skeletal frames come out
494 // correct (initial fp value, unextended sp, ...)
495 info->set_initial_info((intptr_t) array->sender().initial_deoptimization_info());
496
497 if (array->frames() > 1) {
498 if (VerifyStack && TraceDeoptimization) {
499 ttyLocker ttyl;
|
459 // area as created by the compiled frame will not be usable by
460 // the interpreter. (Depending on the calling convention there
461 // may not even be enough space).
462
463 // QQQ I'd rather see this pushed down into last_frame_adjust
464 // and have it take the sender (aka caller).
465
466 if (deopt_sender.is_compiled_frame() || caller_was_method_handle) {
467 caller_adjustment = last_frame_adjust(0, callee_locals);
468 } else if (callee_locals > callee_parameters) {
469 // The caller frame may need extending to accommodate
470 // non-parameter locals of the first unpacked interpreted frame.
471 // Compute that adjustment.
472 caller_adjustment = last_frame_adjust(callee_parameters, callee_locals);
473 }
474
475 // If the sender is deoptimized the we must retrieve the address of the handler
476 // since the frame will "magically" show the original pc before the deopt
477 // and we'd undo the deopt.
478
479 frame_pcs[0] = deopt_sender.raw_pc(thread);
480
481 #ifndef SHARK
482 assert(CodeCache::find_blob_unsafe(frame_pcs[0]) != NULL, "bad pc");
483 #endif // SHARK
484
485 UnrollBlock* info = new UnrollBlock(array->frame_size() * BytesPerWord,
486 caller_adjustment * BytesPerWord,
487 caller_was_method_handle ? 0 : callee_parameters,
488 number_of_frames,
489 frame_sizes,
490 frame_pcs,
491 return_type);
492 // On some platforms, we need a way to pass some platform dependent
493 // information to the unpacking code so the skeletal frames come out
494 // correct (initial fp value, unextended sp, ...)
495 info->set_initial_info((intptr_t) array->sender().initial_deoptimization_info());
496
497 if (array->frames() > 1) {
498 if (VerifyStack && TraceDeoptimization) {
499 ttyLocker ttyl;
|