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

Commit 556b54b5 authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Snap for 11938003 from 8e0b4895 to 24Q3-release

Change-Id: I35712afc9b37d46f47945fb267db3a24257da522
parents 2f3c0dab 8e0b4895
Loading
Loading
Loading
Loading
+91 −18
Original line number Diff line number Diff line
@@ -2195,6 +2195,74 @@ static void DumpstateOnboardingOnly() {
    ds.AddDir(LOGPERSIST_DATA_DIR, false);
}

static std::string GetTimestamp(const timespec& ts) {
    tm tm;
    localtime_r(&ts.tv_sec, &tm);

    // Reserve enough space for the entire time string, includes the space
    // for the '\0' to make the calculations below easier by using size for
    // the total string size.
    std::string str(sizeof("1970-01-01 00:00:00.123456789+0830"), '\0');
    size_t n = strftime(str.data(), str.size(), "%F %H:%M", &tm);
    if (n == 0) {
        return "TIMESTAMP FAILURE";
    }
    int num_chars = snprintf(&str[n], str.size() - n, ":%02d.%09ld", tm.tm_sec, ts.tv_nsec);
    if (num_chars > str.size() - n) {
        return "TIMESTAMP FAILURE";
    }
    n += static_cast<size_t>(num_chars);
    if (strftime(&str[n], str.size() - n, "%z", &tm) == 0) {
        return "TIMESTAMP FAILURE";
    }
    return str;
}

static std::string GetCmdline(pid_t pid) {
    std::string cmdline;
    if (!android::base::ReadFileToString(android::base::StringPrintf("/proc/%d/cmdline", pid),
                                         &cmdline)) {
        return "UNKNOWN";
    }
    // There are '\0' terminators between arguments, convert them to spaces.
    // But start by skipping all trailing '\0' values.
    size_t cur = cmdline.size() - 1;
    while (cur != 0 && cmdline[cur] == '\0') {
        cur--;
    }
    if (cur == 0) {
        return "UNKNOWN";
    }
    while ((cur = cmdline.rfind('\0', cur)) != std::string::npos) {
        cmdline[cur] = ' ';
    }
    return cmdline;
}

static void DumpPidHeader(int fd, pid_t pid, const timespec& ts) {
    // For consistency, the header to this message matches the one
    // dumped by debuggerd.
    dprintf(fd, "\n----- pid %d at %s -----\n", pid, GetTimestamp(ts).c_str());
    dprintf(fd, "Cmd line: %s\n", GetCmdline(pid).c_str());
}

static void DumpPidFooter(int fd, pid_t pid) {
    // For consistency, the footer to this message matches the one
    // dumped by debuggerd.
    dprintf(fd, "----- end %d -----\n", pid);
}

static bool DumpBacktrace(int fd, pid_t pid, bool is_java_process) {
    int ret = dump_backtrace_to_file_timeout(
        pid, is_java_process ? kDebuggerdJavaBacktrace : kDebuggerdNativeBacktrace, 3, fd);
    if (ret == -1 && is_java_process) {
        // Tried to unwind as a java process, try a native unwind.
        dprintf(fd, "Java unwind failed for pid %d, trying a native unwind.\n", pid);
        ret = dump_backtrace_to_file_timeout(pid, kDebuggerdNativeBacktrace, 3, fd);
    }
    return ret != -1;
}

