| 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, | |
| host_supported: true, | |
| local_include_dirs: ["libdebuggerd/include"], | |
| export_include_dirs: ["libdebuggerd/include"], | |
| srcs: [ | |
| "libdebuggerd/tombstone_proto_to_text.cpp", | |
| "libdebuggerd/utility_host.cpp", | |
| ], | |
| static_libs: [ | |
| "libbase", | |
| ], | |
| whole_static_libs: [ | |
| "libtombstone_proto", | |
| "libprotobuf-cpp-lite", | |
| ], | |
| shared_libs: [ | |
| "liblog", | |
| ], | |
| 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/scudo.cpp", | |
| "libdebuggerd/tombstone.cpp", | |
| "libdebuggerd/tombstone_proto.cpp", | |
| "libdebuggerd/utility.cpp", | |
| ], | |
| cflags: [ | |
| "-DUSE_SCUDO", | |
| ], | |
| 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", | |
| "scudo_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", | |
| "libscudo", | |
| ], | |
| 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_low_memory: { | |
| cflags: ["-UUSE_SCUDO"], | |
| exclude_static_libs: ["libscudo"], | |
| }, | |
| }, | |
| apex_available: [ | |
| "com.android.runtime", | |
| ], | |
| } | |
| cc_binary { | |
| name: "pbtombstone", | |
| host_supported: true, | |
| defaults: ["debuggerd_defaults"], | |
| srcs: [ | |
| "pbtombstone.cpp", | |
| "tombstone_symbolize.cpp", | |
| ], | |
| static_libs: [ | |
| "libbase", | |
| "libdebuggerd_tombstone_proto_to_text", | |
| "liblog", | |
| "libprotobuf-cpp-lite", | |
| "libtombstone_proto", | |
| ], | |
| } | |
| 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/mte_stack_record_test.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, | |
| }, | |
| 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", | |
| "libnative_bridge_support_accessor_headers", | |
| ], | |
| static_libs: [ | |
| "libtombstoned_client_static", | |
| "libdebuggerd", | |
| "libcutils", | |
| "libtombstone_proto", | |
| "libprotobuf-cpp-lite", | |
| "libnative_bridge_guest_state_accessor", | |
| ], | |
| shared_libs: [ | |
| "libbase", | |
| "liblog", | |
| "libprocinfo", | |
| "libunwindstack", | |
| ], | |
| apex_available: [ | |
| "com.android.runtime", | |
| ], | |
| // Required for tests. | |
| required: ["crash_dump.policy"], | |
| target: { | |
| android: { | |
| header_libs: [ | |
| "libnative_bridge_support_accessor_headers", // For dlext_namespaces.h | |
| ], | |
| shared_libs: ["libdl_android"], // For android_get_exported_namespace implementation | |
| }, | |
| }, | |
| } | |
| cc_binary { | |
| name: "debuggerd", | |
| srcs: [ | |
| "debuggerd.cpp", | |
| ], | |
| defaults: ["debuggerd_defaults"], | |
| shared_libs: [ | |
| "libbase", | |
| "libdebuggerd_client", | |
| "liblog", | |
| "libprocessgroup", | |
| "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", | |
| }, | |
| }, | |
| } |