Index: runtime/vm/code_generator.cc |
diff --git a/runtime/vm/code_generator.cc b/runtime/vm/code_generator.cc |
index 9511db9a98ceaab7ca3587ba1f22ced085c6fcb2..46bbe5e64ab35cb2c912b0f3c6ba3d8d3d88c140 100644 |
--- a/runtime/vm/code_generator.cc |
+++ b/runtime/vm/code_generator.cc |
@@ -654,6 +654,7 @@ static void CheckResultError(const Object& result) { |
} |
+#if !defined(TARGET_ARCH_DBC) |
// Gets called from debug stub when code reaches a breakpoint |
// set on a runtime stub call. |
DEFINE_RUNTIME_ENTRY(BreakpointRuntimeHandler, 0) { |
@@ -674,6 +675,20 @@ DEFINE_RUNTIME_ENTRY(BreakpointRuntimeHandler, 0) { |
} |
arguments.SetReturn(orig_stub); |
} |
+#else |
+// Gets called from the simulator when the breakpoint is reached. |
+DEFINE_RUNTIME_ENTRY(BreakpointRuntimeHandler, 0) { |
+ if (!FLAG_support_debugger) { |
+ UNREACHABLE(); |
+ return; |
+ } |
+ const Error& error = Error::Handle(isolate->debugger()->SignalBpReached()); |
+ if (!error.IsNull()) { |
+ Exceptions::PropagateError(error); |
+ UNREACHABLE(); |
+ } |
+} |
+#endif // !defined(TARGET_ARCH_DBC) |
DEFINE_RUNTIME_ENTRY(SingleStepHandler, 0) { |
@@ -956,6 +971,8 @@ DEFINE_RUNTIME_ENTRY(StaticCallMissHandlerTwoArgs, 3) { |
// Arg2: Arguments descriptor array. |
// Returns: target function to call. |
DEFINE_RUNTIME_ENTRY(MegamorphicCacheMissHandler, 3) { |
+// DBC does not use megamorphic calls right now. |
+#if !defined(TARGET_ARCH_DBC) |
const Instance& receiver = Instance::CheckedHandle(zone, arguments.ArgAt(0)); |
const Object& ic_data_or_cache = Object::Handle(zone, arguments.ArgAt(1)); |
const Array& descriptor = Array::CheckedHandle(zone, arguments.ArgAt(2)); |
@@ -1013,6 +1030,9 @@ DEFINE_RUNTIME_ENTRY(MegamorphicCacheMissHandler, 3) { |
cache.Insert(class_id, target_function); |
} |
arguments.SetReturn(target_function); |
+#else |
+ UNREACHABLE(); |
+#endif // !defined(TARGET_ARCH_DBC) |
} |
@@ -1192,7 +1212,7 @@ DEFINE_RUNTIME_ENTRY(InvokeClosureNoSuchMethod, 3) { |
DEFINE_RUNTIME_ENTRY(StackOverflow, 0) { |
#if defined(USING_SIMULATOR) |
- uword stack_pos = Simulator::Current()->get_register(SPREG); |
+ uword stack_pos = Simulator::Current()->get_sp(); |
#else |
uword stack_pos = Thread::GetCurrentStackPointer(); |
#endif |
@@ -1204,7 +1224,7 @@ DEFINE_RUNTIME_ENTRY(StackOverflow, 0) { |
// If an interrupt happens at the same time as a stack overflow, we |
// process the stack overflow now and leave the interrupt for next |
// time. |
- if (stack_pos < thread->saved_stack_limit()) { |
+ if (IsCalleeFrameOf(thread->saved_stack_limit(), stack_pos)) { |
// Use the preallocated stack overflow exception to avoid calling |
// into dart code. |
const Instance& exception = |