diff --git a/linker/debugger.cpp b/linker/debugger.cpp
index d72aa39..a7c0591 100644
--- a/linker/debugger.cpp
+++ b/linker/debugger.cpp
@@ -28,15 +28,14 @@
 
 #include "linker.h"
 
-#include <errno.h>
-#include <signal.h>
 #include <stdio.h>
 #include <stdlib.h>
-#include <sys/mman.h>
+#include <unistd.h>
+#include <signal.h>
 #include <sys/prctl.h>
+#include <errno.h>
 #include <sys/socket.h>
 #include <sys/un.h>
-#include <unistd.h>
 
 extern "C" int tgkill(int tgid, int tid, int sig);
 
@@ -110,7 +109,7 @@
  * mutex is being held, so we don't want to use any libc functions that
  * could allocate memory or hold a lock.
  */
-static void log_signal_summary(int signum, const siginfo_t* info) {
+static void logSignalSummary(int signum, const siginfo_t* info) {
     const char* signal_name;
     switch (signum) {
         case SIGILL:    signal_name = "SIGILL";     break;
@@ -150,26 +149,26 @@
 /*
  * Returns true if the handler for signal "signum" has SA_SIGINFO set.
  */
-static bool have_siginfo(int signum) {
-    struct sigaction old_action, new_action;
+static bool haveSiginfo(int signum) {
+    struct sigaction oldact, newact;
 
-    memset(&new_action, 0, sizeof(new_action));
-    new_action.sa_handler = SIG_DFL;
-    new_action.sa_flags = SA_RESTART;
-    sigemptyset(&new_action.sa_mask);
+    memset(&newact, 0, sizeof(newact));
+    newact.sa_handler = SIG_DFL;
+    newact.sa_flags = SA_RESTART;
+    sigemptyset(&newact.sa_mask);
 
-    if (sigaction(signum, &new_action, &old_action) < 0) {
+    if (sigaction(signum, &newact, &oldact) < 0) {
       __libc_format_log(ANDROID_LOG_WARN, "libc", "Failed testing for SA_SIGINFO: %s",
                         strerror(errno));
       return false;
     }
-    bool result = (old_action.sa_flags & SA_SIGINFO) != 0;
+    bool ret = (oldact.sa_flags & SA_SIGINFO) != 0;
 
-    if (sigaction(signum, &old_action, NULL) == -1) {
+    if (sigaction(signum, &oldact, NULL) == -1) {
       __libc_format_log(ANDROID_LOG_WARN, "libc", "Restore failed in test for SA_SIGINFO: %s",
                         strerror(errno));
     }
-    return result;
+    return ret;
 }
 
 /*
@@ -181,11 +180,11 @@
      * It's possible somebody cleared the SA_SIGINFO flag, which would mean
      * our "info" arg holds an undefined value.
      */
-    if (!have_siginfo(n)) {
+    if (!haveSiginfo(n)) {
         info = NULL;
     }
 
-    log_signal_summary(n, info);
+    logSignalSummary(n, info);
 
     pid_t tid = gettid();
     int s = socket_abstract_client(DEBUGGER_SOCKET_NAME, SOCK_STREAM);
@@ -246,23 +245,19 @@
 }
 
 void debuggerd_init() {
-    struct sigaction action;
-    memset(&action, 0, sizeof(action));
-    sigemptyset(&action.sa_mask);
-    action.sa_sigaction = debuggerd_signal_handler;
-    action.sa_flags = SA_RESTART | SA_SIGINFO;
+    struct sigaction act;
+    memset(&act, 0, sizeof(act));
+    act.sa_sigaction = debuggerd_signal_handler;
+    act.sa_flags = SA_RESTART | SA_SIGINFO;
+    sigemptyset(&act.sa_mask);
 
-    // Use the alternate signal stack if available so we can catch stack overflows.
-    action.sa_flags |= SA_ONSTACK;
-
-    sigaction(SIGABRT, &action, NULL);
-    sigaction(SIGBUS, &action, NULL);
-    sigaction(SIGFPE, &action, NULL);
-    sigaction(SIGILL, &action, NULL);
-    sigaction(SIGPIPE, &action, NULL);
-    sigaction(SIGSEGV, &action, NULL);
+    sigaction(SIGILL, &act, NULL);
+    sigaction(SIGABRT, &act, NULL);
+    sigaction(SIGBUS, &act, NULL);
+    sigaction(SIGFPE, &act, NULL);
+    sigaction(SIGSEGV, &act, NULL);
 #if defined(SIGSTKFLT)
-    sigaction(SIGSTKFLT, &action, NULL);
+    sigaction(SIGSTKFLT, &act, NULL);
 #endif
-    sigaction(SIGTRAP, &action, NULL);
+    sigaction(SIGPIPE, &act, NULL);
 }
