Index: src/ppc/simulator-ppc.h |
diff --git a/src/ppc/simulator-ppc.h b/src/ppc/simulator-ppc.h |
index fe655ff582cdb6eefd8c3efd4c214505f24f8563..042b2ada2c6edf51d9489870c36395cf52f0a81c 100644 |
--- a/src/ppc/simulator-ppc.h |
+++ b/src/ppc/simulator-ppc.h |
@@ -199,12 +199,12 @@ class Simulator { |
void set_pc(intptr_t value); |
intptr_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 PPC instructions until the PC reaches end_sim_pc. |
void Execute(); |
@@ -403,15 +403,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(v8::internal::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) { |