[vm, dynamic_modules] Handle native stack overflow in the interpreter

TEST=corelib/error_stack_trace2_test

Change-Id: I337c15eecddccbe770158fa493bf296c171f9f08
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/415940
Reviewed-by: Slava Egorov <vegorov@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
diff --git a/runtime/vm/interpreter.cc b/runtime/vm/interpreter.cc
index 5839b92..e5dae84 100644
--- a/runtime/vm/interpreter.cc
+++ b/runtime/vm/interpreter.cc
@@ -1828,7 +1828,8 @@
       // Check the interpreter's own stack limit for actual interpreter's stack
       // overflows, and also the thread's stack limit for scheduled interrupts.
       if (reinterpret_cast<uword>(SP) >= overflow_stack_limit() ||
-          thread->HasScheduledInterrupts()) {
+          thread->HasScheduledInterrupts() ||
+          !thread->os_thread()->HasStackHeadroom()) {
         Exit(thread, FP, SP + 1, pc);
         INVOKE_RUNTIME(DRT_InterruptOrStackOverflow,
                        NativeArguments(thread, 0, nullptr, nullptr));
diff --git a/tests/corelib/corelib.status b/tests/corelib/corelib.status
index e873b58..06012bc 100644
--- a/tests/corelib/corelib.status
+++ b/tests/corelib/corelib.status
@@ -15,7 +15,6 @@
 
 [ $compiler == dart2bytecode ]
 core_runtime_types_test: SkipByDesign # Contains dynamic calls.
-error_stack_trace2_test: Crash
 
 [ $compiler == dartkp ]
 bigint_parse_radix_test: Slow, Pass # --no_intrinsify
diff --git a/tests/language/language.status b/tests/language/language.status
index a827278..3bd6efc 100644
--- a/tests/language/language.status
+++ b/tests/language/language.status
@@ -30,7 +30,6 @@
 [ $compiler == dart2bytecode ]
 class_modifiers/trans_legacy/legacy_superdeclaration_test: Crash
 const/inference_test: Crash
-final/syntax_test/08: Crash
 regress/regress45763_test: Crash
 vm/reflect_core_vm_test: Crash