Modify debuggerd to cope with the abort message.
(cherry picked from commit 707b8bbe1800dbebd932f54e86347563ee86c36e)
Bug: 8531731
Change-Id: I2785a07ef83e085f338d3094f9972de23117807c
diff --git a/debuggerd/debuggerd.c b/debuggerd/debuggerd.c
index 2736f30..da2e9b0 100644
--- a/debuggerd/debuggerd.c
+++ b/debuggerd/debuggerd.c
@@ -52,6 +52,7 @@
debugger_action_t action;
pid_t pid, tid;
uid_t uid, gid;
+ uintptr_t abort_msg_address;
} debugger_request_t;
static int
@@ -207,13 +208,16 @@
}
debugger_msg_t msg;
+ memset(&msg, 0, sizeof(msg));
status = TEMP_FAILURE_RETRY(read(fd, &msg, sizeof(msg)));
if (status < 0) {
LOG("read failure? %s (pid=%d uid=%d)\n",
strerror(errno), cr.pid, cr.uid);
return -1;
}
- if (status != sizeof(msg)) {
+ if (status == sizeof(debugger_msg_t)) {
+ XLOG("crash request of size %d abort_msg_address=%#08x\n", status, msg.abort_msg_address);
+ } else {
LOG("invalid crash request of size %d (from pid=%d uid=%d)\n",
status, cr.pid, cr.uid);
return -1;
@@ -224,6 +228,7 @@
out_request->pid = cr.pid;
out_request->uid = cr.uid;
out_request->gid = cr.gid;
+ out_request->abort_msg_address = msg.abort_msg_address;
if (msg.action == DEBUGGER_ACTION_CRASH) {
/* Ensure that the tid reported by the crashing process is valid. */
@@ -267,6 +272,7 @@
XLOG("handle_request(%d)\n", fd);
debugger_request_t request;
+ memset(&request, 0, sizeof(request));
int status = read_request(fd, &request);
if (!status) {
XLOG("BOOM: pid=%d uid=%d gid=%d tid=%d\n",
@@ -310,7 +316,7 @@
if (request.action == DEBUGGER_ACTION_DUMP_TOMBSTONE) {
XLOG("stopped -- dumping to tombstone\n");
tombstone_path = engrave_tombstone(request.pid, request.tid,
- signal, true, true, &detach_failed,
+ signal, request.abort_msg_address, true, true, &detach_failed,
&total_sleep_time_usec);
} else if (request.action == DEBUGGER_ACTION_DUMP_BACKTRACE) {
XLOG("stopped -- dumping to fd\n");
@@ -348,8 +354,8 @@
/* don't dump sibling threads when attaching to GDB because it
* makes the process less reliable, apparently... */
tombstone_path = engrave_tombstone(request.pid, request.tid,
- signal, !attach_gdb, false, &detach_failed,
- &total_sleep_time_usec);
+ signal, request.abort_msg_address, !attach_gdb, false,
+ &detach_failed, &total_sleep_time_usec);
break;
}