[vm,dyn_modules] Fix Dart stack dump for crashes in the interpreter
When crash happens in the interpreter while running Dart code,
Dart stack dump should start with the interpreter frame instead of
using crash sp/fp/pc. (Native stack dump still uses crash sp/fp/pc.)
TEST=manual
Change-Id: I8748d3f9c683fcc0cbda949ff7619981c9f3f134
Cq-Include-Trybots: luci.dart.try:vm-aot-dyn-linux-debug-x64-try,vm-aot-dyn-linux-product-x64-try,vm-dyn-linux-debug-x64-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/441821
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
diff --git a/runtime/vm/profiler.cc b/runtime/vm/profiler.cc
index 071b1e5..18f7187 100644
--- a/runtime/vm/profiler.cc
+++ b/runtime/vm/profiler.cc
@@ -570,6 +570,14 @@
StackFrame::DumpCurrentTrace();
} else if (thread->execution_state() == Thread::kThreadInGenerated) {
// No exit frame, walk from the crash's registers.
+#if defined(DART_DYNAMIC_MODULES)
+ if (thread->vm_tag() == VMTag::kDartInterpretedTagId) {
+ Interpreter* interpreter = thread->interpreter();
+ sp = interpreter->get_sp();
+ fp = interpreter->get_fp();
+ pc = interpreter->get_pc();
+ }
+#endif // defined(DART_DYNAMIC_MODULES)
StackFrame::DumpCurrentTrace(sp, fp, pc);
}
}