Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aceb837c authored by Josh Gao's avatar Josh Gao Committed by Gerrit Code Review
Browse files

Merge "debuggerd: switch to using platform headers for DEBUGGER_SIGNAL."

parents 410a1d55 a48b41bc
Loading
Loading
Loading
Loading
+31 −4
Original line number Diff line number Diff line
@@ -74,6 +74,7 @@ cc_library_static {
    header_libs: [
        "libbase_headers",
        "libdebuggerd_common_headers",
        "bionic_libc_platform_headers",
    ],

    whole_static_libs: [
@@ -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",
    ],
@@ -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: [
@@ -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"],
}

@@ -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
@@ -176,6 +191,7 @@ cc_library_static {
        "libcutils",
        "liblog",
    ],

    target: {
        recovery: {
            exclude_static_libs: [
@@ -232,6 +248,10 @@ cc_test {
        "libdebuggerd",
    ],

    header_libs: [
        "bionic_libc_platform_headers",
    ],

    local_include_dirs: [
        "libdebuggerd",
    ],
@@ -277,6 +297,10 @@ cc_binary {
        },
    },

    header_libs: [
        "bionic_libc_platform_headers",
    ],

    static_libs: [
        "libtombstoned_client_static",
        "libdebuggerd",
@@ -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",
+2 −1
Original line number Diff line number Diff line
@@ -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>

@@ -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;

+5 −4
Original line number Diff line number Diff line
@@ -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>
@@ -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) {
@@ -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) {
+2 −0
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ cc_binary {
    name: "crasher",

    defaults: ["crasher-defaults"],
    header_libs: ["bionic_libc_platform_headers"],
    shared_libs: [
        "libbase",
        "liblog",
@@ -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",
+5 −4
Original line number Diff line number Diff line
@@ -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>
@@ -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);
@@ -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);
@@ -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;
  }
@@ -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