Index: runtime/vm/signal_handler_linux.cc |
diff --git a/runtime/vm/signal_handler_linux.cc b/runtime/vm/signal_handler_linux.cc |
index 980733e2cd5279da200b2089772be9fceea36876..909149b9ece331617ae8898a89d08ff10061125a 100644 |
--- a/runtime/vm/signal_handler_linux.cc |
+++ b/runtime/vm/signal_handler_linux.cc |
@@ -97,6 +97,32 @@ uintptr_t SignalHandler::GetDartStackPointer(const mcontext_t& mcontext) { |
} |
+uintptr_t SignalHandler::GetReturnAddress(const mcontext_t& mcontext) { |
+ uintptr_t ra = 0; |
+ |
+#if defined(TARGET_ARCH_IA32) |
+ ra = 0; |
+#elif defined(TARGET_ARCH_X64) |
+ ra = 0; |
+#elif defined(TARGET_ARCH_MIPS) && defined(USING_SIMULATOR) |
+ ra = 0; |
+#elif defined(TARGET_ARCH_ARM) && defined(USING_SIMULATOR) |
+ ra = 0; |
+#elif defined(TARGET_ARCH_ARM64) && defined(USING_SIMULATOR) |
+ ra = 0; |
+#elif defined(TARGET_ARCH_ARM) |
+ ra = static_cast<uintptr_t>(mcontext.arm_lr); |
+#elif defined(TARGET_ARCH_ARM64) |
+ ra = static_cast<uintptr_t>(mcontext.lr); |
+#elif defined(TARGET_ARCH_MIPS) |
+ ra = static_cast<uintptr_t>(mcontext.gregs[31]); |
+#else |
+ UNIMPLEMENTED(); |
+#endif // TARGET_ARCH_... |
+ return ra; |
+} |
+ |
+ |
void SignalHandler::Install(SignalAction action) { |
struct sigaction act; |
act.sa_handler = NULL; |