Dumpstate::RunStatus Dumpstate::DumpTraces(const char** path) {
    const std::string temp_file_pattern = ds.bugreport_internal_dir_ + "/dumptrace_XXXXXX";
    const size_t buf_size = temp_file_pattern.length() + 1;
@@ -2243,16 +2311,6 @@ Dumpstate::RunStatus Dumpstate::DumpTraces(const char** path) {
            continue;
        }

        // Skip cached processes.
        if (IsCached(pid)) {
            // For consistency, the header and footer to this message match those
            // dumped by debuggerd in the success case.
            dprintf(fd, "\n---- pid %d at [unknown] ----\n", pid);
            dprintf(fd, "Dump skipped for cached process.\n");
            dprintf(fd, "---- end %d ----", pid);
            continue;
        }

        const std::string link_name = android::base::StringPrintf("/proc/%d/exe", pid);
        std::string exe;
        if (!android::base::Readlink(link_name, &exe)) {
@@ -2281,16 +2339,31 @@ Dumpstate::RunStatus Dumpstate::DumpTraces(const char** path) {
            break;
        }

        timespec start_timespec;
        clock_gettime(CLOCK_REALTIME, &start_timespec);
        if (IsCached(pid)) {
            DumpPidHeader(fd, pid, start_timespec);
            dprintf(fd, "Process is cached, skipping backtrace due to high chance of timeout.\n");
            DumpPidFooter(fd, pid);
            continue;
        }

        const uint64_t start = Nanotime();
        const int ret = dump_backtrace_to_file_timeout(
            pid, is_java_process ? kDebuggerdJavaBacktrace : kDebuggerdNativeBacktrace, 3, fd);
        if (!DumpBacktrace(fd, pid, is_java_process)) {
            if (IsCached(pid)) {
                DumpPidHeader(fd, pid, start_timespec);
                dprintf(fd, "Backtrace failed, but process has become cached.\n");
                DumpPidFooter(fd, pid);
                continue;
            }

        if (ret == -1) {
            // For consistency, the header and footer to this message match those
            // dumped by debuggerd in the success case.
            dprintf(fd, "\n---- pid %d at [unknown] ----\n", pid);
            dprintf(fd, "Dump failed, likely due to a timeout.\n");
            dprintf(fd, "---- end %d ----", pid);
            DumpPidHeader(fd, pid, start_timespec);
            dprintf(fd, "Backtrace gathering failed, likely due to a timeout.\n");
            DumpPidFooter(fd, pid);

            dprintf(fd, "\n[dump %s stack %d: %.3fs elapsed]\n",
                    is_java_process ? "dalvik" : "native", pid,
                    (float)(Nanotime() - start) / NANOS_PER_SEC);
            timeout_failures++;
            continue;
        }
+154 −10
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ cc_library_headers {
    recovery_available: true,
    host_supported: true,
    native_bridge_supported: true,
    cmake_snapshot_supported: true,

    header_libs: [
        "libbinder_headers_platform_shared",
@@ -83,6 +84,124 @@ cc_library_headers {
    },
}

cc_cmake_snapshot {
    name: "binder_sdk",
    modules: [
        "libbinder_sdk",
        "libbinder_sdk_single_threaded",
        "libbinder_ndk_sdk",
        "binderRpcTestNoKernel",
    ],
    prebuilts: [
        // to enable arm64 host support, build with musl - e.g. on aosp_cf_arm64_phone
        "aidl",
        "libc++",
    ],
    include_sources: true,
    cflags: [
        "-DNDEBUG",
        "-DBINDER_ENABLE_LIBLOG_ASSERT",
        "-DBINDER_DISABLE_NATIVE_HANDLE",
        "-DBINDER_DISABLE_BLOB",
        "-DBINDER_NO_LIBBASE",
        "-DBINDER_NO_KERNEL_IPC_TESTING",

        // from Soong's global.go commonGlobalCflags and noOverrideGlobalCflags
        "-Wno-c99-designator",
        "-Wno-missing-field-initializers",

        // warnings that only pop up on gcc
        "-Wno-unknown-pragmas", // "pragma clang"
        "-Wno-attributes", // attributes on compound-statements
        "-Wno-psabi", // reminders about old ABI changes
    ],
    cflags_ignored: [
        // gcc requires all header constexprs to be used in all dependent compilatinon units
        "-Wunused-const-variable",
    ],
    library_mapping: [
        {
            android_name: "libssl",
            mapped_name: "ssl",
            package_pregenerated: "external/boringssl",
        },
        {
            android_name: "libcrypto",
            mapped_name: "crypto",
            package_pregenerated: "external/boringssl",
        },
        {
            android_name: "libgtest",
            mapped_name: "GTest::gtest",
            package_system: "GTest",
        },
        {
            android_name: "libgtest_main",
            mapped_name: "GTest::gtest",
            package_system: "GTest",
        },

        // use libbinder_sdk and friends instead of full Android's libbinder
        {
            android_name: "libbinder_rpc_no_kernel",
            mapped_name: "android::libbinder_sdk",
        },
        {
            android_name: "libbinder_rpc_single_threaded_no_kernel",
            mapped_name: "android::libbinder_sdk_single_threaded",
        },
        {
            android_name: "libbinder_headers",
            mapped_name: "android::libbinder_headers_base",
        },
        {
            android_name: "libbinder",
            mapped_name: "android::libbinder_sdk",
        },
        {
            android_name: "libbinder_ndk",
            mapped_name: "android::libbinder_ndk_sdk",
        },
        {
            android_name: "liblog",
            mapped_name: "android::liblog_stub",
        },

        // explicitly included by Binder tests, but not needed outside of Android
        {
            android_name: "libbase",
        },
        {
            android_name: "libcutils",
        },
        {
            android_name: "libutils",
        },

        // disable tests that don't work outside of Android yet
        {
            android_name: "binder_rpc_test_service",
        },
        {
            android_name: "binder_rpc_test_service_single_threaded",
        },

        // trusty mocks are artificially triggered and not needed outside of Android build
        {
            android_name: "libbinder_on_trusty_mock",
        },
        {
            android_name: "libbinder_ndk_on_trusty_mock",
        },
        {
            android_name: "binderRpcTestService_on_trusty_mock",
        },
        {
            android_name: "binderRpcTest_on_trusty_mock",
        },
    ],
}

// These interfaces are android-specific implementation unrelated to binder
// transport itself and should be moved to AIDL or in domain-specific libs.
//
@@ -126,6 +245,9 @@ cc_defaults {
    header_libs: [
        "libbinder_headers_base",
    ],
    export_header_lib_headers: [
        "libbinder_headers_base",
    ],

    cflags: [
        "-Wextra",
@@ -369,6 +491,7 @@ cc_library {
    double_loadable: true,
    // TODO(b/153609531): remove when no longer needed.
    native_bridge_supported: true,
    cmake_snapshot_supported: false,

    // libbinder does not offer a stable wire protocol.
    // if a second copy of it is installed, then it may break after security
@@ -408,16 +531,8 @@ cc_library {
    afdo: true,
}

cc_library_host_shared {
    name: "libbinder_sdk",

    defaults: [
        "libbinder_common_defaults",
    ],

    shared_libs: [
        "libutils_binder_sdk",
    ],
cc_defaults {
    name: "binder_sdk_defaults",

    cflags: [
        "-DBINDER_ENABLE_LIBLOG_ASSERT",
@@ -429,6 +544,21 @@ cc_library_host_shared {
    header_libs: [
        "liblog_stub",
    ],
}

cc_defaults {
    name: "libbinder_sdk_defaults",

    cmake_snapshot_supported: true,

    defaults: [
        "libbinder_common_defaults",
        "binder_sdk_defaults",
    ],

    shared_libs: [
        "libutils_binder_sdk",
    ],

    srcs: [
        "OS_non_android_linux.cpp",
@@ -446,6 +576,19 @@ cc_library_host_shared {
    },
}

cc_library_host_shared {
    name: "libbinder_sdk",
    defaults: ["libbinder_sdk_defaults"],
}

cc_library_host_shared {
    name: "libbinder_sdk_single_threaded",
    defaults: ["libbinder_sdk_defaults"],
    cflags: [
        "-DBINDER_RPC_SINGLE_THREADED",
    ],
}

cc_library {
    name: "libbinder_rpc_no_kernel",
    vendor_available: true,
@@ -535,6 +678,7 @@ cc_defaults {
    defaults: ["libbinder_tls_shared_deps"],
    vendor_available: true,
    host_supported: true,
    cmake_snapshot_supported: true,

    header_libs: [
        "libbinder_headers",
+1 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ cc_library_headers {
    product_available: true,
    recovery_available: true,
    vendor_available: true,
    cmake_snapshot_supported: true,

    target: {
        windows: {
+40 −12
Original line number Diff line number Diff line
@@ -32,17 +32,11 @@ license {
    ],
}

cc_library {
    name: "libbinder_ndk",

cc_defaults {
    name: "libbinder_ndk_common_defaults",
    host_supported: true,
    recovery_available: true,

    llndk: {
        symbol_file: "libbinder_ndk.map.txt",
        export_llndk_headers: ["libvendorsupport_llndk_headers"],
    },

    export_include_dirs: [
        "include_cpp",
        "include_ndk",
@@ -50,7 +44,6 @@ cc_library {
    ],

    cflags: [
        "-DBINDER_WITH_KERNEL_IPC",
        "-Wall",
        "-Wextra",
        "-Wextra-semi",
@@ -59,14 +52,48 @@ cc_library {

    srcs: [
        "ibinder.cpp",
        "ibinder_jni.cpp",
        "libbinder.cpp",
        "parcel.cpp",
        "stability.cpp",
        "status.cpp",
    ],
}

cc_library_host_shared {
    name: "libbinder_ndk_sdk",

    defaults: [
        "libbinder_ndk_common_defaults",
        "binder_sdk_defaults",
    ],
    cmake_snapshot_supported: true,

    shared_libs: [
        "libbinder_sdk",
        "libutils_binder_sdk",
    ],
}

cc_library {
    name: "libbinder_ndk",

    defaults: ["libbinder_ndk_common_defaults"],
    cmake_snapshot_supported: false,

    llndk: {
        symbol_file: "libbinder_ndk.map.txt",
        export_llndk_headers: ["libvendorsupport_llndk_headers"],
    },

    cflags: [
        "-DBINDER_WITH_KERNEL_IPC",
    ],

    srcs: [
        "ibinder_jni.cpp",
        "parcel_jni.cpp",
        "persistable_bundle.cpp",
        "process.cpp",
        "stability.cpp",
        "status.cpp",
        "service_manager.cpp",
    ],

@@ -195,6 +222,7 @@ cc_library_headers {
    host_supported: true,
    // TODO(b/153609531): remove when no longer needed.
    native_bridge_supported: true,
    cmake_snapshot_supported: true,
    target: {
        darwin: {
            enabled: false,
+0 −1
Original line number Diff line number Diff line
@@ -114,7 +114,6 @@ rust_bindgen {
    crate_name: "binder_rs_serialization_bindgen",
    wrapper_src: "serialization.hpp",
    source_stem: "bindings",
    cpp_std: "gnu++17",
    bindgen_flags: [
        "--allowlist-type", "Transaction",
        "--allowlist-var", "TESTDATA_.*",
Loading