| 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.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"], |
| } |
| |
| // 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"], |
| } |
| |
| // 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_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/tombstone_proto_to_text.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: [ |
| "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"], |
| }, |
| }, |
| } |
| |
| 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/utility_test.cpp", |
| ], |
| |
| target: { |
| android: { |
| srcs: [ |
| "client/debuggerd_client_test.cpp", |
| "debuggerd_test.cpp", |
| ], |
| static_libs: [ |
| "libasync_safe", |
| "libtombstoned_client_static", |
| ], |
| }, |
| }, |
| |
| 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", |
| }, |
| }, |
| } |