// // Copyright (C) 2012 The Android Open Source Project // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package { default_applicable_licenses: ["bionic_tests_license"], } license { name: "bionic_tests_license", visibility: [":__subpackages__"], license_kinds: [ "SPDX-license-identifier-Apache-2.0", "SPDX-license-identifier-BSD", ], license_text: [ "NOTICE", ], } cc_defaults { name: "bionic_tests_defaults", host_supported: true, target: { darwin: { enabled: false, }, android: { header_libs: ["bionic_libc_platform_headers"], }, linux_bionic: { header_libs: ["bionic_libc_platform_headers"], }, }, cflags: [ "-fstack-protector-all", "-g", "-Wall", "-Wextra", "-Wunused", "-Werror", "-fno-builtin", // We want to test deprecated API too. "-Wno-deprecated-declarations", // Needed to test pthread_internal_t layout. "-Wno-invalid-offsetof", // For glibc. "-D__STDC_LIMIT_MACROS", ], header_libs: [ "libcutils_headers", "gwp_asan_headers" ], stl: "libc++", // Ensure that the tests exercise shadow call stack support. // We don't use `scs: true` here because that would give us a second // variant of this library where we actually just want to say "this // library should always be built this way". arch: { arm64: { cflags: ["-fsanitize=shadow-call-stack"], }, riscv64: { cflags: ["-fsanitize=shadow-call-stack"], }, }, sanitize: { address: false, }, // Use the bootstrap version of bionic because some tests call private APIs // that aren't exposed by the APEX bionic stubs. bootstrap: true, } // ----------------------------------------------------------------------------- // Prebuilt shared libraries for use in tests. // ----------------------------------------------------------------------------- cc_prebuilt_test_library_shared { name: "libtest_invalid-rw_load_segment", strip: { none: true, }, check_elf_files: false, relative_install_path: "bionic-loader-test-libs/prebuilt-elf-files", arch: { arm: { srcs: ["prebuilt-elf-files/arm/libtest_invalid-rw_load_segment.so"], }, arm64: { srcs: ["prebuilt-elf-files/arm64/libtest_invalid-rw_load_segment.so"], }, riscv64: { srcs: ["prebuilt-elf-files/riscv64/libtest_invalid-rw_load_segment.so"], }, x86: { srcs: ["prebuilt-elf-files/x86/libtest_invalid-rw_load_segment.so"], }, x86_64: { srcs: ["prebuilt-elf-files/x86_64/libtest_invalid-rw_load_segment.so"], }, }, } cc_prebuilt_test_library_shared { name: "libtest_invalid-unaligned_shdr_offset", strip: { none: true, }, check_elf_files: false, relative_install_path: "bionic-loader-test-libs/prebuilt-elf-files", arch: { arm: { srcs: ["prebuilt-elf-files/arm/libtest_invalid-unaligned_shdr_offset.so"], }, arm64: { srcs: ["prebuilt-elf-files/arm64/libtest_invalid-unaligned_shdr_offset.so"], }, riscv64: { srcs: ["prebuilt-elf-files/riscv64/libtest_invalid-unaligned_shdr_offset.so"], }, x86: { srcs: ["prebuilt-elf-files/x86/libtest_invalid-unaligned_shdr_offset.so"], }, x86_64: { srcs: ["prebuilt-elf-files/x86_64/libtest_invalid-unaligned_shdr_offset.so"], }, }, } cc_prebuilt_test_library_shared { name: "libtest_invalid-zero_shentsize", strip: { none: true, }, check_elf_files: false, relative_install_path: "bionic-loader-test-libs/prebuilt-elf-files", arch: { arm: { srcs: ["prebuilt-elf-files/arm/libtest_invalid-zero_shentsize.so"], }, arm64: { srcs: ["prebuilt-elf-files/arm64/libtest_invalid-zero_shentsize.so"], }, riscv64: { srcs: ["prebuilt-elf-files/riscv64/libtest_invalid-zero_shentsize.so"], }, x86: { srcs: ["prebuilt-elf-files/x86/libtest_invalid-zero_shentsize.so"], }, x86_64: { srcs: ["prebuilt-elf-files/x86_64/libtest_invalid-zero_shentsize.so"], }, }, } cc_prebuilt_test_library_shared { name: "libtest_invalid-zero_shstrndx", strip: { none: true, }, check_elf_files: false, relative_install_path: "bionic-loader-test-libs/prebuilt-elf-files", arch: { arm: { srcs: ["prebuilt-elf-files/arm/libtest_invalid-zero_shstrndx.so"], }, arm64: { srcs: ["prebuilt-elf-files/arm64/libtest_invalid-zero_shstrndx.so"], }, riscv64: { srcs: ["prebuilt-elf-files/riscv64/libtest_invalid-zero_shstrndx.so"], }, x86: { srcs: ["prebuilt-elf-files/x86/libtest_invalid-zero_shstrndx.so"], }, x86_64: { srcs: ["prebuilt-elf-files/x86_64/libtest_invalid-zero_shstrndx.so"], }, }, } cc_prebuilt_test_library_shared { name: "libtest_invalid-empty_shdr_table", strip: { none: true, }, check_elf_files: false, relative_install_path: "bionic-loader-test-libs/prebuilt-elf-files", arch: { arm: { srcs: ["prebuilt-elf-files/arm/libtest_invalid-empty_shdr_table.so"], }, arm64: { srcs: ["prebuilt-elf-files/arm64/libtest_invalid-empty_shdr_table.so"], }, riscv64: { srcs: ["prebuilt-elf-files/riscv64/libtest_invalid-empty_shdr_table.so"], }, x86: { srcs: ["prebuilt-elf-files/x86/libtest_invalid-empty_shdr_table.so"], }, x86_64: { srcs: ["prebuilt-elf-files/x86_64/libtest_invalid-empty_shdr_table.so"], }, }, } cc_prebuilt_test_library_shared { name: "libtest_invalid-zero_shdr_table_offset", strip: { none: true, }, check_elf_files: false, relative_install_path: "bionic-loader-test-libs/prebuilt-elf-files", arch: { arm: { srcs: ["prebuilt-elf-files/arm/libtest_invalid-zero_shdr_table_offset.so"], }, arm64: { srcs: ["prebuilt-elf-files/arm64/libtest_invalid-zero_shdr_table_offset.so"], }, riscv64: { srcs: ["prebuilt-elf-files/riscv64/libtest_invalid-zero_shdr_table_offset.so"], }, x86: { srcs: ["prebuilt-elf-files/x86/libtest_invalid-zero_shdr_table_offset.so"], }, x86_64: { srcs: ["prebuilt-elf-files/x86_64/libtest_invalid-zero_shdr_table_offset.so"], }, }, } cc_prebuilt_test_library_shared { name: "libtest_invalid-zero_shdr_table_content", strip: { none: true, }, check_elf_files: false, relative_install_path: "bionic-loader-test-libs/prebuilt-elf-files", arch: { arm: { srcs: ["prebuilt-elf-files/arm/libtest_invalid-zero_shdr_table_content.so"], }, arm64: { srcs: ["prebuilt-elf-files/arm64/libtest_invalid-zero_shdr_table_content.so"], }, riscv64: { srcs: ["prebuilt-elf-files/riscv64/libtest_invalid-zero_shdr_table_content.so"], }, x86: { srcs: ["prebuilt-elf-files/x86/libtest_invalid-zero_shdr_table_content.so"], }, x86_64: { srcs: ["prebuilt-elf-files/x86_64/libtest_invalid-zero_shdr_table_content.so"], }, }, } cc_prebuilt_test_library_shared { name: "libtest_invalid-textrels", strip: { none: true, }, check_elf_files: false, relative_install_path: "bionic-loader-test-libs/prebuilt-elf-files", arch: { arm: { srcs: ["prebuilt-elf-files/arm/libtest_invalid-textrels.so"], }, arm64: { srcs: ["prebuilt-elf-files/arm64/libtest_invalid-textrels.so"], }, riscv64: { srcs: ["prebuilt-elf-files/riscv64/libtest_invalid-textrels.so"], }, x86: { srcs: ["prebuilt-elf-files/x86/libtest_invalid-textrels.so"], }, x86_64: { srcs: ["prebuilt-elf-files/x86_64/libtest_invalid-textrels.so"], }, }, } cc_prebuilt_test_library_shared { name: "libtest_invalid-textrels2", strip: { none: true, }, check_elf_files: false, relative_install_path: "bionic-loader-test-libs/prebuilt-elf-files", arch: { arm: { srcs: ["prebuilt-elf-files/arm/libtest_invalid-textrels2.so"], }, arm64: { srcs: ["prebuilt-elf-files/arm64/libtest_invalid-textrels2.so"], }, riscv64: { srcs: ["prebuilt-elf-files/riscv64/libtest_invalid-textrels2.so"], }, x86: { srcs: ["prebuilt-elf-files/x86/libtest_invalid-textrels2.so"], }, x86_64: { srcs: ["prebuilt-elf-files/x86_64/libtest_invalid-textrels2.so"], }, }, } cc_prebuilt_test_library_shared { name: "libtest_invalid-local-tls", strip: { none: true, }, check_elf_files: false, relative_install_path: "bionic-loader-test-libs/prebuilt-elf-files", arch: { arm: { srcs: ["prebuilt-elf-files/arm/libtest_invalid-local-tls.so"], }, arm64: { srcs: ["prebuilt-elf-files/arm64/libtest_invalid-local-tls.so"], }, x86: { srcs: ["prebuilt-elf-files/x86/libtest_invalid-local-tls.so"], }, x86_64: { srcs: ["prebuilt-elf-files/x86_64/libtest_invalid-local-tls.so"], }, }, } // ----------------------------------------------------------------------------- // All standard tests. // ----------------------------------------------------------------------------- // Test diagnostics emitted by clang. The library that results is useless; we // just want to run '-Xclang -verify', which will fail if the diagnostics don't // match up with what the source file says they should be. cc_test_library { name: "clang_diagnostic_tests", cflags: [ "-Xclang", "-verify", ], srcs: ["sys_ioctl_diag_test.cpp"], } cc_test_library { name: "libBionicStandardTests", defaults: ["bionic_tests_defaults"], tidy_disabled_srcs: [ "malloc_test.cpp", // timed out with clang-tidy, and too many warnings ], srcs: [ "__aeabi_read_tp_test.cpp", "__cxa_atexit_test.cpp", "__cxa_demangle_test.cpp", "alloca_test.cpp", "android_get_device_api_level.cpp", "android_set_abort_message_test.cpp", "arpa_inet_test.cpp", "async_safe_test.cpp", "assert_test.cpp", "buffer_tests.cpp", "bug_26110743_test.cpp", "byteswap_test.cpp", "complex_test.cpp", "complex_force_long_double_test.cpp", "ctype_test.cpp", "dirent_test.cpp", "elf_test.cpp", "endian_test.cpp", "errno_test.cpp", "error_test.cpp", "eventfd_test.cpp", "fcntl_test.cpp", "fdsan_test.cpp", "fdtrack_test.cpp", "fenv_test.cpp", "_FILE_OFFSET_BITS_test.cpp", "float_test.cpp", "fnmatch_test.cpp", "ftw_test.cpp", "getauxval_test.cpp", "getcwd_test.cpp", "glob_test.cpp", "grp_pwd_test.cpp", "grp_pwd_file_test.cpp", "heap_tagging_level_test.cpp", "iconv_test.cpp", "ifaddrs_test.cpp", "ifunc_test.cpp", "inttypes_test.cpp", "iso646_test.c", "langinfo_test.cpp", "leak_test.cpp", "libgen_basename_test.cpp", "libgen_test.cpp", "limits_test.cpp", "linux_swab_test.cpp", "locale_test.cpp", "malloc_iterate_test.cpp", "malloc_test.cpp", "math_test.cpp", "math_force_long_double_test.cpp", "membarrier_test.cpp", "memtag_stack_test.cpp", "mntent_test.cpp", "mte_test.cpp", "netdb_test.cpp", "net_if_test.cpp", "netinet_ether_test.cpp", "netinet_in_test.cpp", "netinet_ip_icmp_test.cpp", "netinet_udp_test.cpp", "nl_types_test.cpp", "pidfd_test.cpp", "poll_test.cpp", "prio_ctor_test.cpp", "pthread_test.cpp", "pty_test.cpp", "regex_test.cpp", "resolv_test.cpp", "sched_test.cpp", "scs_test.cpp", "scsi_sg_test.cpp", "search_test.cpp", "semaphore_test.cpp", "setjmp_test.cpp", "signal_test.cpp", "spawn_test.cpp", "stack_protector_test.cpp", "stack_protector_test_helper.cpp", "stack_unwinding_test.cpp", "stdalign_test.cpp", "stdarg_test.cpp", "stdatomic_test.cpp", "stdbool_test.c", "stdint_test.cpp", "stdio_nofortify_test.cpp", "stdio_test.cpp", "stdio_ext_test.cpp", "stdlib_test.cpp", "stdnoreturn_test.cpp", "string_nofortify_test.cpp", "string_test.cpp", "string_posix_strerror_r_test.cpp", "string_posix_strerror_r_wrapper.cpp", "strings_nofortify_test.cpp", "strings_test.cpp", "struct_layout_test.cpp", "sstream_test.cpp", "sys_auxv_test.cpp", "sys_epoll_test.cpp", "sys_mman_test.cpp", "sys_msg_test.cpp", "sys_param_test.cpp", "sys_personality_test.cpp", "sys_prctl_test.cpp", "sys_procfs_test.cpp", "sys_ptrace_test.cpp", "sys_quota_test.cpp", "sys_random_test.cpp", "sys_resource_test.cpp", "sys_select_test.cpp", "sys_sem_test.cpp", "sys_sendfile_test.cpp", "sys_shm_test.cpp", "sys_signalfd_test.cpp", "sys_socket_test.cpp", "sys_stat_test.cpp", "sys_statvfs_test.cpp", "sys_syscall_test.cpp", "sys_sysinfo_test.cpp", "sys_sysmacros_test.cpp", "sys_time_test.cpp", "sys_timex_test.cpp", "sys_ttydefaults_test.cpp", "sys_types_test.cpp", "sys_uio_test.cpp", "sys_un_test.cpp", "sys_vfs_test.cpp", "sys_wait_test.cpp", "sys_xattr_test.cpp", "system_properties_test.cpp", "system_properties_test2.cpp", "termios_test.cpp", "tgmath_test.c", "threads_test.cpp", "time_test.cpp", "uchar_test.cpp", "unistd_nofortify_test.cpp", "unistd_test.cpp", "utils.cpp", "utmp_test.cpp", "utmpx_test.cpp", "wchar_test.cpp", "wctype_test.cpp", ], include_dirs: [ "bionic/libc", ], target: { bionic: { whole_static_libs: [ "libasync_safe", "libprocinfo", "libsystemproperties", ], }, musl: { exclude_srcs: [ // musl doesn't have error.h "error_test.cpp", // musl doesn't define noreturn for C++ "stdnoreturn_test.cpp", // unsupported relocation type 37 "ifunc_test.cpp", // musl #defines utmp to utmpx, causing a collision with // utmpx_test.cpp "utmp_test.cpp", ], }, }, static_libs: [ "libtinyxml2", "liblog", "libbase", ], shared: { enabled: false, }, generated_headers: ["generated_android_ids"], // Bug: http://b/218788252 IR verifier too strict for ifunc resolver that // accept parameters. lto: { never: true, }, } cc_test_library { name: "libBionicElfTlsTests", defaults: ["bionic_tests_defaults"], srcs: [ "elftls_test.cpp", ], include_dirs: [ "bionic/libc", ], shared: { enabled: false, }, cflags: [ "-fno-emulated-tls", ], // With fuzzer builds, compiler instrumentation generates a reference to the // __sancov_lowest_stack variable, which (for now) is defined by the fuzzer // library as an emutls symbol. The -fno-emulated-tls flag above configures // the compiler to reference an ordinary ELF TLS __sancov_lowest_stack // symbol instead, which isn't defined. Disable the fuzzer for this test // until the platform is switched to ELF TLS. sanitize: { fuzzer: false, }, } cc_test_library { name: "libBionicElfTlsLoaderTests", defaults: ["bionic_tests_defaults"], srcs: [ "elftls_dl_test.cpp", ], include_dirs: [ "bionic/libc", ], static_libs: [ "liblog", "libbase", ], shared: { enabled: false, }, cflags: [ "-fno-emulated-tls", ], // With fuzzer builds, compiler instrumentation generates a reference to the // __sancov_lowest_stack variable, which (for now) is defined by the fuzzer // library as an emutls symbol. The -fno-emulated-tls flag above configures // the compiler to reference an ordinary ELF TLS __sancov_lowest_stack // symbol instead, which isn't defined. Disable the fuzzer for this test // until the platform is switched to ELF TLS. sanitize: { fuzzer: false, }, } cc_test_library { name: "libBionicFramePointerTests", defaults: ["bionic_tests_defaults"], srcs: [ "android_unsafe_frame_pointer_chase_test.cpp", ], include_dirs: [ "bionic/libc", ], cflags: [ "-fno-omit-frame-pointer", ], } // ----------------------------------------------------------------------------- // Fortify tests. // ----------------------------------------------------------------------------- cc_defaults { name: "bionic_clang_fortify_tests_w_flags", cflags: [ "-Wno-builtin-memcpy-chk-size", "-Wno-format-security", "-Wno-format-zero-length", "-Wno-fortify-source", "-Wno-memset-transposed-args", "-Wno-strlcpy-strlcat-size", "-Wno-strncat-size", ], static_libs: [ "libbase", ], } cc_defaults { name: "bionic_fortify_tests_defaults", cflags: [ "-U_FORTIFY_SOURCE", ], srcs: ["fortify_test_main.cpp"], static_libs: [ "libbase", ], tidy: false, target: { musl: { // Musl doesn't have fortify enabled: false, }, }, } // Ensures that FORTIFY checks aren't run when ASAN is on. cc_test { name: "bionic-fortify-runtime-asan-test", defaults: [ "bionic_clang_fortify_tests_w_flags", ], cflags: [ "-Werror", "-D_FORTIFY_SOURCE=2", ], sanitize: { address: true, }, srcs: ["clang_fortify_asan.cpp"], } // Ensure we don't use FORTIFY'ed functions with the static analyzer/clang-tidy: // it can confuse these tools pretty easily. If this builds successfully, then // __clang_analyzer__ overrode FORTIFY. Otherwise, FORTIFY was incorrectly // enabled. The library that results from building this is meant to be unused. cc_test_library { name: "fortify_disabled_for_tidy", defaults: [ "bionic_clang_fortify_tests_w_flags", ], cflags: [ "-Werror", "-D_FORTIFY_SOURCE=2", "-D__clang_analyzer__", ], srcs: ["clang_fortify_tests.cpp"], tidy: false, } cc_test_library { name: "libfortify1-tests-clang", defaults: [ "bionic_fortify_tests_defaults", "bionic_tests_defaults", ], cflags: [ "-D_FORTIFY_SOURCE=1", "-DTEST_NAME=Fortify1_clang", ], shared: { enabled: false, }, } cc_test_library { name: "libfortify2-tests-clang", defaults: [ "bionic_fortify_tests_defaults", "bionic_tests_defaults", ], cflags: [ "-D_FORTIFY_SOURCE=2", "-DTEST_NAME=Fortify2_clang", ], shared: { enabled: false, }, } cc_defaults { name: "bionic_new_fortify_tests_defaults", defaults: [ "bionic_clang_fortify_tests_w_flags", ], cflags: [ "-U_FORTIFY_SOURCE", ], srcs: ["clang_fortify_tests.cpp"], tidy: false, target: { host: { cflags: ["-D__clang__"], }, }, } cc_test_library { name: "libfortify1-new-tests-clang", defaults: [ "bionic_new_fortify_tests_defaults", "bionic_tests_defaults", ], cflags: [ "-D_FORTIFY_SOURCE=1", "-DTEST_NAME=Fortify1_clang_new", ], shared: { enabled: false, }, } cc_test_library { name: "libfortify2-new-tests-clang", defaults: [ "bionic_new_fortify_tests_defaults", "bionic_tests_defaults", ], cflags: [ "-D_FORTIFY_SOURCE=2", "-DTEST_NAME=Fortify2_clang_new", ], shared: { enabled: false, }, } // ----------------------------------------------------------------------------- // Library of all tests (excluding the dynamic linker tests). // ----------------------------------------------------------------------------- cc_test_library { name: "libBionicTests", defaults: ["bionic_tests_defaults"], host_supported: false, whole_static_libs: [ "libBionicStandardTests", "libBionicElfTlsTests", "libBionicFramePointerTests", "libfortify1-tests-clang", "libfortify1-new-tests-clang", "libfortify2-tests-clang", "libfortify2-new-tests-clang", ], shared: { enabled: false, }, } cc_test_library { name: "libBionicLoaderTests", defaults: [ "bionic_tests_defaults", ], srcs: [ "atexit_test.cpp", "dl_test.cpp", "dlfcn_symlink_support.cpp", "dlfcn_test.cpp", "execinfo_test.cpp", "link_test.cpp", "pthread_dlfcn_test.cpp", ], static_libs: [ "libbase", ], include_dirs: [ "bionic/libc", ], shared: { enabled: false, }, target: { android: { srcs: [ "cfi_test.cpp", "dlext_test.cpp", "libdl_test.cpp", ], static_libs: [ "libmeminfo", "libprocinfo", "libziparchive", ], }, }, } // ----------------------------------------------------------------------------- // Library of bionic customized gtest main function, with normal gtest output format, // which is needed by bionic cts test. // ----------------------------------------------------------------------------- cc_test_library { name: "libBionicCtsGtestMain", defaults: ["bionic_tests_defaults"], srcs: [ "gtest_globals.cpp", "gtest_main.cpp", ], shared: { enabled: false, }, whole_static_libs: [ "libbase", "libgtest_isolated", ], } // ----------------------------------------------------------------------------- // Tests for the device using bionic's .so. Run with: // adb shell /data/nativetest/bionic-unit-tests/bionic-unit-tests // adb shell /data/nativetest64/bionic-unit-tests/bionic-unit-tests // ----------------------------------------------------------------------------- cc_defaults { name: "bionic_unit_tests_defaults", host_supported: false, gtest: false, defaults: [ "bionic_tests_defaults", ], whole_static_libs: [ "libBionicTests", "libBionicLoaderTests", "libBionicElfTlsLoaderTests", ], static_libs: [ "libtinyxml2", "liblog", "libbase", "libgtest_isolated", ], srcs: [ // TODO: Include __cxa_thread_atexit_test.cpp to glibc tests once it is upgraded (glibc 2.18+) "__cxa_thread_atexit_test.cpp", "gtest_globals.cpp", "gtest_main.cpp", "gwp_asan_test.cpp", "thread_local_test.cpp", ], conlyflags: [ "-fexceptions", "-fnon-call-exceptions", ], ldflags: ["-Wl,--export-dynamic"], include_dirs: ["bionic/libc"], stl: "libc++_static", target: { android: { shared_libs: [ "ld-android", "libdl", "libdl_android", "libdl_preempt_test_1", "libdl_preempt_test_2", "libdl_test_df_1_global", "libtest_elftls_shared_var", "libtest_elftls_tprel", ], static_libs: [ // The order of these libraries matters, do not shuffle them. "libmeminfo", "libziparchive", "libz", "libutils", ], ldflags: [ "-Wl,--rpath,${ORIGIN}/bionic-loader-test-libs", "-Wl,--enable-new-dtags", ], }, }, data_bins: [ "cfi_test_helper", "cfi_test_helper2", "elftls_dlopen_ie_error_helper", "exec_linker_helper", "exec_linker_helper_lib", "heap_tagging_async_helper", "heap_tagging_disabled_helper", "heap_tagging_static_async_helper", "heap_tagging_static_disabled_helper", "heap_tagging_static_sync_helper", "heap_tagging_sync_helper", "stack_tagging_helper", "stack_tagging_static_helper", "ld_config_test_helper", "ld_config_test_helper_lib1", "ld_config_test_helper_lib2", "ld_config_test_helper_lib3", "ld_preload_test_helper", "ld_preload_test_helper_lib1", "ld_preload_test_helper_lib2", "ns_hidden_child_helper", "preinit_getauxval_test_helper", "preinit_syscall_test_helper", "thread_exit_cb_helper", "tls_properties_helper", ], data_libs: [ "libatest_simple_zip", "libcfi-test", "libcfi-test-bad", "libdl_preempt_test_1", "libdl_preempt_test_2", "libdl_test_df_1_global", "libdlext_test", "libdlext_test_different_soname", "libdlext_test_fd", "libdlext_test_norelro", "libdlext_test_recursive", "libdlext_test_zip", "libgnu-hash-table-library", "libns_hidden_child_app", "libns_hidden_child_global", "libns_hidden_child_internal", "libns_hidden_child_public", "libnstest_dlopened", "libnstest_ns_a_public1", "libnstest_ns_a_public1_internal", "libnstest_ns_b_public2", "libnstest_ns_b_public3", "libnstest_private", "libnstest_private_external", "libnstest_public", "libnstest_public_internal", "libnstest_root", "libnstest_root_not_isolated", "librelocations-ANDROID_REL", "librelocations-ANDROID_RELR", "librelocations-RELR", "librelocations-fat", "libsegment_gap_inner", "libsegment_gap_outer", "libsysv-hash-table-library", "libtest_atexit", "libtest_check_order_dlsym", "libtest_check_order_dlsym_1_left", "libtest_check_order_dlsym_2_right", "libtest_check_order_dlsym_3_c", "libtest_check_order_dlsym_a", "libtest_check_order_dlsym_b", "libtest_check_order_dlsym_d", "libtest_check_order_reloc_root", "libtest_check_order_reloc_root_1", "libtest_check_order_reloc_root_2", "libtest_check_order_reloc_siblings", "libtest_check_order_reloc_siblings_1", "libtest_check_order_reloc_siblings_2", "libtest_check_order_reloc_siblings_3", "libtest_check_order_reloc_siblings_a", "libtest_check_order_reloc_siblings_b", "libtest_check_order_reloc_siblings_c", "libtest_check_order_reloc_siblings_c_1", "libtest_check_order_reloc_siblings_c_2", "libtest_check_order_reloc_siblings_d", "libtest_check_order_reloc_siblings_e", "libtest_check_order_reloc_siblings_f", "libtest_check_rtld_next_from_library", "libtest_dlopen_df_1_global", "libtest_dlopen_from_ctor", "libtest_dlopen_from_ctor_main", "libtest_dlopen_weak_undefined_func", "libtest_dlsym_df_1_global", "libtest_dlsym_from_this", "libtest_dlsym_from_this_child", "libtest_dlsym_from_this_grandchild", "libtest_dlsym_weak_func", "libtest_dt_runpath_a", "libtest_dt_runpath_b", "libtest_dt_runpath_c", "libtest_dt_runpath_d", "libtest_dt_runpath_x", "libtest_dt_runpath_y", "libtest_elftls_dynamic", "libtest_elftls_dynamic_filler_1", "libtest_elftls_dynamic_filler_2", "libtest_elftls_dynamic_filler_3", "libtest_elftls_shared_var", "libtest_elftls_shared_var_ie", "libtest_elftls_tprel", "libtest_empty", "libtest_ifunc", "libtest_ifunc_variable", "libtest_ifunc_variable_impl", "libtest_indirect_thread_local_dtor", "libtest_init_fini_order_child", "libtest_init_fini_order_grand_child", "libtest_init_fini_order_root", "libtest_init_fini_order_root2", "libtest_invalid-empty_shdr_table", "libtest_invalid-local-tls", "libtest_invalid-rw_load_segment", "libtest_invalid-textrels", "libtest_invalid-textrels2", "libtest_invalid-unaligned_shdr_offset", "libtest_invalid-zero_shdr_table_content", "libtest_invalid-zero_shdr_table_offset", "libtest_invalid-zero_shentsize", "libtest_invalid-zero_shstrndx", "libtest_missing_symbol", "libtest_missing_symbol_child_private", "libtest_missing_symbol_child_public", "libtest_missing_symbol_root", "libtest_nodelete_1", "libtest_nodelete_2", "libtest_nodelete_dt_flags_1", "libtest_pthread_atfork", "libtest_relo_check_dt_needed_order", "libtest_relo_check_dt_needed_order_1", "libtest_relo_check_dt_needed_order_2", "libtest_simple", "libtest_thread_local_dtor", "libtest_thread_local_dtor2", "libtest_two_parents_child", "libtest_two_parents_parent1", "libtest_two_parents_parent2", "libtest_versioned_lib", "libtest_versioned_libv1", "libtest_versioned_libv2", "libtest_versioned_otherlib", "libtest_versioned_otherlib_empty", "libtest_versioned_uselibv1", "libtest_versioned_uselibv2", "libtest_versioned_uselibv2_other", "libtest_versioned_uselibv3_other", "libtest_with_dependency", "libtest_with_dependency_loop", "libtest_with_dependency_loop_a", "libtest_with_dependency_loop_b", "libtest_with_dependency_loop_c", "libtestshared", ], } cc_test { name: "bionic-unit-tests", defaults: [ "bionic_unit_tests_defaults", ], test_suites: ["device-tests"], data: [ ":libdlext_test_runpath_zip_zipaligned", ":libdlext_test_zip_zipaligned", ], } cc_test { name: "hwasan_test", enabled: false, // This does not use bionic_tests_defaults because it is not supported on // host. arch: { arm64: { enabled: true, }, }, sanitize: { hwaddress: true, }, srcs: [ "hwasan_test.cpp", ], shared_libs: [ "libbase", ], data_libs: ["libtest_simple_hwasan", "libtest_simple_hwasan_nohwasan"], header_libs: ["bionic_libc_platform_headers"], test_suites: ["device-tests"], } cc_test { name: "bionic-stress-tests", defaults: [ "bionic_tests_defaults", ], // For now, these tests run forever, so do not use the isolation framework. isolated: false, // Running forever, do not consider unit test. test_options: { unit_test: false, }, srcs: [ "malloc_stress_test.cpp", ], shared_libs: [ "libbase", ], target: { android: { static_libs: [ "libmeminfo", "libprocinfo", ], }, }, } // ----------------------------------------------------------------------------- // Tests for the device linked against bionic's static library. Run with: // adb shell /data/nativetest/bionic-unit-tests-static/bionic-unit-tests-static // adb shell /data/nativetest64/bionic-unit-tests-static/bionic-unit-tests-static // ----------------------------------------------------------------------------- cc_test { name: "bionic-unit-tests-static", gtest: false, defaults: ["bionic_tests_defaults"], test_suites: ["device-tests"], host_supported: false, srcs: [ "gtest_preinit_debuggerd.cpp", "gtest_globals.cpp", "gtest_main.cpp", // The Bionic allocator has its own C++ API. It isn't packaged into its // own library, so it can only be tested when it's part of libc.a. "bionic_allocator_test.cpp", ], include_dirs: [ "bionic/libc", ], whole_static_libs: [ "libBionicTests", ], static_libs: [ "libm", "libc", "libdl", "libtinyxml2", "liblog", "libbase", "libdebuggerd_handler", "libgtest_isolated", "libtest_elftls_shared_var", "libtest_elftls_tprel", ], static_executable: true, stl: "libc++_static", // Clang cannot build ifunc with LTO. // http://b/203737712 lto: { never: true, }, data_bins: [ "heap_tagging_async_helper", "heap_tagging_disabled_helper", "heap_tagging_static_async_helper", "heap_tagging_static_disabled_helper", "heap_tagging_static_sync_helper", "heap_tagging_sync_helper", "stack_tagging_helper", "stack_tagging_static_helper", ], } // ----------------------------------------------------------------------------- // Tests to run on the host and linked against glibc. Run with: // cd bionic/tests; mm bionic-unit-tests-glibc-run // ----------------------------------------------------------------------------- cc_test_host { name: "bionic-unit-tests-glibc", gtest: false, defaults: ["bionic_tests_defaults"], srcs: [ "atexit_test.cpp", "dlfcn_symlink_support.cpp", "dlfcn_test.cpp", "dl_test.cpp", "execinfo_test.cpp", "gtest_globals.cpp", "gtest_main.cpp", "pthread_dlfcn_test.cpp", ], shared_libs: [ "libdl_preempt_test_1", "libdl_preempt_test_2", "libdl_test_df_1_global", "libtest_elftls_shared_var", "libtest_elftls_tprel", ], whole_static_libs: [ "libBionicStandardTests", "libBionicElfTlsTests", "libBionicElfTlsLoaderTests", "libfortify1-tests-clang", "libfortify2-tests-clang", ], static_libs: [ "libbase", "liblog", "libcutils", "libgtest_isolated", ], host_ldlibs: [ "-lresolv", "-lutil", ], include_dirs: [ "bionic/libc", ], ldflags: [ "-Wl,--rpath,${ORIGIN}/../bionic-loader-test-libs", "-Wl,--export-dynamic", ], sanitize: { never: false, }, target: { linux_bionic: { enabled: false, }, musl: { exclude_static_libs: [ // Musl doesn't have fortify "libfortify1-tests-clang", "libfortify2-tests-clang", ], }, }, } subdirs = ["*"]