Index: src/mips/simulator-mips.cc |
diff --git a/src/mips/simulator-mips.cc b/src/mips/simulator-mips.cc |
index b7e53c9faa99dd1e86d2b43527a521d4b2b4a7f6..10417d573cfa2ae8b1f2e06587c2615e67cd2ef6 100644 |
--- a/src/mips/simulator-mips.cc |
+++ b/src/mips/simulator-mips.cc |
@@ -972,6 +972,12 @@ class Redirection { |
return reinterpret_cast<Redirection*>(addr_of_redirection); |
} |
+ static void* ReverseRedirection(int32_t reg) { |
+ Redirection* redirection = FromSwiInstruction( |
+ reinterpret_cast<Instruction*>(reinterpret_cast<void*>(reg))); |
+ return redirection->external_function(); |
+ } |
+ |
private: |
void* external_function_; |
uint32_t swi_instruction_; |
@@ -1389,12 +1395,12 @@ typedef double (*SimulatorRuntimeFPIntCall)(double darg0, int32_t arg0); |
// This signature supports direct call in to API function native callback |
// (refer to InvocationCallback in v8.h). |
typedef void (*SimulatorRuntimeDirectApiCall)(int32_t arg0); |
-typedef void (*SimulatorRuntimeProfilingApiCall)(int32_t arg0, int32_t arg1); |
+typedef void (*SimulatorRuntimeProfilingApiCall)(int32_t arg0, void* arg1); |
// This signature supports direct call to accessor getter callback. |
typedef void (*SimulatorRuntimeDirectGetterCall)(int32_t arg0, int32_t arg1); |
typedef void (*SimulatorRuntimeProfilingGetterCall)( |
- int32_t arg0, int32_t arg1, int32_t arg2); |
+ int32_t arg0, int32_t arg1, void* arg2); |
// Software interrupt instructions are used by the simulator to call into the |
// C-based V8 runtime. They are also used for debugging with simulator. |
@@ -1555,7 +1561,7 @@ void Simulator::SoftwareInterrupt(Instruction* instr) { |
} |
SimulatorRuntimeProfilingApiCall target = |
reinterpret_cast<SimulatorRuntimeProfilingApiCall>(external); |
- target(arg0, arg1); |
+ target(arg0, Redirection::ReverseRedirection(arg1)); |
} else if ( |
redirection->type() == ExternalReference::DIRECT_GETTER_CALL) { |
if (::v8::internal::FLAG_trace_sim) { |
@@ -1573,7 +1579,7 @@ void Simulator::SoftwareInterrupt(Instruction* instr) { |
} |
SimulatorRuntimeProfilingGetterCall target = |
reinterpret_cast<SimulatorRuntimeProfilingGetterCall>(external); |
- target(arg0, arg1, arg2); |
+ target(arg0, arg1, Redirection::ReverseRedirection(arg2)); |
} else { |
SimulatorRuntimeCall target = |
reinterpret_cast<SimulatorRuntimeCall>(external); |