package { default_applicable_licenses: ["Android-Apache-2.0"], } cc_defaults { name: "debuggerd_defaults", cflags: [ "-Wall", "-Wextra", "-Werror", "-Wno-gcc-compat", "-Wno-unused-argument", "-Wno-unused-function", "-Wno-nullability-completeness", "-Wno-reorder-init-list", "-Os", "-fno-finite-loops", "-DANDROID_DEBUGGABLE=0", ], local_include_dirs: ["include"], product_variables: { debuggable: { cflags: [ "-UANDROID_DEBUGGABLE", "-DANDROID_DEBUGGABLE=1", ], }, }, } cc_library_headers { name: "libdebuggerd_common_headers", export_include_dirs: ["common/include"], recovery_available: true, vendor_ramdisk_available: true, apex_available: [ "com.android.runtime", "com.android.virt", "//apex_available:platform", ], } cc_library_shared { name: "libtombstoned_client", defaults: ["debuggerd_defaults"], srcs: [ "tombstoned/tombstoned_client.cpp", "util.cpp", ], header_libs: ["libdebuggerd_common_headers"], static_libs: [ "libasync_safe", ], shared_libs: [ "libbase", "libcutils", ], apex_available: [ "com.android.virt", "//apex_available:platform", ], export_header_lib_headers: ["libdebuggerd_common_headers"], export_include_dirs: ["tombstoned/include"], } // Utility library to talk to tombstoned and get an output fd. cc_library_static { name: "libtombstoned_client_static", defaults: ["debuggerd_defaults"], recovery_available: true, vendor_ramdisk_available: true, srcs: [ "tombstoned/tombstoned_client.cpp", "util.cpp", ], header_libs: ["libdebuggerd_common_headers"], whole_static_libs: [ "libasync_safe", "libcutils", "libbase", ], export_header_lib_headers: ["libdebuggerd_common_headers"], export_include_dirs: ["tombstoned/include"], apex_available: ["com.android.runtime"], } // Core implementation, linked into libdebuggerd_handler and the dynamic linker. cc_library_static { name: "libdebuggerd_handler_core", defaults: ["debuggerd_defaults"], recovery_available: true, vendor_ramdisk_available: true, srcs: ["handler/debuggerd_handler.cpp"], header_libs: [ "libbase_headers", "libdebuggerd_common_headers", "bionic_libc_platform_headers", "gwp_asan_headers", ], whole_static_libs: [ "libasync_safe", "libcutils", "libdebuggerd", ], export_header_lib_headers: ["libdebuggerd_common_headers"], export_include_dirs: ["include"], apex_available: [ "com.android.runtime", ], } // Implementation with a no-op fallback. cc_library_static { name: "libdebuggerd_handler", 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", ], export_include_dirs: ["include"], } // Fallback implementation, for use in the Bionic linker only. cc_library_static { name: "libdebuggerd_handler_fallback", visibility: ["//bionic/linker"], apex_available: [ "com.android.runtime", "//apex_available:platform", ], defaults: ["debuggerd_defaults"], recovery_available: true, vendor_ramdisk_available: true, srcs: [ "handler/debuggerd_fallback.cpp", ], whole_static_libs: [ "libdebuggerd_handler_core", "libtombstoned_client_static", "libasync_safe", "libbase", "libdebuggerd", "libunwindstack_no_dex", "liblzma", "libcutils", ], header_libs: ["bionic_libc_platform_headers"], export_header_lib_headers: ["bionic_libc_platform_headers"], export_include_dirs: ["include"], } cc_library { name: "libdebuggerd_client", defaults: ["debuggerd_defaults"], srcs: [ "client/debuggerd_client.cpp", "util.cpp", ], shared_libs: [ "libbase", "libcutils", "libprocinfo", ], header_libs: [ "libdebuggerd_common_headers", "bionic_libc_platform_headers", ], export_header_lib_headers: [ "libdebuggerd_common_headers", "bionic_libc_platform_headers", ], export_include_dirs: ["include"], } cc_library { name: "libdebuggerd_tombstone_proto_to_text", defaults: ["debuggerd_defaults"], ramdisk_available: true, recovery_available: true, vendor_ramdisk_available: true, local_include_dirs: ["libdebuggerd/include"], export_include_dirs: ["libdebuggerd/include"], srcs: [ "libdebuggerd/tombstone_proto_to_text.cpp", ], header_libs: [ "bionic_libc_platform_headers", ], static_libs: [ "libbase", "liblog_for_runtime_apex", "libunwindstack", ], whole_static_libs: [ "libtombstone_proto", "libprotobuf-cpp-lite", ], apex_available: [ "//apex_available:platform", "com.android.runtime", ], } cc_library_static { name: "libdebuggerd", defaults: ["debuggerd_defaults"], ramdisk_available: true, recovery_available: true, vendor_ramdisk_available: true, srcs: [ "libdebuggerd/backtrace.cpp", "libdebuggerd/gwp_asan.cpp", "libdebuggerd/open_files_list.cpp", "libdebuggerd/tombstone.cpp", "libdebuggerd/tombstone_proto.cpp", "libdebuggerd/utility.cpp", ], local_include_dirs: ["libdebuggerd/include"], export_include_dirs: ["libdebuggerd/include"], include_dirs: [ // Needed for private/bionic_fdsan.h "bionic/libc", ], header_libs: [ "bionic_libc_platform_headers", "gwp_asan_headers", "liblog_headers", ], static_libs: [ "libdexfile_support", // libunwindstack dependency "libunwindstack", "liblzma", "libbase", "libcutils", ], whole_static_libs: [ "libdebuggerd_tombstone_proto_to_text", "libasync_safe", "gwp_asan_crash_handler", "libtombstone_proto", "libprocinfo", "libprotobuf-cpp-lite", ], target: { recovery: { exclude_static_libs: [ "libdexfile_support", ], exclude_runtime_libs: [ "libdexfile", ], }, vendor_ramdisk: { exclude_static_libs: [ "libdexfile_support", ], exclude_runtime_libs: [ "libdexfile", ], }, ramdisk: { exclude_static_libs: [ "libdexfile_support", ], exclude_runtime_libs: [ "libdexfile", ], }, android: { runtime_libs: [ "libdexfile", // libdexfile_support dependency ], }, }, product_variables: { debuggable: { cflags: ["-DROOT_POSSIBLE"], }, malloc_not_svelte: { cflags: ["-DUSE_SCUDO"], whole_static_libs: ["libscudo"], srcs: ["libdebuggerd/scudo.cpp"], header_libs: ["scudo_headers"], }, }, apex_available: [ "com.android.runtime", ], } cc_binary { name: "pbtombstone", defaults: ["debuggerd_defaults"], srcs: ["pbtombstone.cpp"], static_libs: [ "libbase", "libdebuggerd", "liblog", "libprotobuf-cpp-lite", "libtombstone_proto", "libunwindstack", ], } cc_test_library { name: "libcrash_test", defaults: ["debuggerd_defaults"], srcs: ["crash_test.cpp"], } cc_test { name: "debuggerd_test", defaults: ["debuggerd_defaults"], require_root: true, cflags: ["-Wno-missing-field-initializers"], srcs: [ "libdebuggerd/test/dump_memory_test.cpp", "libdebuggerd/test/elf_fake.cpp", "libdebuggerd/test/log_fake.cpp", "libdebuggerd/test/open_files_list_test.cpp", "libdebuggerd/test/tombstone_proto_to_text_test.cpp", ], target: { android: { srcs: [ "client/debuggerd_client_test.cpp", "debuggerd_test.cpp", ], static_libs: [ "libasync_safe", "libtombstoned_client_static", ], }, }, sanitize: { memtag_heap: true, memtag_stack: true, }, shared_libs: [ "libbase", "libcutils", "libdebuggerd_client", "liblog", "libnativehelper", "libunwindstack", ], static_libs: [ "libdebuggerd", "libgmock", "libminijail", ], header_libs: [ "bionic_libc_platform_headers", "gwp_asan_headers", ], local_include_dirs: [ "libdebuggerd", ], compile_multilib: "both", multilib: { lib32: { stem: "debuggerd_test32", }, lib64: { stem: "debuggerd_test64", }, }, data: [ ":libcrash_test", ], test_suites: ["device-tests"], } cc_benchmark { name: "debuggerd_benchmark", defaults: ["debuggerd_defaults"], srcs: ["debuggerd_benchmark.cpp"], shared_libs: [ "libbase", "libdebuggerd_client", ], } cc_binary { name: "crash_dump", srcs: [ "crash_dump.cpp", "tombstone_handler.cpp", "util.cpp", ], defaults: ["debuggerd_defaults"], compile_multilib: "both", multilib: { lib32: { suffix: "32", }, lib64: { suffix: "64", }, }, header_libs: [ "bionic_libc_platform_headers", ], static_libs: [ "libtombstoned_client_static", "libdebuggerd", "libcutils", "libtombstone_proto", "libprotobuf-cpp-lite", ], shared_libs: [ "libbase", "liblog", "libprocinfo", "libunwindstack", ], apex_available: [ "com.android.runtime", ], // Required for tests. required: ["crash_dump.policy"], } cc_binary { name: "debuggerd", srcs: [ "debuggerd.cpp", ], defaults: ["debuggerd_defaults"], shared_libs: [ "libbase", "libdebuggerd_client", "liblog", "libprocinfo", ], local_include_dirs: ["include"], } cc_defaults { name: "tombstoned_defaults", srcs: [ "util.cpp", "tombstoned/intercept_manager.cpp", "tombstoned/tombstoned.cpp", ], defaults: ["debuggerd_defaults"], header_libs: [ "bionic_libc_platform_headers", "libdebuggerd_common_headers", ], static_libs: [ "libbase", "libcutils", "libevent", "liblog", ], } cc_binary { name: "tombstoned", defaults: ["tombstoned_defaults"], init_rc: ["tombstoned/tombstoned.rc"], } cc_binary { name: "tombstoned.microdroid", defaults: ["tombstoned_defaults"], init_rc: ["tombstoned/tombstoned.microdroid.rc"], } prebuilt_etc { name: "crash_dump.policy", sub_dir: "seccomp_policy", filename_from_src: true, arch: { arm: { src: "seccomp_policy/crash_dump.arm.policy", required: [ "crash_dump.policy_other", ], }, arm64: { src: "seccomp_policy/crash_dump.arm64.policy", required: [ "crash_dump.policy_other", ], }, riscv64: { src: "seccomp_policy/crash_dump.riscv64.policy", }, x86: { src: "seccomp_policy/crash_dump.x86.policy", required: [ "crash_dump.policy_other", ], }, x86_64: { src: "seccomp_policy/crash_dump.x86_64.policy", required: [ "crash_dump.policy_other", ], }, }, } // This installs the "other" architecture (so 32-bit on 64-bit device). prebuilt_etc { name: "crash_dump.policy_other", sub_dir: "seccomp_policy", filename_from_src: true, arch: { arm: { src: "seccomp_policy/crash_dump.arm64.policy", }, arm64: { src: "seccomp_policy/crash_dump.arm.policy", }, riscv64: { enabled: false, }, x86: { src: "seccomp_policy/crash_dump.x86_64.policy", }, x86_64: { src: "seccomp_policy/crash_dump.x86.policy", }, }, }