| Index: src/arm64/code-stubs-arm64.cc
|
| diff --git a/src/arm64/code-stubs-arm64.cc b/src/arm64/code-stubs-arm64.cc
|
| index 88bffe3c58fddf62195da4af2101757d10178e4f..10ee1ce0075fa651aaa4c2bd193d34a0a5b9e92e 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 =
|
|
|