| Index: src/debug/liveedit.cc
|
| diff --git a/src/debug/liveedit.cc b/src/debug/liveedit.cc
|
| index 2264154c52ceae99a41b93b4730cab6ab56cabd0..f642412138e4b135f55acb6e5e77df0b3d0c3f45 100644
|
| --- a/src/debug/liveedit.cc
|
| +++ b/src/debug/liveedit.cc
|
| @@ -1485,26 +1485,22 @@ static bool FixTryCatchHandler(StackFrame* top_frame,
|
|
|
| // Initializes an artificial stack frame. The data it contains is used for:
|
| // a. successful work of frame dropper code which eventually gets control,
|
| -// b. being compatible with regular stack structure for various stack
|
| +// b. being compatible with a typed frame structure for various stack
|
| // iterators.
|
| -// Frame structure (conforms InternalFrame structure):
|
| +// Frame structure (conforms to InternalFrame structure):
|
| +// -- function
|
| // -- code
|
| -// -- SMI maker
|
| -// -- function (slot is called "context")
|
| +// -- SMI marker
|
| // -- frame base
|
| static void SetUpFrameDropperFrame(StackFrame* bottom_js_frame,
|
| Handle<Code> code) {
|
| DCHECK(bottom_js_frame->is_java_script());
|
| -
|
| Address fp = bottom_js_frame->fp();
|
| -
|
| - // Move function pointer into "context" slot.
|
| - Memory::Object_at(fp + StandardFrameConstants::kContextOffset) =
|
| - Memory::Object_at(fp + JavaScriptFrameConstants::kFunctionOffset);
|
| -
|
| - Memory::Object_at(fp + InternalFrameConstants::kCodeOffset) = *code;
|
| - Memory::Object_at(fp + StandardFrameConstants::kMarkerOffset) =
|
| + Memory::Object_at(fp + FrameDropperFrameConstants::kFunctionOffset) =
|
| + Memory::Object_at(fp + StandardFrameConstants::kFunctionOffset);
|
| + Memory::Object_at(fp + FrameDropperFrameConstants::kFrameTypeOffset) =
|
| Smi::FromInt(StackFrame::INTERNAL);
|
| + Memory::Object_at(fp + FrameDropperFrameConstants::kCodeOffset) = *code;
|
| }
|
|
|
|
|
| @@ -1566,9 +1562,9 @@ static const char* DropFrames(Vector<StackFrame*> frames, int top_frame_index,
|
| }
|
|
|
| Address unused_stack_top = top_frame->sp();
|
| - int new_frame_size = LiveEdit::kFrameDropperFrameSize * kPointerSize;
|
| - Address unused_stack_bottom = bottom_js_frame->fp()
|
| - - new_frame_size + kPointerSize; // Bigger address end is exclusive.
|
| + Address unused_stack_bottom =
|
| + bottom_js_frame->fp() - FrameDropperFrameConstants::kFixedFrameSize +
|
| + 2 * kPointerSize; // Bigger address end is exclusive.
|
|
|
| Address* top_frame_pc_address = top_frame->pc_address();
|
|
|
| @@ -1580,8 +1576,9 @@ static const char* DropFrames(Vector<StackFrame*> frames, int top_frame_index,
|
| int shortage_bytes =
|
| static_cast<int>(unused_stack_top - unused_stack_bottom);
|
|
|
| - Address padding_start = pre_top_frame->fp() -
|
| - LiveEdit::kFrameDropperFrameSize * kPointerSize;
|
| + Address padding_start =
|
| + pre_top_frame->fp() -
|
| + (FrameDropperFrameConstants::kFixedFrameSize - kPointerSize);
|
|
|
| Address padding_pointer = padding_start;
|
| Smi* padding_object = Smi::FromInt(LiveEdit::kFramePaddingValue);
|
| @@ -1601,7 +1598,7 @@ static const char* DropFrames(Vector<StackFrame*> frames, int top_frame_index,
|
|
|
| MemMove(padding_start + kPointerSize - shortage_bytes,
|
| padding_start + kPointerSize,
|
| - LiveEdit::kFrameDropperFrameSize * kPointerSize);
|
| + FrameDropperFrameConstants::kFixedFrameSize - kPointerSize);
|
|
|
| pre_top_frame->UpdateFp(pre_top_frame->fp() - shortage_bytes);
|
| pre_pre_frame->SetCallerFp(pre_top_frame->fp());
|
|
|