Index: src/arm64/code-stubs-arm64.cc |
diff --git a/src/arm64/code-stubs-arm64.cc b/src/arm64/code-stubs-arm64.cc |
index a2dd220586d6b7c5e0111ad18b19afe4646e0c23..fec89369a6ab4ae17288aa2297b4630c64c03dd4 100644 |
--- a/src/arm64/code-stubs-arm64.cc |
+++ b/src/arm64/code-stubs-arm64.cc |
@@ -4661,22 +4661,31 @@ 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); |
+static unsigned int GetProfileEntryHookCallSize(MacroAssembler* masm) { |
+ // The entry hook is a "BumpSystemStackPointer" instruction (sub), |
+ // followed by a "Push lr" instruction, followed by a call. |
+ unsigned int size = |
+ Assembler::kCallSizeWithRelocation + (2 * kInstructionSize); |
+ if (CpuFeatures::IsSupported(ALWAYS_ALIGN_CSP)) { |
+ // If ALWAYS_ALIGN_CSP then there will be an extra bic instruction in |
+ // "BumpSystemStackPointer". |
+ size += kInstructionSize; |
+ } |
+ return size; |
+} |
void ProfileEntryHookStub::MaybeCallEntryHook(MacroAssembler* masm) { |
if (masm->isolate()->function_entry_hook() != NULL) { |
ProfileEntryHookStub stub(masm->isolate()); |
Assembler::BlockConstPoolScope no_const_pools(masm); |
+ DontEmitDebugCodeScope no_debug_code(masm); |
Label entry_hook_call_start; |
__ Bind(&entry_hook_call_start); |
__ Push(lr); |
__ CallStub(&stub); |
ASSERT(masm->SizeOfCodeGeneratedSince(&entry_hook_call_start) == |
- kProfileEntryHookCallSize); |
+ GetProfileEntryHookCallSize(masm)); |
__ Pop(lr); |
} |
@@ -4694,7 +4703,7 @@ void ProfileEntryHookStub::Generate(MacroAssembler* masm) { |
const int kNumSavedRegs = kCallerSaved.Count(); |
// Compute the function's address as the first argument. |
- __ Sub(x0, lr, kProfileEntryHookCallSize); |
+ __ Sub(x0, lr, GetProfileEntryHookCallSize(masm)); |
#if V8_HOST_ARCH_ARM64 |
uintptr_t entry_hook = |