xref: /aosp_15_r20/bionic/tests/Android.bp (revision 8d67ca893c1523eb926b9080dbe4e2ffd2a27ba1)
1//
2// Copyright (C) 2012 The Android Open Source Project
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8//      http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15//
16
17package {
18    default_team: "trendy_team_native_tools_libraries",
19    default_applicable_licenses: ["bionic_tests_license"],
20}
21
22license {
23    name: "bionic_tests_license",
24    visibility: [":__subpackages__"],
25    license_kinds: [
26        "SPDX-license-identifier-Apache-2.0",
27        "SPDX-license-identifier-BSD",
28    ],
29    license_text: [
30        "NOTICE",
31    ],
32}
33
34cc_defaults {
35    name: "bionic_tests_defaults",
36    host_supported: true,
37    target: {
38        darwin: {
39            enabled: false,
40        },
41        android: {
42            header_libs: ["bionic_libc_platform_headers"],
43        },
44        linux_bionic: {
45            header_libs: ["bionic_libc_platform_headers"],
46        },
47    },
48    cflags: [
49        "-fstack-protector-all",
50        "-g",
51        "-Wall",
52        "-Wextra",
53        "-Wunused",
54        "-Werror",
55        "-fno-builtin",
56
57        // We want to test deprecated API too.
58        "-Wno-deprecated-declarations",
59
60        // Needed to test pthread_internal_t layout.
61        "-Wno-invalid-offsetof",
62
63        // This warning does not provide any benefit to the tests.
64        "-Wno-reorder-init-list",
65    ],
66    header_libs: [
67        "libcutils_headers",
68        "gwp_asan_headers",
69    ],
70    stl: "libc++",
71
72    // Ensure that the tests exercise shadow call stack support.
73    // We don't use `scs: true` here because that would give us a second
74    // variant of this library where we actually just want to say "this
75    // library should always be built this way".
76    arch: {
77        arm64: {
78            cflags: ["-fsanitize=shadow-call-stack"],
79        },
80        riscv64: {
81            cflags: ["-fsanitize=shadow-call-stack"],
82        },
83    },
84    sanitize: {
85        address: false,
86    },
87
88    // Use the bootstrap version of bionic because some tests call private APIs
89    // that aren't exposed by the APEX bionic stubs.
90    bootstrap: true,
91}
92
93// -----------------------------------------------------------------------------
94// Prebuilt shared libraries for use in tests.
95// -----------------------------------------------------------------------------
96
97cc_prebuilt_test_library_shared {
98    name: "libtest_invalid-rw_load_segment",
99    strip: {
100        none: true,
101    },
102    check_elf_files: false,
103    relative_install_path: "bionic-loader-test-libs/prebuilt-elf-files",
104    arch: {
105        arm: {
106            srcs: ["prebuilt-elf-files/arm/libtest_invalid-rw_load_segment.so"],
107        },
108        arm64: {
109            srcs: ["prebuilt-elf-files/arm64/libtest_invalid-rw_load_segment.so"],
110        },
111        riscv64: {
112            srcs: ["prebuilt-elf-files/riscv64/libtest_invalid-rw_load_segment.so"],
113        },
114        x86: {
115            srcs: ["prebuilt-elf-files/x86/libtest_invalid-rw_load_segment.so"],
116        },
117        x86_64: {
118            srcs: ["prebuilt-elf-files/x86_64/libtest_invalid-rw_load_segment.so"],
119        },
120    },
121}
122
123cc_prebuilt_test_library_shared {
124    name: "libtest_invalid-unaligned_shdr_offset",
125    strip: {
126        none: true,
127    },
128    check_elf_files: false,
129    relative_install_path: "bionic-loader-test-libs/prebuilt-elf-files",
130    arch: {
131        arm: {
132            srcs: ["prebuilt-elf-files/arm/libtest_invalid-unaligned_shdr_offset.so"],
133        },
134        arm64: {
135            srcs: ["prebuilt-elf-files/arm64/libtest_invalid-unaligned_shdr_offset.so"],
136        },
137        riscv64: {
138            srcs: ["prebuilt-elf-files/riscv64/libtest_invalid-unaligned_shdr_offset.so"],
139        },
140        x86: {
141            srcs: ["prebuilt-elf-files/x86/libtest_invalid-unaligned_shdr_offset.so"],
142        },
143        x86_64: {
144            srcs: ["prebuilt-elf-files/x86_64/libtest_invalid-unaligned_shdr_offset.so"],
145        },
146    },
147}
148
149cc_prebuilt_test_library_shared {
150    name: "libtest_invalid-zero_shentsize",
151    strip: {
152        none: true,
153    },
154    check_elf_files: false,
155    relative_install_path: "bionic-loader-test-libs/prebuilt-elf-files",
156    arch: {
157        arm: {
158            srcs: ["prebuilt-elf-files/arm/libtest_invalid-zero_shentsize.so"],
159        },
160        arm64: {
161            srcs: ["prebuilt-elf-files/arm64/libtest_invalid-zero_shentsize.so"],
162        },
163        riscv64: {
164            srcs: ["prebuilt-elf-files/riscv64/libtest_invalid-zero_shentsize.so"],
165        },
166        x86: {
167            srcs: ["prebuilt-elf-files/x86/libtest_invalid-zero_shentsize.so"],
168        },
169        x86_64: {
170            srcs: ["prebuilt-elf-files/x86_64/libtest_invalid-zero_shentsize.so"],
171        },
172    },
173}
174
175cc_prebuilt_test_library_shared {
176    name: "libtest_invalid-zero_shstrndx",
177    strip: {
178        none: true,
179    },
180    check_elf_files: false,
181    relative_install_path: "bionic-loader-test-libs/prebuilt-elf-files",
182    arch: {
183        arm: {
184            srcs: ["prebuilt-elf-files/arm/libtest_invalid-zero_shstrndx.so"],
185        },
186        arm64: {
187            srcs: ["prebuilt-elf-files/arm64/libtest_invalid-zero_shstrndx.so"],
188        },
189        riscv64: {
190            srcs: ["prebuilt-elf-files/riscv64/libtest_invalid-zero_shstrndx.so"],
191        },
192        x86: {
193            srcs: ["prebuilt-elf-files/x86/libtest_invalid-zero_shstrndx.so"],
194        },
195        x86_64: {
196            srcs: ["prebuilt-elf-files/x86_64/libtest_invalid-zero_shstrndx.so"],
197        },
198    },
199}
200
201cc_prebuilt_test_library_shared {
202    name: "libtest_invalid-empty_shdr_table",
203    strip: {
204        none: true,
205    },
206    check_elf_files: false,
207    relative_install_path: "bionic-loader-test-libs/prebuilt-elf-files",
208    arch: {
209        arm: {
210            srcs: ["prebuilt-elf-files/arm/libtest_invalid-empty_shdr_table.so"],
211        },
212        arm64: {
213            srcs: ["prebuilt-elf-files/arm64/libtest_invalid-empty_shdr_table.so"],
214        },
215        riscv64: {
216            srcs: ["prebuilt-elf-files/riscv64/libtest_invalid-empty_shdr_table.so"],
217        },
218        x86: {
219            srcs: ["prebuilt-elf-files/x86/libtest_invalid-empty_shdr_table.so"],
220        },
221        x86_64: {
222            srcs: ["prebuilt-elf-files/x86_64/libtest_invalid-empty_shdr_table.so"],
223        },
224    },
225}
226
227cc_prebuilt_test_library_shared {
228    name: "libtest_invalid-zero_shdr_table_offset",
229    strip: {
230        none: true,
231    },
232    check_elf_files: false,
233    relative_install_path: "bionic-loader-test-libs/prebuilt-elf-files",
234    arch: {
235        arm: {
236            srcs: ["prebuilt-elf-files/arm/libtest_invalid-zero_shdr_table_offset.so"],
237        },
238        arm64: {
239            srcs: ["prebuilt-elf-files/arm64/libtest_invalid-zero_shdr_table_offset.so"],
240        },
241        riscv64: {
242            srcs: ["prebuilt-elf-files/riscv64/libtest_invalid-zero_shdr_table_offset.so"],
243        },
244        x86: {
245            srcs: ["prebuilt-elf-files/x86/libtest_invalid-zero_shdr_table_offset.so"],
246        },
247        x86_64: {
248            srcs: ["prebuilt-elf-files/x86_64/libtest_invalid-zero_shdr_table_offset.so"],
249        },
250    },
251}
252
253cc_prebuilt_test_library_shared {
254    name: "libtest_invalid-zero_shdr_table_content",
255    strip: {
256        none: true,
257    },
258    check_elf_files: false,
259    relative_install_path: "bionic-loader-test-libs/prebuilt-elf-files",
260    arch: {
261        arm: {
262            srcs: ["prebuilt-elf-files/arm/libtest_invalid-zero_shdr_table_content.so"],
263        },
264        arm64: {
265            srcs: ["prebuilt-elf-files/arm64/libtest_invalid-zero_shdr_table_content.so"],
266        },
267        riscv64: {
268            srcs: ["prebuilt-elf-files/riscv64/libtest_invalid-zero_shdr_table_content.so"],
269        },
270        x86: {
271            srcs: ["prebuilt-elf-files/x86/libtest_invalid-zero_shdr_table_content.so"],
272        },
273        x86_64: {
274            srcs: ["prebuilt-elf-files/x86_64/libtest_invalid-zero_shdr_table_content.so"],
275        },
276    },
277}
278
279cc_prebuilt_test_library_shared {
280    name: "libtest_invalid-textrels",
281    strip: {
282        none: true,
283    },
284    check_elf_files: false,
285    relative_install_path: "bionic-loader-test-libs/prebuilt-elf-files",
286    arch: {
287        arm: {
288            srcs: ["prebuilt-elf-files/arm/libtest_invalid-textrels.so"],
289        },
290        arm64: {
291            srcs: ["prebuilt-elf-files/arm64/libtest_invalid-textrels.so"],
292        },
293        riscv64: {
294            srcs: ["prebuilt-elf-files/riscv64/libtest_invalid-textrels.so"],
295        },
296        x86: {
297            srcs: ["prebuilt-elf-files/x86/libtest_invalid-textrels.so"],
298        },
299        x86_64: {
300            srcs: ["prebuilt-elf-files/x86_64/libtest_invalid-textrels.so"],
301        },
302    },
303}
304
305cc_prebuilt_test_library_shared {
306    name: "libtest_invalid-textrels2",
307    strip: {
308        none: true,
309    },
310    check_elf_files: false,
311    relative_install_path: "bionic-loader-test-libs/prebuilt-elf-files",
312    arch: {
313        arm: {
314            srcs: ["prebuilt-elf-files/arm/libtest_invalid-textrels2.so"],
315        },
316        arm64: {
317            srcs: ["prebuilt-elf-files/arm64/libtest_invalid-textrels2.so"],
318        },
319        riscv64: {
320            srcs: ["prebuilt-elf-files/riscv64/libtest_invalid-textrels2.so"],
321        },
322        x86: {
323            srcs: ["prebuilt-elf-files/x86/libtest_invalid-textrels2.so"],
324        },
325        x86_64: {
326            srcs: ["prebuilt-elf-files/x86_64/libtest_invalid-textrels2.so"],
327        },
328    },
329}
330
331cc_prebuilt_test_library_shared {
332    name: "libtest_invalid-local-tls",
333    strip: {
334        none: true,
335    },
336    check_elf_files: false,
337    relative_install_path: "bionic-loader-test-libs/prebuilt-elf-files",
338    arch: {
339        arm: {
340            srcs: ["prebuilt-elf-files/arm/libtest_invalid-local-tls.so"],
341        },
342        arm64: {
343            srcs: ["prebuilt-elf-files/arm64/libtest_invalid-local-tls.so"],
344        },
345        x86: {
346            srcs: ["prebuilt-elf-files/x86/libtest_invalid-local-tls.so"],
347        },
348        x86_64: {
349            srcs: ["prebuilt-elf-files/x86_64/libtest_invalid-local-tls.so"],
350        },
351    },
352}
353
354// -----------------------------------------------------------------------------
355// All standard tests.
356// -----------------------------------------------------------------------------
357
358// Test diagnostics emitted by clang. The library that results is useless; we
359// just want to run '-Xclang -verify', which will fail if the diagnostics don't
360// match up with what the source file says they should be.
361cc_test_library {
362    name: "clang_diagnostic_tests",
363    cflags: [
364        "-Xclang -verify",
365    ],
366    srcs: ["sys_ioctl_diag_test.cpp"],
367}
368
369cc_test_library {
370    name: "libBionicStandardTests",
371    defaults: [
372        "bionic_tests_defaults",
373        "large_system_property_node_defaults",
374    ],
375    tidy_disabled_srcs: [
376        "malloc_test.cpp", // timed out with clang-tidy, and too many warnings
377    ],
378    srcs: [
379        "__aeabi_read_tp_test.cpp",
380        "__cxa_atexit_test.cpp",
381        "__cxa_demangle_test.cpp",
382        "alloca_test.cpp",
383        "android_get_device_api_level.cpp",
384        "android_set_abort_message_test.cpp",
385        "arpa_inet_test.cpp",
386        "async_safe_test.cpp",
387        "assert_test.cpp",
388        "buffer_tests.cpp",
389        "bug_26110743_test.cpp",
390        "byteswap_test.cpp",
391        "complex_test.cpp",
392        // Disabled while investigating
393        // b/378304366, b/375525252
394        // "cpu_target_features_test.cpp",
395        "ctype_test.cpp",
396        "dirent_test.cpp",
397        "elf_test.cpp",
398        "endian_test.cpp",
399        "errno_test.cpp",
400        "error_test.cpp",
401        "eventfd_test.cpp",
402        "fcntl_test.cpp",
403        "fdsan_test.cpp",
404        "fdtrack_test.cpp",
405        "fenv_test.cpp",
406        "_FILE_OFFSET_BITS_test.cpp",
407        "float_test.cpp",
408        "fnmatch_test.cpp",
409        "fts_test.cpp",
410        "ftw_test.cpp",
411        "getauxval_test.cpp",
412        "getcwd_test.cpp",
413        "glob_test.cpp",
414        "grp_pwd_test.cpp",
415        "grp_pwd_file_test.cpp",
416        "heap_tagging_level_test.cpp",
417        "iconv_test.cpp",
418        "ifaddrs_test.cpp",
419        "ifunc_test.cpp",
420        "inttypes_test.cpp",
421        "iso646_test.c",
422        "langinfo_test.cpp",
423        "leak_test.cpp",
424        "libgen_basename_test.cpp",
425        "libgen_test.cpp",
426        "limits_test.cpp",
427        "linux_swab_test.cpp",
428        "locale_test.cpp",
429        "malloc_iterate_test.cpp",
430        "malloc_test.cpp",
431        "math_test.cpp",
432        "membarrier_test.cpp",
433        "memtag_globals_test.cpp",
434        "memtag_stack_test.cpp",
435        "mntent_test.cpp",
436        "mte_test.cpp",
437        "netdb_test.cpp",
438        "net_if_test.cpp",
439        "netinet_ether_test.cpp",
440        "netinet_igmp_test.cpp",
441        "netinet_in_test.cpp",
442        "netinet_ip_icmp_test.cpp",
443        "netinet_udp_test.cpp",
444        "nl_types_test.cpp",
445        "pidfd_test.cpp",
446        "poll_test.cpp",
447        "prio_ctor_test.cpp",
448        "pthread_test.cpp",
449        "pty_test.cpp",
450        "regex_test.cpp",
451        "resolv_test.cpp",
452        "sched_test.cpp",
453        "scs_test.cpp",
454        "scsi_sg_test.cpp",
455        "search_test.cpp",
456        "semaphore_test.cpp",
457        "setjmp_test.cpp",
458        "signal_test.cpp",
459        "spawn_test.cpp",
460        "stack_protector_test.cpp",
461        "stack_protector_test_helper.cpp",
462        "stack_unwinding_test.cpp",
463        "stdalign_test.cpp",
464        "stdarg_test.cpp",
465        "stdatomic_test.cpp",
466        "stdbool_test.c",
467        "stdint_test.cpp",
468        "stdio_nofortify_test.cpp",
469        "stdio_test.cpp",
470        "stdio_ext_test.cpp",
471        "stdlib_test.cpp",
472        "stdnoreturn_test.cpp",
473        "string_nofortify_test.cpp",
474        "string_test.cpp",
475        "string_posix_strerror_r_test.cpp",
476        "string_posix_strerror_r_wrapper.cpp",
477        "strings_nofortify_test.cpp",
478        "strings_test.cpp",
479        "struct_layout_test.cpp",
480        "sstream_test.cpp",
481        "sys_auxv_test.cpp",
482        "sys_cachectl_test.cpp",
483        "sys_epoll_test.cpp",
484        "sys_hwprobe_test.cpp",
485        "sys_io_test.cpp",
486        "sys_mman_test.cpp",
487        "sys_msg_test.cpp",
488        "sys_param_test.cpp",
489        "sys_personality_test.cpp",
490        "sys_prctl_test.cpp",
491        "sys_procfs_test.cpp",
492        "sys_ptrace_test.cpp",
493        "sys_quota_test.cpp",
494        "sys_random_test.cpp",
495        "sys_resource_test.cpp",
496        "sys_select_test.cpp",
497        "sys_sem_test.cpp",
498        "sys_sendfile_test.cpp",
499        "sys_shm_test.cpp",
500        "sys_signalfd_test.cpp",
501        "sys_socket_test.cpp",
502        "sys_stat_test.cpp",
503        "sys_statvfs_test.cpp",
504        "sys_syscall_test.cpp",
505        "sys_sysinfo_test.cpp",
506        "sys_sysmacros_test.cpp",
507        "sys_time_test.cpp",
508        "sys_timex_test.cpp",
509        "sys_ttydefaults_test.cpp",
510        "sys_types_test.cpp",
511        "sys_uio_test.cpp",
512        "sys_un_test.cpp",
513        "sys_vfs_test.cpp",
514        "sys_wait_test.cpp",
515        "sys_xattr_test.cpp",
516        "syslog_test.cpp",
517        "system_properties_test.cpp",
518        "system_properties_test2.cpp",
519        "termios_test.cpp",
520        "tgmath_test.c",
521        "threads_test.cpp",
522        "time_test.cpp",
523        "uchar_test.cpp",
524        "unistd_nofortify_test.cpp",
525        "unistd_test.cpp",
526        "utils.cpp",
527        "utmp_test.cpp",
528        "utmpx_test.cpp",
529        "wchar_test.cpp",
530        "wctype_test.cpp",
531    ],
532
533    include_dirs: [
534        "bionic/libc",
535    ],
536
537    target: {
538        bionic: {
539            whole_static_libs: [
540                "libasync_safe",
541                "libprocinfo",
542                "libsystemproperties",
543            ],
544        },
545        musl: {
546            exclude_srcs: [
547                // musl doesn't have error.h
548                "error_test.cpp",
549
550                // musl doesn't define noreturn for C++
551                "stdnoreturn_test.cpp",
552
553                // unsupported relocation type 37
554                "ifunc_test.cpp",
555
556                // musl #defines utmp to utmpx, causing a collision with
557                // utmpx_test.cpp
558                "utmp_test.cpp",
559            ],
560        },
561    },
562
563    static_libs: [
564        "libtinyxml2",
565        "liblog",
566        "libbase",
567    ],
568    shared: {
569        enabled: false,
570    },
571
572    generated_headers: ["generated_android_ids"],
573}
574
575cc_test_library {
576    name: "libBionicElfTlsTests",
577    defaults: ["bionic_tests_defaults"],
578    srcs: [
579        "elftls_test.cpp",
580    ],
581    include_dirs: [
582        "bionic/libc",
583    ],
584    static_libs: [
585        "libbase",
586    ],
587    shared: {
588        enabled: false,
589    },
590}
591
592cc_test_library {
593    name: "libBionicElfTlsLoaderTests",
594    defaults: ["bionic_tests_defaults"],
595    srcs: [
596        "elftls_dl_test.cpp",
597    ],
598    include_dirs: [
599        "bionic/libc",
600    ],
601    static_libs: [
602        "liblog",
603        "libbase",
604    ],
605    shared: {
606        enabled: false,
607    },
608}
609
610cc_test_library {
611    name: "libBionicFramePointerTests",
612    defaults: ["bionic_tests_defaults"],
613    srcs: [
614        "android_unsafe_frame_pointer_chase_test.cpp",
615    ],
616    include_dirs: [
617        "bionic/libc",
618    ],
619    cflags: [
620        "-fno-omit-frame-pointer",
621    ],
622}
623
624// -----------------------------------------------------------------------------
625// Fortify tests.
626// -----------------------------------------------------------------------------
627
628cc_defaults {
629    name: "bionic_clang_fortify_tests_w_flags",
630    cflags: [
631        "-Wno-builtin-memcpy-chk-size",
632        "-Wno-format-security",
633        "-Wno-format-zero-length",
634        "-Wno-fortify-source",
635        "-Wno-memset-transposed-args",
636        "-Wno-strlcpy-strlcat-size",
637        "-Wno-strncat-size",
638    ],
639    static_libs: [
640        "libbase",
641    ],
642}
643
644cc_defaults {
645    name: "bionic_fortify_tests_defaults",
646    cflags: [
647        "-U_FORTIFY_SOURCE",
648    ],
649    srcs: ["fortify_test_main.cpp"],
650    static_libs: [
651        "libbase",
652    ],
653    tidy: false,
654    target: {
655        musl: {
656            // Musl doesn't have fortify
657            enabled: false,
658        },
659    },
660}
661
662// Ensure we don't use FORTIFY'ed functions with the static analyzer/clang-tidy:
663// it can confuse these tools pretty easily. If this builds successfully, then
664// __clang_analyzer__ overrode FORTIFY. Otherwise, FORTIFY was incorrectly
665// enabled. The library that results from building this is meant to be unused.
666cc_test_library {
667    name: "fortify_disabled_for_tidy",
668    defaults: [
669        "bionic_clang_fortify_tests_w_flags",
670    ],
671    cflags: [
672        "-Werror",
673        "-D_FORTIFY_SOURCE=2",
674        "-D__clang_analyzer__",
675    ],
676    srcs: ["clang_fortify_tests.cpp"],
677    tidy: false,
678}
679
680cc_test_library {
681    name: "libfortify1-tests-clang",
682    defaults: [
683        "bionic_fortify_tests_defaults",
684        "bionic_tests_defaults",
685    ],
686    cflags: [
687        "-D_FORTIFY_SOURCE=1",
688        "-DTEST_NAME=Fortify1_clang",
689    ],
690    shared: {
691        enabled: false,
692    },
693}
694
695cc_test_library {
696    name: "libfortify2-tests-clang",
697    defaults: [
698        "bionic_fortify_tests_defaults",
699        "bionic_tests_defaults",
700    ],
701    cflags: [
702        "-D_FORTIFY_SOURCE=2",
703        "-DTEST_NAME=Fortify2_clang",
704    ],
705    shared: {
706        enabled: false,
707    },
708}
709
710cc_defaults {
711    name: "bionic_new_fortify_tests_defaults",
712    defaults: [
713        "bionic_clang_fortify_tests_w_flags",
714    ],
715    cflags: [
716        "-U_FORTIFY_SOURCE",
717    ],
718    srcs: ["clang_fortify_tests.cpp"],
719    tidy: false,
720}
721
722cc_test_library {
723    name: "libfortify1-new-tests-clang",
724    defaults: [
725        "bionic_new_fortify_tests_defaults",
726        "bionic_tests_defaults",
727    ],
728    cflags: [
729        "-D_FORTIFY_SOURCE=1",
730        "-DTEST_NAME=Fortify1_clang_new",
731    ],
732    shared: {
733        enabled: false,
734    },
735}
736
737cc_test_library {
738    name: "libfortify2-new-tests-clang",
739    defaults: [
740        "bionic_new_fortify_tests_defaults",
741        "bionic_tests_defaults",
742    ],
743    cflags: [
744        "-D_FORTIFY_SOURCE=2",
745        "-DTEST_NAME=Fortify2_clang_new",
746    ],
747    shared: {
748        enabled: false,
749    },
750}
751
752cc_defaults {
753    name: "bionic_fortify_c_tests_defaults",
754    defaults: [
755        "bionic_clang_fortify_tests_w_flags",
756        "bionic_tests_defaults",
757    ],
758    cflags: [
759        "-U_FORTIFY_SOURCE",
760        // -fbuiltin is required here to counteract -fno-builtin from
761        // `bionic_tests_defaults`. With `-fno-builtin`, Clang won't
762        // const-evaluate calls to `strlen`, which is tested for here.
763        "-fbuiltin",
764    ],
765    srcs: [
766        "clang_fortify_c_only_tests.c",
767    ],
768    tidy: false,
769    shared: {
770        enabled: false,
771    },
772}
773
774cc_test_library {
775    name: "libfortify1-c-tests-clang",
776    defaults: ["bionic_fortify_c_tests_defaults"],
777    cflags: ["-D_FORTIFY_SOURCE=1"],
778}
779
780cc_test_library {
781    name: "libfortify2-c-tests-clang",
782    defaults: ["bionic_fortify_c_tests_defaults"],
783    cflags: ["-D_FORTIFY_SOURCE=2"],
784}
785
786// -----------------------------------------------------------------------------
787// Library of all tests (excluding the dynamic linker tests).
788// -----------------------------------------------------------------------------
789cc_test_library {
790    name: "libBionicTests",
791    defaults: ["bionic_tests_defaults"],
792    host_supported: false,
793    whole_static_libs: [
794        "libBionicStandardTests",
795        "libBionicElfTlsTests",
796        "libBionicFramePointerTests",
797        "libfortify1-c-tests-clang",
798        "libfortify1-tests-clang",
799        "libfortify1-new-tests-clang",
800        "libfortify2-c-tests-clang",
801        "libfortify2-tests-clang",
802        "libfortify2-new-tests-clang",
803    ],
804    shared: {
805        enabled: false,
806    },
807}
808
809cc_test_library {
810    name: "libBionicLoaderTests",
811    defaults: [
812        "bionic_tests_defaults",
813    ],
814    srcs: [
815        "atexit_test.cpp",
816        "dl_test.cpp",
817        "dlfcn_symlink_support.cpp",
818        "dlfcn_test.cpp",
819        "execinfo_test.cpp",
820        "link_test.cpp",
821        "page_size_16kib_compat_test.cpp",
822        "pthread_dlfcn_test.cpp",
823    ],
824    static_libs: [
825        "libbase",
826        "libprocinfo",
827    ],
828    include_dirs: [
829        "bionic/libc",
830        "bionic/tests/libs",
831    ],
832    shared: {
833        enabled: false,
834    },
835    target: {
836        android: {
837            srcs: [
838                "cfi_test.cpp",
839                "dlext_test.cpp",
840                "libdl_test.cpp",
841            ],
842            static_libs: [
843                "libmeminfo",
844                "libprocinfo",
845                "libziparchive",
846            ],
847        },
848    },
849}
850
851// -----------------------------------------------------------------------------
852// Library of bionic customized gtest main function, with normal gtest output format,
853// which is needed by bionic cts test.
854// -----------------------------------------------------------------------------
855cc_test_library {
856    name: "libBionicCtsGtestMain",
857    defaults: ["bionic_tests_defaults"],
858    srcs: [
859        "gtest_globals.cpp",
860        "gtest_main.cpp",
861    ],
862    shared: {
863        enabled: false,
864    },
865    whole_static_libs: [
866        "libbase",
867        "libgtest_isolated",
868    ],
869}
870
871cc_defaults {
872    name: "bionic_unit_tests_data",
873    data_bins: [
874        "cfi_test_helper",
875        "cfi_test_helper2",
876        "elftls_align_test_helper",
877        "elftls_dlopen_ie_error_helper",
878        "elftls_dtv_resize_helper",
879        "elftls_skew_align_test_helper",
880        "exec_linker_helper",
881        "exec_linker_helper_lib",
882        "heap_tagging_async_helper",
883        "heap_tagging_disabled_helper",
884        "heap_tagging_static_async_helper",
885        "heap_tagging_static_disabled_helper",
886        "heap_tagging_static_sync_helper",
887        "heap_tagging_sync_helper",
888        "stack_tagging_helper",
889        "stack_tagging_static_helper",
890        "ld_config_test_helper",
891        "ld_config_test_helper_lib1",
892        "ld_config_test_helper_lib2",
893        "ld_config_test_helper_lib3",
894        "ld_preload_test_helper",
895        "ld_preload_test_helper_lib1",
896        "ld_preload_test_helper_lib2",
897        "memtag_globals_binary",
898        "memtag_globals_binary_static",
899        "memtag_globals_dso",
900        "mte_globals_relr_regression_test_b_314038442",
901        "mte_globals_relr_regression_test_b_314038442_mte",
902        "ns_hidden_child_helper",
903        "preinit_getauxval_test_helper",
904        "preinit_syscall_test_helper",
905        "thread_exit_cb_helper",
906        "tls_properties_helper",
907    ],
908    data_libs: [
909        "libatest_simple_zip",
910        "libcfi-test",
911        "libcfi-test-bad",
912        "libdl_preempt_test_1",
913        "libdl_preempt_test_2",
914        "libdl_test_df_1_global",
915        "libdlext_test",
916        "libdlext_test_different_soname",
917        "libdlext_test_fd",
918        "libdlext_test_norelro",
919        "libdlext_test_recursive",
920        "libdlext_test_zip",
921        "libgnu-hash-table-library",
922        "libns_hidden_child_app",
923        "libns_hidden_child_global",
924        "libns_hidden_child_internal",
925        "libns_hidden_child_public",
926        "libnstest_dlopened",
927        "libnstest_ns_a_public1",
928        "libnstest_ns_a_public1_internal",
929        "libnstest_ns_b_public2",
930        "libnstest_ns_b_public3",
931        "libnstest_private",
932        "libnstest_private_external",
933        "libnstest_public",
934        "libnstest_public_internal",
935        "libnstest_root",
936        "libnstest_root_not_isolated",
937        "librelocations-ANDROID_REL",
938        "librelocations-ANDROID_RELR",
939        "librelocations-RELR",
940        "librelocations-fat",
941        "libsegment_gap_inner",
942        "libsegment_gap_outer",
943        "libsysv-hash-table-library",
944        "libtest_atexit",
945        "libtest_check_order_dlsym",
946        "libtest_check_order_dlsym_1_left",
947        "libtest_check_order_dlsym_2_right",
948        "libtest_check_order_dlsym_3_c",
949        "libtest_check_order_dlsym_a",
950        "libtest_check_order_dlsym_b",
951        "libtest_check_order_dlsym_d",
952        "libtest_check_order_reloc_root",
953        "libtest_check_order_reloc_root_1",
954        "libtest_check_order_reloc_root_2",
955        "libtest_check_order_reloc_siblings",
956        "libtest_check_order_reloc_siblings_1",
957        "libtest_check_order_reloc_siblings_2",
958        "libtest_check_order_reloc_siblings_3",
959        "libtest_check_order_reloc_siblings_a",
960        "libtest_check_order_reloc_siblings_b",
961        "libtest_check_order_reloc_siblings_c",
962        "libtest_check_order_reloc_siblings_c_1",
963        "libtest_check_order_reloc_siblings_c_2",
964        "libtest_check_order_reloc_siblings_d",
965        "libtest_check_order_reloc_siblings_e",
966        "libtest_check_order_reloc_siblings_f",
967        "libtest_check_rtld_next_from_library",
968        "libtest_dlopen_df_1_global",
969        "libtest_dlopen_from_ctor",
970        "libtest_dlopen_from_ctor_main",
971        "libtest_dlopen_weak_undefined_func",
972        "libtest_dlsym_df_1_global",
973        "libtest_dlsym_from_this",
974        "libtest_dlsym_from_this_child",
975        "libtest_dlsym_from_this_grandchild",
976        "libtest_dlsym_weak_func",
977        "libtest_dt_runpath_a",
978        "libtest_dt_runpath_b",
979        "libtest_dt_runpath_c",
980        "libtest_dt_runpath_d",
981        "libtest_dt_runpath_x",
982        "libtest_dt_runpath_y",
983        "libtest_elf_max_page_size_4kib",
984        "libtest_elftls_dynamic",
985        "libtest_elftls_dynamic_filler_1",
986        "libtest_elftls_dynamic_filler_2",
987        "libtest_elftls_dynamic_filler_3",
988        "libtest_elftls_dynamic_filler_4",
989        "libtest_elftls_dynamic_filler_5",
990        "libtest_elftls_shared_var",
991        "libtest_elftls_shared_var_ie",
992        "libtest_elftls_tprel",
993        "libtest_empty",
994        "libtest_ifunc",
995        "libtest_ifunc_variable",
996        "libtest_ifunc_variable_impl",
997        "libtest_indirect_thread_local_dtor",
998        "libtest_init_fini_order_child",
999        "libtest_init_fini_order_grand_child",
1000        "libtest_init_fini_order_root",
1001        "libtest_init_fini_order_root2",
1002        "libtest_invalid-empty_shdr_table",
1003        "libtest_invalid-local-tls",
1004        "libtest_invalid-rw_load_segment",
1005        "libtest_invalid-textrels",
1006        "libtest_invalid-textrels2",
1007        "libtest_invalid-unaligned_shdr_offset",
1008        "libtest_invalid-zero_shdr_table_content",
1009        "libtest_invalid-zero_shdr_table_offset",
1010        "libtest_invalid-zero_shentsize",
1011        "libtest_invalid-zero_shstrndx",
1012        "libtest_missing_symbol",
1013        "libtest_missing_symbol_child_private",
1014        "libtest_missing_symbol_child_public",
1015        "libtest_missing_symbol_root",
1016        "libtest_nodelete_1",
1017        "libtest_nodelete_2",
1018        "libtest_nodelete_dt_flags_1",
1019        "libtest_pthread_atfork",
1020        "libtest_relo_check_dt_needed_order",
1021        "libtest_relo_check_dt_needed_order_1",
1022        "libtest_relo_check_dt_needed_order_2",
1023        "libtest_simple",
1024        "libtest_thread_local_dtor",
1025        "libtest_thread_local_dtor2",
1026        "libtest_two_parents_child",
1027        "libtest_two_parents_parent1",
1028        "libtest_two_parents_parent2",
1029        "libtest_versioned_lib",
1030        "libtest_versioned_libv1",
1031        "libtest_versioned_libv2",
1032        "libtest_versioned_otherlib",
1033        "libtest_versioned_otherlib_empty",
1034        "libtest_versioned_uselibv1",
1035        "libtest_versioned_uselibv2",
1036        "libtest_versioned_uselibv2_other",
1037        "libtest_versioned_uselibv3_other",
1038        "libtest_with_dependency",
1039        "libtest_with_dependency_loop",
1040        "libtest_with_dependency_loop_a",
1041        "libtest_with_dependency_loop_b",
1042        "libtest_with_dependency_loop_c",
1043        "libtestshared",
1044    ],
1045}
1046
1047// -----------------------------------------------------------------------------
1048// Tests for the device using bionic's .so. Run with:
1049//   adb shell /data/nativetest/bionic-unit-tests/bionic-unit-tests
1050//   adb shell /data/nativetest64/bionic-unit-tests/bionic-unit-tests
1051// -----------------------------------------------------------------------------
1052cc_defaults {
1053    name: "bionic_unit_tests_defaults",
1054    host_supported: false,
1055    gtest: false,
1056
1057    defaults: [
1058        "bionic_tests_defaults",
1059        "bionic_unit_tests_data",
1060    ],
1061
1062    whole_static_libs: [
1063        "libBionicTests",
1064        "libBionicLoaderTests",
1065        "libBionicElfTlsLoaderTests",
1066    ],
1067
1068    static_libs: [
1069        "libtinyxml2",
1070        "liblog",
1071        "libbase",
1072        "libgtest_isolated",
1073    ],
1074
1075    srcs: [
1076        // TODO: Include __cxa_thread_atexit_test.cpp to glibc tests once it is upgraded (glibc 2.18+)
1077        "__cxa_thread_atexit_test.cpp",
1078        "gtest_globals.cpp",
1079        "gtest_main.cpp",
1080        "gwp_asan_test.cpp",
1081        "thread_local_test.cpp",
1082    ],
1083
1084    conlyflags: [
1085        "-fexceptions",
1086        "-fnon-call-exceptions",
1087    ],
1088
1089    ldflags: ["-Wl,--export-dynamic"],
1090
1091    include_dirs: ["bionic/libc"],
1092
1093    stl: "libc++_static",
1094
1095    target: {
1096        android: {
1097            shared_libs: [
1098                "ld-android",
1099                "libdl",
1100                "libdl_android",
1101                "libdl_preempt_test_1",
1102                "libdl_preempt_test_2",
1103                "libdl_test_df_1_global",
1104                "libtest_elftls_shared_var",
1105                "libtest_elftls_tprel",
1106            ],
1107            static_libs: [
1108                // The order of these libraries matters, do not shuffle them.
1109                "libmeminfo",
1110                "libziparchive",
1111                "libz",
1112                "libutils",
1113            ],
1114            ldflags: [
1115                "-Wl,--rpath,${ORIGIN}/bionic-loader-test-libs",
1116                "-Wl,--enable-new-dtags",
1117            ],
1118        },
1119    },
1120}
1121
1122cc_test {
1123    name: "bionic-unit-tests",
1124    defaults: [
1125        "bionic_unit_tests_defaults",
1126    ],
1127    test_suites: ["device-tests"],
1128    data: [
1129        ":libdlext_test_runpath_zip_zipaligned",
1130        ":libdlext_test_zip_zipaligned",
1131    ],
1132}
1133
1134cc_defaults {
1135    name: "hwasan_test_defaults",
1136    enabled: false,
1137    // This does not use bionic_tests_defaults because it is not supported on
1138    // host.
1139    arch: {
1140        arm64: {
1141            enabled: true,
1142        },
1143    },
1144    sanitize: {
1145        hwaddress: true,
1146    },
1147    srcs: [
1148        "hwasan_test.cpp",
1149    ],
1150    data_libs: [
1151        "libtest_simple_hwasan",
1152        "libtest_simple_hwasan_nohwasan",
1153    ],
1154    header_libs: ["bionic_libc_platform_headers"],
1155    test_suites: ["device-tests"],
1156}
1157
1158cc_test {
1159    name: "hwasan_test",
1160    defaults: ["hwasan_test_defaults"],
1161    shared_libs: [
1162        "libbase",
1163    ],
1164}
1165
1166cc_test {
1167    name: "hwasan_test_static",
1168    defaults: ["hwasan_test_defaults"],
1169    static_libs: [
1170        "libbase",
1171    ],
1172    static_executable: true,
1173    cflags: ["-DHWASAN_TEST_STATIC"],
1174}
1175
1176cc_test {
1177    name: "memtag_stack_dlopen_test",
1178    enabled: false,
1179    // This does not use bionic_tests_defaults because it is not supported on
1180    // host.
1181    arch: {
1182        arm64: {
1183            enabled: true,
1184        },
1185    },
1186    sanitize: {
1187        memtag_heap: true,
1188        memtag_stack: false,
1189    },
1190    srcs: [
1191        "memtag_stack_dlopen_test.cpp",
1192    ],
1193    shared_libs: [
1194        "libbase",
1195    ],
1196    data_libs: [
1197        "libtest_simple_memtag_stack",
1198        "libtest_depends_on_simple_memtag_stack",
1199    ],
1200    data_bins: [
1201        "testbinary_depends_on_simple_memtag_stack",
1202        "testbinary_depends_on_depends_on_simple_memtag_stack",
1203        "testbinary_is_stack_mte_after_dlopen",
1204    ],
1205    header_libs: ["bionic_libc_platform_headers"],
1206    test_suites: ["device-tests"],
1207}
1208
1209cc_test {
1210    name: "memtag_stack_abi_test",
1211    enabled: false,
1212    // This does not use bionic_tests_defaults because it is not supported on
1213    // host.
1214    arch: {
1215        arm64: {
1216            enabled: true,
1217        },
1218    },
1219    // We don't use `sanitize:` so we generate the appropriate ELF note, but
1220    // still support non-MTE devices.
1221    // TODO(fmayer): also add a test that enables stack MTE for MTE devices,
1222    // which would test for more bugs.
1223    ldflags: ["-fsanitize=memtag-stack"],
1224    // Turn off all other sanitizers from SANITIZE_TARGET.
1225    sanitize: {
1226        never: true,
1227    },
1228    shared_libs: [
1229        "libbase",
1230    ],
1231    srcs: [
1232        "memtag_stack_abi_test.cpp",
1233    ],
1234    header_libs: ["bionic_libc_platform_headers"],
1235    test_suites: ["device-tests"],
1236}
1237
1238cc_test {
1239    name: "bionic-stress-tests",
1240    defaults: [
1241        "bionic_tests_defaults",
1242    ],
1243
1244    // For now, these tests run forever, so do not use the isolation framework.
1245    isolated: false,
1246    // Running forever, do not consider unit test.
1247    test_options: {
1248        unit_test: false,
1249    },
1250
1251    srcs: [
1252        "malloc_stress_test.cpp",
1253    ],
1254
1255    shared_libs: [
1256        "libbase",
1257        "liblog",
1258    ],
1259
1260    target: {
1261        android: {
1262            static_libs: [
1263                "libmeminfo",
1264                "libprocinfo",
1265            ],
1266        },
1267    },
1268}
1269
1270// -----------------------------------------------------------------------------
1271// Tests for the device linked against bionic's static library. Run with:
1272//   adb shell /data/nativetest/bionic-unit-tests-static/bionic-unit-tests-static
1273//   adb shell /data/nativetest64/bionic-unit-tests-static/bionic-unit-tests-static
1274// -----------------------------------------------------------------------------
1275cc_test {
1276    name: "bionic-unit-tests-static",
1277    gtest: false,
1278    defaults: ["bionic_tests_defaults"],
1279    test_suites: ["device-tests"],
1280    host_supported: false,
1281
1282    srcs: [
1283        "gtest_preinit_debuggerd.cpp",
1284        "gtest_globals.cpp",
1285        "gtest_main.cpp",
1286
1287        // Test internal parts of Bionic that aren't exposed via libc.so.
1288        "bionic_allocator_test.cpp",
1289        "static_tls_layout_test.cpp",
1290    ],
1291    include_dirs: [
1292        "bionic/libc",
1293    ],
1294    whole_static_libs: [
1295        "libBionicTests",
1296    ],
1297
1298    static_libs: [
1299        "libm",
1300        "libc",
1301        "libdl",
1302        "libtinyxml2",
1303        "liblog",
1304        "libbase",
1305        "libdebuggerd_handler",
1306        "libgtest_isolated",
1307        "libtest_elftls_shared_var",
1308        "libtest_elftls_tprel",
1309    ],
1310
1311    static_executable: true,
1312    stl: "libc++_static",
1313    // Clang cannot build ifunc with LTO.
1314    // http://b/203737712
1315    lto: {
1316        never: true,
1317    },
1318    data_bins: [
1319        "elftls_align_test_helper",
1320        "elftls_skew_align_test_helper",
1321        "heap_tagging_async_helper",
1322        "heap_tagging_disabled_helper",
1323        "heap_tagging_static_async_helper",
1324        "heap_tagging_static_disabled_helper",
1325        "heap_tagging_static_sync_helper",
1326        "heap_tagging_sync_helper",
1327        "memtag_globals_binary",
1328        "memtag_globals_binary_static",
1329        "memtag_globals_dso",
1330        "mte_globals_relr_regression_test_b_314038442",
1331        "mte_globals_relr_regression_test_b_314038442_mte",
1332        "stack_tagging_helper",
1333        "stack_tagging_static_helper",
1334    ],
1335}
1336
1337// -----------------------------------------------------------------------------
1338// Tests to run on the host and linked against glibc. Run with:
1339//   cd bionic/tests; mm bionic-unit-tests-glibc-run
1340// -----------------------------------------------------------------------------
1341
1342cc_test_host {
1343    name: "bionic-unit-tests-glibc",
1344    gtest: false,
1345    defaults: ["bionic_tests_defaults"],
1346
1347    srcs: [
1348        "atexit_test.cpp",
1349        "dlfcn_symlink_support.cpp",
1350        "dlfcn_test.cpp",
1351        "dl_test.cpp",
1352        "execinfo_test.cpp",
1353        "gtest_globals.cpp",
1354        "gtest_main.cpp",
1355        "pthread_dlfcn_test.cpp",
1356    ],
1357
1358    shared_libs: [
1359        "libdl_preempt_test_1",
1360        "libdl_preempt_test_2",
1361        "libdl_test_df_1_global",
1362        "libtest_elftls_shared_var",
1363        "libtest_elftls_tprel",
1364    ],
1365
1366    whole_static_libs: [
1367        "libBionicStandardTests",
1368        "libBionicElfTlsTests",
1369        "libBionicElfTlsLoaderTests",
1370        "libfortify1-tests-clang",
1371        "libfortify2-tests-clang",
1372    ],
1373
1374    static_libs: [
1375        "libbase",
1376        "liblog",
1377        "libcutils",
1378        "libgtest_isolated",
1379    ],
1380
1381    host_ldlibs: [
1382        "-lresolv",
1383        "-lutil",
1384    ],
1385
1386    include_dirs: [
1387        "bionic/libc",
1388    ],
1389
1390    ldflags: [
1391        "-Wl,--rpath,${ORIGIN}/../bionic-loader-test-libs",
1392        "-Wl,--export-dynamic",
1393    ],
1394
1395    sanitize: {
1396        never: false,
1397    },
1398
1399    target: {
1400        linux_bionic: {
1401            enabled: false,
1402        },
1403        musl: {
1404            exclude_static_libs: [
1405                // Musl doesn't have fortify
1406                "libfortify1-tests-clang",
1407                "libfortify2-tests-clang",
1408            ],
1409        },
1410    },
1411}
1412
1413cc_defaults {
1414    name: "bionic_compile_time_tests_defaults",
1415    enabled: false,
1416    target: {
1417        linux_x86: {
1418            enabled: true,
1419        },
1420        linux_x86_64: {
1421            enabled: true,
1422        },
1423    },
1424    tidy: false,
1425    clang_verify: true,
1426    cflags: [
1427        "-Wall",
1428        "-Wno-error",
1429        "-fno-color-diagnostics",
1430        "-ferror-limit=10000",
1431        "-DCOMPILATION_TESTS=1",
1432        "-Wformat-nonliteral",
1433        "-U_FORTIFY_SOURCE",
1434    ],
1435    srcs: ["clang_fortify_tests.cpp"],
1436}
1437
1438cc_library_static {
1439    name: "bionic-compile-time-tests1-clang++",
1440    defaults: [
1441        "bionic_compile_time_tests_defaults",
1442    ],
1443    cppflags: [
1444        "-D_FORTIFY_SOURCE=1",
1445    ],
1446}
1447
1448cc_library_static {
1449    name: "bionic-compile-time-tests2-clang++",
1450    defaults: [
1451        "bionic_compile_time_tests_defaults",
1452    ],
1453    cppflags: [
1454        "-D_FORTIFY_SOURCE=2",
1455    ],
1456}
1457