Index: src/mips/simulator-mips.h |
diff --git a/src/mips/simulator-mips.h b/src/mips/simulator-mips.h |
index 1459fbada3226e3dc68f024ca57088cafe455414..6de5163dda6d07050a62649946525bb281033ad5 100644 |
--- a/src/mips/simulator-mips.h |
+++ b/src/mips/simulator-mips.h |
@@ -193,12 +193,12 @@ class Simulator { |
void set_pc(int32_t value); |
int32_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(); |
@@ -466,15 +466,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) { |