From 9ef16704649d568c8fd8f4af490ba077654d9fba Mon Sep 17 00:00:00 2001 From: "peter.rybin@gmail.com" Date: Thu, 12 Aug 2010 17:27:07 +0000 Subject: [PATCH] Reduce size of function restarter frame. Review URL: http://codereview.chromium.org/3133007 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@5256 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/ia32/debug-ia32.cc | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/ia32/debug-ia32.cc b/src/ia32/debug-ia32.cc index dfa6634..114bdd7 100644 --- a/src/ia32/debug-ia32.cc +++ b/src/ia32/debug-ia32.cc @@ -259,10 +259,9 @@ void Debug::GeneratePlainReturnLiveEdit(MacroAssembler* masm) { // There is no calling conventions here, because it never actually gets called, // it only gets returned to. // Frame structure (conforms InternalFrame structure): -// -- JSFunction // -- code // -- SMI maker -// -- context +// -- function (slot is called "context") // -- frame base void Debug::GenerateFrameDropperLiveEdit(MacroAssembler* masm) { ExternalReference restarter_frame_function_slot = @@ -270,16 +269,14 @@ void Debug::GenerateFrameDropperLiveEdit(MacroAssembler* masm) { __ mov(Operand::StaticVariable(restarter_frame_function_slot), Immediate(0)); // We do not know our frame height, but set esp based on ebp. - __ lea(esp, Operand(ebp, -4 * kPointerSize)); + __ lea(esp, Operand(ebp, -1 * kPointerSize)); - __ pop(edi); // function - - // Skip code self-reference and marker. - __ add(Operand(esp), Immediate(2 * kPointerSize)); - - __ pop(esi); // Context. + __ pop(edi); // Function. __ pop(ebp); + // Load context from the function. + __ mov(esi, FieldOperand(edi, JSFunction::kContextOffset)); + // Get function code. __ mov(edx, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset)); __ mov(edx, FieldOperand(edx, SharedFunctionInfo::kCodeOffset)); @@ -299,16 +296,19 @@ Object** Debug::SetUpFrameDropperFrame(StackFrame* bottom_js_frame, ASSERT(bottom_js_frame->is_java_script()); Address fp = bottom_js_frame->fp(); - Memory::Object_at(fp - 4 * kPointerSize) = - Memory::Object_at(fp - 2 * kPointerSize); // Move edi (function). + + // Move function pointer into slot that is called referenced + // as StandardFrame::context() + Memory::Object_at(fp - 1 * kPointerSize) = + Memory::Object_at(fp - 2 * kPointerSize); Memory::Object_at(fp - 3 * kPointerSize) = *code; Memory::Object_at(fp - 2 * kPointerSize) = Smi::FromInt(StackFrame::INTERNAL); - return reinterpret_cast(&Memory::Object_at(fp - 4 * kPointerSize)); + return reinterpret_cast(&Memory::Object_at(fp - 1 * kPointerSize)); } -const int Debug::kFrameDropperFrameSize = 5; +const int Debug::kFrameDropperFrameSize = 4; #endif // ENABLE_DEBUGGER_SUPPORT -- 2.7.4