Loading debuggerd/Android.bp +31 −4 Original line number Diff line number Diff line Loading @@ -74,6 +74,7 @@ cc_library_static { header_libs: [ "libbase_headers", "libdebuggerd_common_headers", "bionic_libc_platform_headers", ], whole_static_libs: [ Loading @@ -92,6 +93,9 @@ cc_library_static { defaults: ["debuggerd_defaults"], srcs: ["handler/debuggerd_fallback_nop.cpp"], header_libs: ["bionic_libc_platform_headers"], export_header_lib_headers: ["bionic_libc_platform_headers"], whole_static_libs: [ "libdebuggerd_handler_core", ], Loading Loading @@ -119,6 +123,10 @@ cc_library_static { "liblzma", "libcutils", ], header_libs: ["bionic_libc_platform_headers"], export_header_lib_headers: ["bionic_libc_platform_headers"], target: { recovery: { exclude_static_libs: [ Loading @@ -138,15 +146,21 @@ cc_library { "util.cpp", ], header_libs: ["libdebuggerd_common_headers"], shared_libs: [ "libbase", "libcutils", "libprocinfo", ], export_header_lib_headers: ["libdebuggerd_common_headers"], header_libs: [ "libdebuggerd_common_headers", "bionic_libc_platform_headers", ], export_header_lib_headers: [ "libdebuggerd_common_headers", "bionic_libc_platform_headers", ], export_include_dirs: ["include"], } Loading @@ -167,6 +181,7 @@ cc_library_static { // Needed for private/bionic_fdsan.h include_dirs: ["bionic/libc"], header_libs: ["bionic_libc_platform_headers"], static_libs: [ "libdexfile_support_static", // libunwindstack dependency Loading @@ -176,6 +191,7 @@ cc_library_static { "libcutils", "liblog", ], target: { recovery: { exclude_static_libs: [ Loading Loading @@ -232,6 +248,10 @@ cc_test { "libdebuggerd", ], header_libs: [ "bionic_libc_platform_headers", ], local_include_dirs: [ "libdebuggerd", ], Loading Loading @@ -277,6 +297,10 @@ cc_binary { }, }, header_libs: [ "bionic_libc_platform_headers", ], static_libs: [ "libtombstoned_client_static", "libdebuggerd", Loading Loading @@ -317,7 +341,10 @@ cc_binary { ], defaults: ["debuggerd_defaults"], header_libs: ["libdebuggerd_common_headers"], header_libs: [ "bionic_libc_platform_headers", "libdebuggerd_common_headers" ], static_libs: [ "libbase", Loading debuggerd/client/debuggerd_client.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ #include <android-base/stringprintf.h> #include <android-base/strings.h> #include <android-base/unique_fd.h> #include <bionic/reserved_signals.h> #include <cutils/sockets.h> #include <procinfo/process.h> Loading @@ -50,7 +51,7 @@ using android::base::unique_fd; using android::base::WriteStringToFd; static bool send_signal(pid_t pid, const DebuggerdDumpType dump_type) { const int signal = (dump_type == kDebuggerdJavaBacktrace) ? SIGQUIT : DEBUGGER_SIGNAL; const int signal = (dump_type == kDebuggerdJavaBacktrace) ? SIGQUIT : BIONIC_SIGNAL_DEBUGGER; sigval val; val.sival_int = (dump_type == kDebuggerdNativeBacktrace) ? 1 : 0; Loading debuggerd/crash_dump.cpp +5 −4 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ #include <android-base/stringprintf.h> #include <android-base/strings.h> #include <android-base/unique_fd.h> #include <bionic/reserved_signals.h> #include <cutils/sockets.h> #include <log/log.h> #include <private/android_filesystem_config.h> Loading Loading @@ -511,13 +512,13 @@ int main(int argc, char** argv) { // Defer the message until later, for readability. bool wait_for_gdb = android::base::GetBoolProperty("debug.debuggerd.wait_for_gdb", false); if (siginfo.si_signo == DEBUGGER_SIGNAL) { if (siginfo.si_signo == BIONIC_SIGNAL_DEBUGGER) { wait_for_gdb = false; } // Detach from all of our attached threads before resuming. for (const auto& [tid, thread] : thread_info) { int resume_signal = thread.signo == DEBUGGER_SIGNAL ? 0 : thread.signo; int resume_signal = thread.signo == BIONIC_SIGNAL_DEBUGGER ? 0 : thread.signo; if (wait_for_gdb) { resume_signal = 0; if (tgkill(target_process, tid, SIGSTOP) != 0) { Loading Loading @@ -555,10 +556,10 @@ int main(int argc, char** argv) { << " (target tid = " << g_target_thread << ")"; int signo = siginfo.si_signo; bool fatal_signal = signo != DEBUGGER_SIGNAL; bool fatal_signal = signo != BIONIC_SIGNAL_DEBUGGER; bool backtrace = false; // si_value is special when used with DEBUGGER_SIGNAL. // si_value is special when used with BIONIC_SIGNAL_DEBUGGER. // 0: dump tombstone // 1: dump backtrace if (!fatal_signal) { Loading debuggerd/crasher/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ cc_binary { name: "crasher", defaults: ["crasher-defaults"], header_libs: ["bionic_libc_platform_headers"], shared_libs: [ "libbase", "liblog", Loading @@ -65,6 +66,7 @@ cc_binary { defaults: ["crasher-defaults"], cppflags: ["-DSTATIC_CRASHER"], static_executable: true, header_libs: ["bionic_libc_platform_headers"], static_libs: [ "libdebuggerd_handler", "libbase", Loading debuggerd/debuggerd_test.cpp +5 −4 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ #include <android/fdsan.h> #include <android/set_abort_message.h> #include <bionic/reserved_signals.h> #include <android-base/cmsg.h> #include <android-base/file.h> Loading Loading @@ -398,7 +399,7 @@ TEST_F(CrasherTest, abort_message_backtrace) { unique_fd output_fd; StartProcess([]() { android_set_abort_message("not actually aborting"); raise(DEBUGGER_SIGNAL); raise(BIONIC_SIGNAL_DEBUGGER); exit(0); }); StartIntercept(&output_fd); Loading Loading @@ -466,7 +467,7 @@ TEST_F(CrasherTest, backtrace) { sigval val; val.sival_int = 1; ASSERT_EQ(0, sigqueue(crasher_pid, DEBUGGER_SIGNAL, val)) << strerror(errno); ASSERT_EQ(0, sigqueue(crasher_pid, BIONIC_SIGNAL_DEBUGGER, val)) << strerror(errno); FinishIntercept(&intercept_result); ASSERT_EQ(1, intercept_result) << "tombstoned reported failure"; ConsumeFd(std::move(output_fd), &result); Loading Loading @@ -734,7 +735,7 @@ __attribute__((noinline)) extern "C" bool raise_debugger_signal(DebuggerdDumpTyp siginfo.si_value.sival_int = dump_type == kDebuggerdNativeBacktrace; if (syscall(__NR_rt_tgsigqueueinfo, getpid(), gettid(), DEBUGGER_SIGNAL, &siginfo) != 0) { if (syscall(__NR_rt_tgsigqueueinfo, getpid(), gettid(), BIONIC_SIGNAL_DEBUGGER, &siginfo) != 0) { PLOG(ERROR) << "libdebuggerd_client: failed to send signal to self"; return false; } Loading Loading @@ -887,7 +888,7 @@ TEST(crash_dump, zombie) { errx(2, "first waitpid returned %d (%s), expected failure with ECHILD", rc, strerror(errno)); } raise(DEBUGGER_SIGNAL); raise(BIONIC_SIGNAL_DEBUGGER); errno = 0; rc = TEMP_FAILURE_RETRY(waitpid(-1, &status, __WALL | __WNOTHREAD)); Loading Loading
debuggerd/Android.bp +31 −4 Original line number Diff line number Diff line Loading @@ -74,6 +74,7 @@ cc_library_static { header_libs: [ "libbase_headers", "libdebuggerd_common_headers", "bionic_libc_platform_headers", ], whole_static_libs: [ Loading @@ -92,6 +93,9 @@ cc_library_static { defaults: ["debuggerd_defaults"], srcs: ["handler/debuggerd_fallback_nop.cpp"], header_libs: ["bionic_libc_platform_headers"], export_header_lib_headers: ["bionic_libc_platform_headers"], whole_static_libs: [ "libdebuggerd_handler_core", ], Loading Loading @@ -119,6 +123,10 @@ cc_library_static { "liblzma", "libcutils", ], header_libs: ["bionic_libc_platform_headers"], export_header_lib_headers: ["bionic_libc_platform_headers"], target: { recovery: { exclude_static_libs: [ Loading @@ -138,15 +146,21 @@ cc_library { "util.cpp", ], header_libs: ["libdebuggerd_common_headers"], shared_libs: [ "libbase", "libcutils", "libprocinfo", ], export_header_lib_headers: ["libdebuggerd_common_headers"], header_libs: [ "libdebuggerd_common_headers", "bionic_libc_platform_headers", ], export_header_lib_headers: [ "libdebuggerd_common_headers", "bionic_libc_platform_headers", ], export_include_dirs: ["include"], } Loading @@ -167,6 +181,7 @@ cc_library_static { // Needed for private/bionic_fdsan.h include_dirs: ["bionic/libc"], header_libs: ["bionic_libc_platform_headers"], static_libs: [ "libdexfile_support_static", // libunwindstack dependency Loading @@ -176,6 +191,7 @@ cc_library_static { "libcutils", "liblog", ], target: { recovery: { exclude_static_libs: [ Loading Loading @@ -232,6 +248,10 @@ cc_test { "libdebuggerd", ], header_libs: [ "bionic_libc_platform_headers", ], local_include_dirs: [ "libdebuggerd", ], Loading Loading @@ -277,6 +297,10 @@ cc_binary { }, }, header_libs: [ "bionic_libc_platform_headers", ], static_libs: [ "libtombstoned_client_static", "libdebuggerd", Loading Loading @@ -317,7 +341,10 @@ cc_binary { ], defaults: ["debuggerd_defaults"], header_libs: ["libdebuggerd_common_headers"], header_libs: [ "bionic_libc_platform_headers", "libdebuggerd_common_headers" ], static_libs: [ "libbase", Loading
debuggerd/client/debuggerd_client.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ #include <android-base/stringprintf.h> #include <android-base/strings.h> #include <android-base/unique_fd.h> #include <bionic/reserved_signals.h> #include <cutils/sockets.h> #include <procinfo/process.h> Loading @@ -50,7 +51,7 @@ using android::base::unique_fd; using android::base::WriteStringToFd; static bool send_signal(pid_t pid, const DebuggerdDumpType dump_type) { const int signal = (dump_type == kDebuggerdJavaBacktrace) ? SIGQUIT : DEBUGGER_SIGNAL; const int signal = (dump_type == kDebuggerdJavaBacktrace) ? SIGQUIT : BIONIC_SIGNAL_DEBUGGER; sigval val; val.sival_int = (dump_type == kDebuggerdNativeBacktrace) ? 1 : 0; Loading
debuggerd/crash_dump.cpp +5 −4 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ #include <android-base/stringprintf.h> #include <android-base/strings.h> #include <android-base/unique_fd.h> #include <bionic/reserved_signals.h> #include <cutils/sockets.h> #include <log/log.h> #include <private/android_filesystem_config.h> Loading Loading @@ -511,13 +512,13 @@ int main(int argc, char** argv) { // Defer the message until later, for readability. bool wait_for_gdb = android::base::GetBoolProperty("debug.debuggerd.wait_for_gdb", false); if (siginfo.si_signo == DEBUGGER_SIGNAL) { if (siginfo.si_signo == BIONIC_SIGNAL_DEBUGGER) { wait_for_gdb = false; } // Detach from all of our attached threads before resuming. for (const auto& [tid, thread] : thread_info) { int resume_signal = thread.signo == DEBUGGER_SIGNAL ? 0 : thread.signo; int resume_signal = thread.signo == BIONIC_SIGNAL_DEBUGGER ? 0 : thread.signo; if (wait_for_gdb) { resume_signal = 0; if (tgkill(target_process, tid, SIGSTOP) != 0) { Loading Loading @@ -555,10 +556,10 @@ int main(int argc, char** argv) { << " (target tid = " << g_target_thread << ")"; int signo = siginfo.si_signo; bool fatal_signal = signo != DEBUGGER_SIGNAL; bool fatal_signal = signo != BIONIC_SIGNAL_DEBUGGER; bool backtrace = false; // si_value is special when used with DEBUGGER_SIGNAL. // si_value is special when used with BIONIC_SIGNAL_DEBUGGER. // 0: dump tombstone // 1: dump backtrace if (!fatal_signal) { Loading
debuggerd/crasher/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ cc_binary { name: "crasher", defaults: ["crasher-defaults"], header_libs: ["bionic_libc_platform_headers"], shared_libs: [ "libbase", "liblog", Loading @@ -65,6 +66,7 @@ cc_binary { defaults: ["crasher-defaults"], cppflags: ["-DSTATIC_CRASHER"], static_executable: true, header_libs: ["bionic_libc_platform_headers"], static_libs: [ "libdebuggerd_handler", "libbase", Loading
debuggerd/debuggerd_test.cpp +5 −4 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ #include <android/fdsan.h> #include <android/set_abort_message.h> #include <bionic/reserved_signals.h> #include <android-base/cmsg.h> #include <android-base/file.h> Loading Loading @@ -398,7 +399,7 @@ TEST_F(CrasherTest, abort_message_backtrace) { unique_fd output_fd; StartProcess([]() { android_set_abort_message("not actually aborting"); raise(DEBUGGER_SIGNAL); raise(BIONIC_SIGNAL_DEBUGGER); exit(0); }); StartIntercept(&output_fd); Loading Loading @@ -466,7 +467,7 @@ TEST_F(CrasherTest, backtrace) { sigval val; val.sival_int = 1; ASSERT_EQ(0, sigqueue(crasher_pid, DEBUGGER_SIGNAL, val)) << strerror(errno); ASSERT_EQ(0, sigqueue(crasher_pid, BIONIC_SIGNAL_DEBUGGER, val)) << strerror(errno); FinishIntercept(&intercept_result); ASSERT_EQ(1, intercept_result) << "tombstoned reported failure"; ConsumeFd(std::move(output_fd), &result); Loading Loading @@ -734,7 +735,7 @@ __attribute__((noinline)) extern "C" bool raise_debugger_signal(DebuggerdDumpTyp siginfo.si_value.sival_int = dump_type == kDebuggerdNativeBacktrace; if (syscall(__NR_rt_tgsigqueueinfo, getpid(), gettid(), DEBUGGER_SIGNAL, &siginfo) != 0) { if (syscall(__NR_rt_tgsigqueueinfo, getpid(), gettid(), BIONIC_SIGNAL_DEBUGGER, &siginfo) != 0) { PLOG(ERROR) << "libdebuggerd_client: failed to send signal to self"; return false; } Loading Loading @@ -887,7 +888,7 @@ TEST(crash_dump, zombie) { errx(2, "first waitpid returned %d (%s), expected failure with ECHILD", rc, strerror(errno)); } raise(DEBUGGER_SIGNAL); raise(BIONIC_SIGNAL_DEBUGGER); errno = 0; rc = TEMP_FAILURE_RETRY(waitpid(-1, &status, __WALL | __WNOTHREAD)); Loading