Commit 339ac270 authored by ishell's avatar ishell Committed by Commit bot

Ensure there is some space on JS stack available for bootstrapping.

Review URL: https://codereview.chromium.org/1203873005

Cr-Commit-Position: refs/heads/master@{#29256}
parent f1982eb4
...@@ -1541,7 +1541,7 @@ bool Genesis::CompileNative(Isolate* isolate, Vector<const char> name, ...@@ -1541,7 +1541,7 @@ bool Genesis::CompileNative(Isolate* isolate, Vector<const char> name,
// environment has been at least partially initialized. Add a stack check // environment has been at least partially initialized. Add a stack check
// before entering JS code to catch overflow early. // before entering JS code to catch overflow early.
StackLimitCheck check(isolate); StackLimitCheck check(isolate);
if (check.HasOverflowed()) { if (check.JsHasOverflowed(1 * KB)) {
isolate->StackOverflow(); isolate->StackOverflow();
return false; return false;
} }
......
...@@ -2772,15 +2772,15 @@ void Isolate::CheckDetachedContextsAfterGC() { ...@@ -2772,15 +2772,15 @@ void Isolate::CheckDetachedContextsAfterGC() {
} }
bool StackLimitCheck::JsHasOverflowed() const { bool StackLimitCheck::JsHasOverflowed(uintptr_t gap) const {
StackGuard* stack_guard = isolate_->stack_guard(); StackGuard* stack_guard = isolate_->stack_guard();
#ifdef USE_SIMULATOR #ifdef USE_SIMULATOR
// The simulator uses a separate JS stack. // The simulator uses a separate JS stack.
Address jssp_address = Simulator::current(isolate_)->get_sp(); Address jssp_address = Simulator::current(isolate_)->get_sp();
uintptr_t jssp = reinterpret_cast<uintptr_t>(jssp_address); uintptr_t jssp = reinterpret_cast<uintptr_t>(jssp_address);
if (jssp < stack_guard->real_jslimit()) return true; if (jssp - gap < stack_guard->real_jslimit()) return true;
#endif // USE_SIMULATOR #endif // USE_SIMULATOR
return GetCurrentStackPosition() < stack_guard->real_climit(); return GetCurrentStackPosition() - gap < stack_guard->real_climit();
} }
......
...@@ -1481,7 +1481,7 @@ class StackLimitCheck BASE_EMBEDDED { ...@@ -1481,7 +1481,7 @@ class StackLimitCheck BASE_EMBEDDED {
} }
// Use this to check for stack-overflow when entering runtime from JS code. // Use this to check for stack-overflow when entering runtime from JS code.
bool JsHasOverflowed() const; bool JsHasOverflowed(uintptr_t gap = 0) const;
private: private:
Isolate* isolate_; Isolate* isolate_;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment