diff --git a/runtime/vm/runtime_entry.h b/runtime/vm/runtime_entry.h index 1b35e0ebde8..bede33e6ce6 100644 --- a/runtime/vm/runtime_entry.h +++ b/runtime/vm/runtime_entry.h @@ -85,6 +85,15 @@ class RuntimeEntry : public BaseRuntimeEntry { } while (0) #endif +#if defined(USING_SIMULATOR) +#define CHECK_SIMULATOR_STACK_OVERFLOW() \ + if (!OSThread::Current()->HasStackHeadroom()) { \ + Exceptions::ThrowStackOverflow(); \ + } +#else +#define CHECK_SIMULATOR_STACK_OVERFLOW() +#endif // defined(USING_SIMULATOR) + // Helper macros for declaring and defining runtime entries. #define DEFINE_RUNTIME_ENTRY(name, argument_count) \ @@ -106,6 +115,7 @@ class RuntimeEntry : public BaseRuntimeEntry { TransitionGeneratedToVM transition(thread); \ StackZone zone(thread); \ HANDLESCOPE(thread); \ + CHECK_SIMULATOR_STACK_OVERFLOW(); \ DRT_Helper##name(isolate, thread, zone.GetZone(), arguments); \ } \ } \