Index: src/arm/code-stubs-arm.cc |
diff --git a/src/arm/code-stubs-arm.cc b/src/arm/code-stubs-arm.cc |
index 169a032fb030c242448f4d491174348cc892a5ad..6f95889bfbb65f0c20d3e87a9f9744ab3f4444fd 100644 |
--- a/src/arm/code-stubs-arm.cc |
+++ b/src/arm/code-stubs-arm.cc |
@@ -7513,6 +7513,34 @@ void StoreArrayLiteralElementStub::Generate(MacroAssembler* masm) { |
__ Ret(); |
} |
+ |
+void ProfileEntryHookStub::Generate(MacroAssembler* masm) { |
+ __ stop("foo"); |
+ |
+ // Save volatile registers, note that lr is already saved by the caller, |
+ // so we need to save an odd number here to keep the stack aligned. |
+ __ Push(lr, r1, r0); |
danno
2012/07/10 09:37:13
In general, you can't make guarantees about stack
Sigurður Ásgeirsson
2012/07/11 14:50:34
Done.
|
+ |
+ // TODO(siggi): Grab a timer somehow into r2/r3. |
+ |
+ // Our return address, lr, points three instructions (12 bytes) into the |
+ // function. Grab that for the first argument to the hook. |
+ __ sub(r0, lr, Operand(0xC)); |
danno
2012/07/10 09:37:13
Define constants for this.
Sigurður Ásgeirsson
2012/07/11 14:50:34
Done.
|
+ // The caller's return address is 12 bytes up on the stack. Grab that |
+ // for the second argument to the hook. |
+ __ add(r1, sp, Operand(0x0C)); |
danno
2012/07/10 09:37:13
Is it possible to use an existing constant in fram
Sigurður Ásgeirsson
2012/07/11 14:50:34
This stub is called pre-frame generation, and does
|
+ |
+ ApiFunction dispatcher( |
+ reinterpret_cast<Address>(V8::GetFunctionEntryHookDispatcher())); |
danno
2012/07/10 09:37:13
If you really need the dispatcher for ARM only, th
Sigurður Ásgeirsson
2012/07/11 14:50:34
This is for the simulator.
The simulator only forw
|
+ __ mov(ip, Operand(ExternalReference(&dispatcher, |
+ ExternalReference::BUILTIN_CALL, |
+ masm->isolate()))); |
+ __ Call(ip); |
+ __ Pop(lr, r1, r0); |
+ |
+ __ Ret(); |
+} |
+ |
#undef __ |
} } // namespace v8::internal |