| Index: src/deoptimizer.cc
|
| diff --git a/src/deoptimizer.cc b/src/deoptimizer.cc
|
| index 2f4d7dc79e0c1b0ec996447d6d13d18be5394032..e39c3455f0b7901d66657717aac58371411453d6 100644
|
| --- a/src/deoptimizer.cc
|
| +++ b/src/deoptimizer.cc
|
| @@ -181,7 +181,8 @@ DeoptimizedFrameInfo* Deoptimizer::DebuggerInspectableFrame(
|
| // Always use the actual stack slots when calculating the fp to sp
|
| // delta adding two for the function and context.
|
| unsigned stack_slots = code->stack_slots();
|
| - unsigned fp_to_sp_delta = ((stack_slots + 2) * kPointerSize);
|
| + unsigned fp_to_sp_delta = (stack_slots * kPointerSize) +
|
| + StandardFrameConstants::kFixedFrameSizeFromFp;
|
|
|
| Deoptimizer* deoptimizer = new Deoptimizer(isolate,
|
| function,
|
| @@ -890,7 +891,8 @@ void Deoptimizer::DoComputeJSFrame(TranslationIterator* iterator,
|
| // If the optimized frame had alignment padding, adjust the frame pointer
|
| // to point to the new position of the old frame pointer after padding
|
| // is removed. Subtract 2 * kPointerSize for the context and function slots.
|
| - top_address = input_->GetRegister(fp_reg.code()) - (2 * kPointerSize) -
|
| + top_address = input_->GetRegister(fp_reg.code()) -
|
| + StandardFrameConstants::kFixedFrameSizeFromFp -
|
| height_in_bytes + has_alignment_padding_ * kPointerSize;
|
| } else {
|
| top_address = output_[frame_index - 1]->GetTop() - output_frame_size;
|
| @@ -1303,14 +1305,14 @@ void Deoptimizer::DoComputeAccessorStubFrame(TranslationIterator* iterator,
|
| " translating %s stub => height=%u\n", kind, height_in_bytes);
|
| }
|
|
|
| - // We need 1 stack entry for the return address + 4 stack entries from
|
| - // StackFrame::INTERNAL (FP, context, frame type, code object, see
|
| + // We need 1 stack entry for the return address and enough entries for the
|
| + // StackFrame::INTERNAL (FP, context, frame type and code object - see
|
| // MacroAssembler::EnterFrame). For a setter stub frame we need one additional
|
| // entry for the implicit return value, see
|
| // StoreStubCompiler::CompileStoreViaSetter.
|
| - unsigned fixed_frame_entries = (kPCOnStackSize / kPointerSize) +
|
| - (kFPOnStackSize / kPointerSize) + 3 +
|
| - (is_setter_stub_frame ? 1 : 0);
|
| + unsigned fixed_frame_entries =
|
| + (StandardFrameConstants::kFixedFrameSize / kPointerSize) + 1 +
|
| + (is_setter_stub_frame ? 1 : 0);
|
| unsigned fixed_frame_size = fixed_frame_entries * kPointerSize;
|
| unsigned output_frame_size = height_in_bytes + fixed_frame_size;
|
|
|
| @@ -1483,7 +1485,7 @@ void Deoptimizer::DoComputeCompiledStubFrame(TranslationIterator* iterator,
|
| // context and function slots.
|
| Register fp_reg = StubFailureTrampolineFrame::fp_register();
|
| intptr_t top_address = input_->GetRegister(fp_reg.code()) -
|
| - (2 * kPointerSize) - height_in_bytes;
|
| + StandardFrameConstants::kFixedFrameSizeFromFp - height_in_bytes;
|
| output_frame->SetTop(top_address);
|
|
|
| // Read caller's PC (JSFunction continuation) from the input frame.
|
| @@ -2454,8 +2456,9 @@ void Deoptimizer::DoTranslateCommand(TranslationIterator* iterator,
|
| unsigned Deoptimizer::ComputeInputFrameSize() const {
|
| unsigned fixed_size = ComputeFixedSize(function_);
|
| // The fp-to-sp delta already takes the context and the function
|
| - // into account so we have to avoid double counting them (-2).
|
| - unsigned result = fixed_size + fp_to_sp_delta_ - (2 * kPointerSize);
|
| + // into account so we have to avoid double counting them.
|
| + unsigned result = fixed_size + fp_to_sp_delta_ -
|
| + StandardFrameConstants::kFixedFrameSizeFromFp;
|
| #ifdef DEBUG
|
| if (compiled_code_->kind() == Code::OPTIMIZED_FUNCTION) {
|
| unsigned stack_slots = compiled_code_->stack_slots();
|
|
|