Index: src/mips64/simulator-mips64.h |
diff --git a/src/mips64/simulator-mips64.h b/src/mips64/simulator-mips64.h |
index 5ac178df64e293f437b77ca18f6a5f63db8103bb..dea9e30adfca7d41c0679858038b8ad394274705 100644 |
--- a/src/mips64/simulator-mips64.h |
+++ b/src/mips64/simulator-mips64.h |
@@ -223,12 +223,12 @@ class Simulator { |
void set_pc(int64_t value); |
int64_t get_pc() const; |
- Address get_sp() { |
+ Address get_sp() const { |
return reinterpret_cast<Address>(static_cast<intptr_t>(get_register(sp))); |
} |
// Accessor to the internal simulator stack area. |
- uintptr_t StackLimit() const; |
+ uintptr_t StackLimit(uintptr_t c_limit) const; |
// Executes MIPS instructions until the PC reaches end_sim_pc. |
void Execute(); |
@@ -509,15 +509,14 @@ class Simulator { |
// The simulator has its own stack. Thus it has a different stack limit from |
-// the C-based native code. Setting the c_limit to indicate a very small |
-// stack cause stack overflow errors, since the simulator ignores the input. |
-// This is unlikely to be an issue in practice, though it might cause testing |
-// trouble down the line. |
+// the C-based native code. The JS-based limit normally points near the end of |
+// the simulator stack. When the C-based limit is exhausted we reflect that by |
+// lowering the JS-based limit as well, to make stack checks trigger. |
class SimulatorStack : public v8::internal::AllStatic { |
public: |
static inline uintptr_t JsLimitFromCLimit(Isolate* isolate, |
uintptr_t c_limit) { |
- return Simulator::current(isolate)->StackLimit(); |
+ return Simulator::current(isolate)->StackLimit(c_limit); |
} |
static inline uintptr_t RegisterCTryCatch(uintptr_t try_catch_address) { |