Loading debuggerd/crash_dump.cpp +7 −2 Original line number Diff line number Diff line Loading @@ -148,7 +148,12 @@ static void abort_handler(pid_t target, const bool& tombstoned_connected, } } dprintf(output_fd.get(), "crash_dump failed to dump process %d: %s\n", target, abort_msg); dprintf(output_fd.get(), "crash_dump failed to dump process"); if (target != 1) { dprintf(output_fd.get(), " %d: %s\n", target, abort_msg); } else { dprintf(output_fd.get(), ": %s\n", abort_msg); } _exit(1); } Loading Loading @@ -195,7 +200,7 @@ int main(int argc, char** argv) { pid_t pseudothread_tid; if (target == 1) { LOG(FATAL) << "target died before we could attach"; LOG(FATAL) << "target died before we could attach (received main tid = " << main_tid << ")"; } if (!android::base::ParseInt(argv[1], &main_tid, 1, std::numeric_limits<pid_t>::max())) { Loading debuggerd/handler/debuggerd_handler.cpp +17 −0 Original line number Diff line number Diff line Loading @@ -62,6 +62,19 @@ #define CRASH_DUMP_PATH "/system/bin/" CRASH_DUMP_NAME class ErrnoRestorer { public: ErrnoRestorer() : saved_errno_(errno) { } ~ErrnoRestorer() { errno = saved_errno_; } private: int saved_errno_; }; extern "C" void debuggerd_fallback_handler(siginfo_t*, ucontext_t*, void*); static debuggerd_callbacks_t g_callbacks; Loading Loading @@ -328,6 +341,10 @@ static void resend_signal(siginfo_t* info, bool crash_dump_started) { // Handler that does crash dumping by forking and doing the processing in the child. // Do this by ptracing the relevant thread, and then execing debuggerd to do the actual dump. static void debuggerd_signal_handler(int signal_number, siginfo_t* info, void* context) { // Make sure we don't change the value of errno, in case a signal comes in between the process // making a syscall and checking errno. ErrnoRestorer restorer; // It's possible somebody cleared the SA_SIGINFO flag, which would mean // our "info" arg holds an undefined value. if (!have_siginfo(signal_number)) { Loading Loading
debuggerd/crash_dump.cpp +7 −2 Original line number Diff line number Diff line Loading @@ -148,7 +148,12 @@ static void abort_handler(pid_t target, const bool& tombstoned_connected, } } dprintf(output_fd.get(), "crash_dump failed to dump process %d: %s\n", target, abort_msg); dprintf(output_fd.get(), "crash_dump failed to dump process"); if (target != 1) { dprintf(output_fd.get(), " %d: %s\n", target, abort_msg); } else { dprintf(output_fd.get(), ": %s\n", abort_msg); } _exit(1); } Loading Loading @@ -195,7 +200,7 @@ int main(int argc, char** argv) { pid_t pseudothread_tid; if (target == 1) { LOG(FATAL) << "target died before we could attach"; LOG(FATAL) << "target died before we could attach (received main tid = " << main_tid << ")"; } if (!android::base::ParseInt(argv[1], &main_tid, 1, std::numeric_limits<pid_t>::max())) { Loading
debuggerd/handler/debuggerd_handler.cpp +17 −0 Original line number Diff line number Diff line Loading @@ -62,6 +62,19 @@ #define CRASH_DUMP_PATH "/system/bin/" CRASH_DUMP_NAME class ErrnoRestorer { public: ErrnoRestorer() : saved_errno_(errno) { } ~ErrnoRestorer() { errno = saved_errno_; } private: int saved_errno_; }; extern "C" void debuggerd_fallback_handler(siginfo_t*, ucontext_t*, void*); static debuggerd_callbacks_t g_callbacks; Loading Loading @@ -328,6 +341,10 @@ static void resend_signal(siginfo_t* info, bool crash_dump_started) { // Handler that does crash dumping by forking and doing the processing in the child. // Do this by ptracing the relevant thread, and then execing debuggerd to do the actual dump. static void debuggerd_signal_handler(int signal_number, siginfo_t* info, void* context) { // Make sure we don't change the value of errno, in case a signal comes in between the process // making a syscall and checking errno. ErrnoRestorer restorer; // It's possible somebody cleared the SA_SIGINFO flag, which would mean // our "info" arg holds an undefined value. if (!have_siginfo(signal_number)) { Loading