From: baptiste.afsa@arm.com Date: Wed, 26 Mar 2014 09:39:09 +0000 (+0000) Subject: ARM64: Check size of code generated in ProfileEntryHookStub::MaybeCallEntryHook. X-Git-Tag: upstream/4.7.83~9999 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=46a9c7a350b897bd1200e6002d12e231352e5659;p=platform%2Fupstream%2Fv8.git ARM64: Check size of code generated in ProfileEntryHookStub::MaybeCallEntryHook. R=jochen@chromium.org Review URL: https://codereview.chromium.org/200023005 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@20265 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/src/arm64/code-stubs-arm64.cc b/src/arm64/code-stubs-arm64.cc index 103bb25..53c4a77 100644 --- a/src/arm64/code-stubs-arm64.cc +++ b/src/arm64/code-stubs-arm64.cc @@ -4909,14 +4909,23 @@ void StubFailureTrampolineStub::Generate(MacroAssembler* masm) { } +// The entry hook is a "BumpSystemStackPointer" instruction (sub), followed by +// a "Push lr" instruction, followed by a call. +static const unsigned int kProfileEntryHookCallSize = + Assembler::kCallSizeWithRelocation + (2 * kInstructionSize); + + void ProfileEntryHookStub::MaybeCallEntryHook(MacroAssembler* masm) { if (masm->isolate()->function_entry_hook() != NULL) { - // TODO(all): This needs to be reliably consistent with - // kReturnAddressDistanceFromFunctionStart in ::Generate. - Assembler::BlockPoolsScope no_pools(masm); ProfileEntryHookStub stub; + Assembler::BlockConstPoolScope no_const_pools(masm); + Label entry_hook_call_start; + __ Bind(&entry_hook_call_start); __ Push(lr); __ CallStub(&stub); + ASSERT(masm->SizeOfCodeGeneratedSince(&entry_hook_call_start) == + kProfileEntryHookCallSize); + __ Pop(lr); } } @@ -4924,10 +4933,6 @@ void ProfileEntryHookStub::MaybeCallEntryHook(MacroAssembler* masm) { void ProfileEntryHookStub::Generate(MacroAssembler* masm) { MacroAssembler::NoUseRealAbortsScope no_use_real_aborts(masm); - // The entry hook is a "BumpSystemStackPointer" instruction (sub), followed by - // a "Push lr" instruction, followed by a call. - static const int kReturnAddressDistanceFromFunctionStart = - Assembler::kCallSizeWithRelocation + (2 * kInstructionSize); // Save all kCallerSaved registers (including lr), since this can be called // from anywhere. @@ -4937,7 +4942,7 @@ void ProfileEntryHookStub::Generate(MacroAssembler* masm) { const int kNumSavedRegs = kCallerSaved.Count(); // Compute the function's address as the first argument. - __ Sub(x0, lr, kReturnAddressDistanceFromFunctionStart); + __ Sub(x0, lr, kProfileEntryHookCallSize); #if V8_HOST_ARCH_ARM64 uintptr_t entry_hook =