Reviewers: iposva, Description: Experimental: port the JS function check at function entry from ARM to IA32. Update the ARM message string.
Please review this at http://codereview.chromium.org/28065 SVN Base: http://v8.googlecode.com/svn/branches/experimental/toiger/ Affected files: M src/virtual-frame-arm.cc M src/virtual-frame-ia32.cc Index: src/virtual-frame-ia32.cc =================================================================== --- src/virtual-frame-ia32.cc (revision 1343) +++ src/virtual-frame-ia32.cc (working copy) @@ -389,6 +389,20 @@ void VirtualFrame::Enter() { // Registers live on entry: esp, ebp, esi, edi. Comment cmnt(masm_, "[ Enter JS frame"); + +#ifdef DEBUG + // Verify that edi contains a JS function. The following code + // relies on eax being available for use. + __ test(edi, Immediate(kSmiTagMask)); + __ Check(not_zero, + "VirtualFrame::Enter - edi is not a function (smi check)."); + __ mov(eax, FieldOperand(edi, HeapObject::kMapOffset)); + __ movzx_b(eax, FieldOperand(eax, Map::kInstanceTypeOffset)); + __ cmp(eax, JS_FUNCTION_TYPE); + __ Check(equal, + "VirtualFrame::Enter - edi is not a function (map check)."); +#endif + EmitPush(ebp); frame_pointer_ = stack_pointer_; Index: src/virtual-frame-arm.cc =================================================================== --- src/virtual-frame-arm.cc (revision 1343) +++ src/virtual-frame-arm.cc (working copy) @@ -221,16 +221,20 @@ void VirtualFrame::Enter() { Comment cmnt(masm_, "[ Enter JS frame"); + #ifdef DEBUG - { Label done, fail; + // Verify that r1 contains a JS function. The following code relies + // on r2 being available for use. + { Label map_check, done; __ tst(r1, Operand(kSmiTagMask)); - __ b(eq, &fail); + __ b(ne, &map_check); + __ stop("VirtualFrame::Enter - r1 is not a function (smi check)."); + __ bind(&map_check); __ ldr(r2, FieldMemOperand(r1, HeapObject::kMapOffset)); __ ldrb(r2, FieldMemOperand(r2, Map::kInstanceTypeOffset)); __ cmp(r2, Operand(JS_FUNCTION_TYPE)); __ b(eq, &done); - __ bind(&fail); - __ stop("CodeGenerator::EnterJSFrame - r1 not a function"); + __ stop("VirtualFrame::Enter - r1 is not a function (map check)."); __ bind(&done); } #endif // DEBUG --~--~---------~--~----~------------~-------~--~----~ v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev -~----------~----~----~----~------~----~------~--~---
