Merge "Revert "Update bionic kernel headers using update_all.py""
diff --git a/linker/debugger.c b/linker/debugger.c
index ef8286c..40411b1 100644
--- a/linker/debugger.c
+++ b/linker/debugger.c
@@ -32,6 +32,7 @@
#include <ctype.h>
#include <signal.h>
#include <sys/mman.h>
+#include <sys/prctl.h>
#include <errno.h>
#include "linker.h"
@@ -46,6 +47,8 @@
ret = (cond); \
} while (ret < 0 && errno == EINTR)
+// see man(2) prctl, specifically the section about PR_GET_NAME
+#define MAX_TASK_NAME_LEN (16)
static int socket_abstract_client(const char *name, int type)
{
@@ -100,6 +103,7 @@
static void logSignalSummary(int signum, const siginfo_t* info)
{
char buffer[128];
+ char threadname[MAX_TASK_NAME_LEN + 1]; // one more for termination
char* signame;
switch (signum) {
@@ -113,9 +117,16 @@
default: signame = "???"; break;
}
+ if (prctl(PR_GET_NAME, (unsigned long)threadname, 0, 0, 0) != 0) {
+ strcpy(threadname, "<name unknown>");
+ } else {
+ // short names are null terminated by prctl, but the manpage
+ // implies that 16 byte names are not.
+ threadname[MAX_TASK_NAME_LEN] = 0;
+ }
format_buffer(buffer, sizeof(buffer),
- "Fatal signal %d (%s) at 0x%08x (code=%d)",
- signum, signame, info->si_addr, info->si_code);
+ "Fatal signal %d (%s) at 0x%08x (code=%d), thread %d (%s)",
+ signum, signame, info->si_addr, info->si_code, gettid(), threadname);
__libc_android_log_write(ANDROID_LOG_FATAL, "libc", buffer);
}