Index: src/arm/stub-cache-arm.cc |
diff --git a/src/arm/stub-cache-arm.cc b/src/arm/stub-cache-arm.cc |
index 1ccc10680a21f7944797a98452fd97923ee276ed..a0b23179d77a36d2dba5a372f1be5bd9b53a7946 100644 |
--- a/src/arm/stub-cache-arm.cc |
+++ b/src/arm/stub-cache-arm.cc |
@@ -956,8 +956,22 @@ static void GenerateFastApiDirectCall(MacroAssembler* masm, |
ExternalReference ref = ExternalReference(&fun, |
type, |
masm->isolate()); |
+ Address thunk_address = returns_handle |
+ ? FUNCTION_ADDR(&InvokeInvocationCallback) |
+ : FUNCTION_ADDR(&InvokeFunctionCallback); |
+ ExternalReference::Type thunk_type = |
+ returns_handle ? |
+ ExternalReference::PROFILING_API_CALL : |
+ ExternalReference::PROFILING_API_CALL_NEW; |
+ ApiFunction thunk_fun(thunk_address); |
+ ExternalReference thunk_ref = ExternalReference(&thunk_fun, thunk_type, |
+ masm->isolate()); |
+ |
AllowExternalCallThatCantCauseGC scope(masm); |
__ CallApiFunctionAndReturn(ref, |
+ function_address, |
+ thunk_ref, |
+ r1, |
kStackUnwindSpace, |
returns_handle, |
kFastApiCallArguments + 1); |
@@ -1454,14 +1468,28 @@ void BaseLoadStubCompiler::GenerateLoadCallback( |
Address getter_address = v8::ToCData<Address>(callback->getter()); |
bool returns_handle = |
!CallbackTable::ReturnsVoid(isolate(), getter_address); |
+ |
ApiFunction fun(getter_address); |
ExternalReference::Type type = |
returns_handle ? |
ExternalReference::DIRECT_GETTER_CALL : |
ExternalReference::DIRECT_GETTER_CALL_NEW; |
- |
ExternalReference ref = ExternalReference(&fun, type, isolate()); |
+ |
+ Address thunk_address = returns_handle |
+ ? FUNCTION_ADDR(&InvokeAccessorGetter) |
+ : FUNCTION_ADDR(&InvokeAccessorGetterCallback); |
+ ExternalReference::Type thunk_type = |
+ returns_handle ? |
+ ExternalReference::PROFILING_GETTER_CALL : |
+ ExternalReference::PROFILING_GETTER_CALL_NEW; |
+ ApiFunction thunk_fun(thunk_address); |
+ ExternalReference thunk_ref = ExternalReference(&thunk_fun, thunk_type, |
+ isolate()); |
__ CallApiFunctionAndReturn(ref, |
+ getter_address, |
+ thunk_ref, |
+ r2, |
kStackUnwindSpace, |
returns_handle, |
5); |