crash_dump: fork a copy of the target's address space.
Reduce the amount of time that a process remains paused by pausing its
threads, fetching their registers, and then performing unwinding on a
copy of its address space. This also works around a kernel change
that's in 4.9 that prevents ptrace from reading memory of processes
that we don't have immediate permissions to ptrace (even if we
previously ptraced them).
Bug: http://b/62112103
Bug: http://b/63989615
Test: treehugger
Change-Id: I7b9cc5dd8f54a354bc61f1bda0d2b7a8a55733c4
diff --git a/debuggerd/protocol.h b/debuggerd/protocol.h
index 7e1961e..6903b0e 100644
--- a/debuggerd/protocol.h
+++ b/debuggerd/protocol.h
@@ -16,7 +16,10 @@
#pragma once
+#include <signal.h>
#include <stdint.h>
+#include <sys/ucontext.h>
+#include <unistd.h>
#include "dump_type.h"
@@ -76,3 +79,11 @@
InterceptStatus status;
char error_message[127]; // always null-terminated
};
+
+// Sent from handler to crash_dump via pipe.
+struct __attribute__((__packed__)) CrashInfo {
+ uint32_t version; // must be 1.
+ siginfo_t siginfo;
+ ucontext_t ucontext;
+ uintptr_t abort_msg_address;
+};