ARM64: Check size of code generated in ProfileEntryHookStub::MaybeCallEntryHook.
authorbaptiste.afsa@arm.com <baptiste.afsa@arm.com@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Wed, 26 Mar 2014 09:39:09 +0000 (09:39 +0000)
committerbaptiste.afsa@arm.com <baptiste.afsa@arm.com@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Wed, 26 Mar 2014 09:39:09 +0000 (09:39 +0000)
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

src/arm64/code-stubs-arm64.cc

index 103bb25..53c4a77 100644 (file)
@@ -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 =