summaryrefslogtreecommitdiff
path: root/debuggerd/handler/debuggerd_handler.cpp
diff options
context:
space:
mode:
authorJosh Gao <jmgao@google.com>2017-01-30 11:27:36 -0800
committerJosh Gao <jmgao@google.com>2017-01-30 17:58:04 -0800
commit4ed00c8d739f52515053596b50e4bd33603ee922 (patch)
tree9ab564613f0240811d55b47e3a7e0561c0fabe6a /debuggerd/handler/debuggerd_handler.cpp
parenta5cfc8b1e6140ac7a7bfc7bffa36de3d6543b59a (diff)
debuggerd_handler: improve nonfatal signal message.
"Fatal signal 35 (???)" -> "Requested dump for" Bug: http://b/34809044 Test: debuggerd -b $$ Change-Id: I9ece0ee1117203d30142b843973ed7e5435e21da
Diffstat (limited to 'debuggerd/handler/debuggerd_handler.cpp')
-rw-r--r--debuggerd/handler/debuggerd_handler.cpp25
1 files changed, 16 insertions, 9 deletions
diff --git a/debuggerd/handler/debuggerd_handler.cpp b/debuggerd/handler/debuggerd_handler.cpp
index 501d0898c..cd491d627 100644
--- a/debuggerd/handler/debuggerd_handler.cpp
+++ b/debuggerd/handler/debuggerd_handler.cpp
@@ -83,6 +83,21 @@ static pthread_mutex_t crash_mutex = PTHREAD_MUTEX_INITIALIZER;
* could allocate memory or hold a lock.
*/
static void log_signal_summary(int signum, const siginfo_t* info) {
+ char thread_name[MAX_TASK_NAME_LEN + 1]; // one more for termination
+ if (prctl(PR_GET_NAME, reinterpret_cast<unsigned long>(thread_name), 0, 0, 0) != 0) {
+ strcpy(thread_name, "<name unknown>");
+ } else {
+ // short names are null terminated by prctl, but the man page
+ // implies that 16 byte names are not.
+ thread_name[MAX_TASK_NAME_LEN] = 0;
+ }
+
+ if (signum == DEBUGGER_SIGNAL) {
+ __libc_format_log(ANDROID_LOG_FATAL, "libc", "Requested dump for tid %d (%s)", gettid(),
+ thread_name);
+ return;
+ }
+
const char* signal_name = "???";
bool has_address = false;
switch (signum) {
@@ -118,15 +133,6 @@ static void log_signal_summary(int signum, const siginfo_t* info) {
break;
}
- char thread_name[MAX_TASK_NAME_LEN + 1]; // one more for termination
- if (prctl(PR_GET_NAME, reinterpret_cast<unsigned long>(thread_name), 0, 0, 0) != 0) {
- strcpy(thread_name, "<name unknown>");
- } else {
- // short names are null terminated by prctl, but the man page
- // implies that 16 byte names are not.
- thread_name[MAX_TASK_NAME_LEN] = 0;
- }
-
// "info" will be null if the siginfo_t information was not available.
// Many signals don't have an address or a code.
char code_desc[32]; // ", code -6"
@@ -138,6 +144,7 @@ static void log_signal_summary(int signum, const siginfo_t* info) {
__libc_format_buffer(addr_desc, sizeof(addr_desc), ", fault addr %p", info->si_addr);
}
}
+
__libc_format_log(ANDROID_LOG_FATAL, "libc", "Fatal signal %d (%s)%s%s in tid %d (%s)", signum,
signal_name, code_desc, addr_desc, gettid(), thread_name);
}