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 17 cc_defaults { 18 name: "bionic_testlib_defaults", 19 host_supported: true, 20 ldflags: [ 21 "-Wl,--rpath,${ORIGIN}", 22 "-Wl,--enable-new-dtags", 23 ], 24 relative_install_path: "bionic-loader-test-libs", 25 gtest: false, 26 sanitize: { 27 address: false, 28 coverage: false, 29 }, 30 stl: "libc++_static", 31 target: { 32 darwin: { 33 enabled: false, 34 }, 35 }, 36 } 37 38 // ----------------------------------------------------------------------------- 39 // Library to test gnu-styled hash 40 // ----------------------------------------------------------------------------- 41 cc_test_library { 42 name: "libgnu-hash-table-library", 43 defaults: ["bionic_testlib_defaults"], 44 srcs: ["dlext_test_library.cpp"], 45 ldflags: ["-Wl,--hash-style=gnu"], 46 arch: { 47 mips: { 48 enabled: false, 49 }, 50 mips64: { 51 enabled: false, 52 }, 53 }, 54 } 55 56 // ----------------------------------------------------------------------------- 57 // Library to test sysv-styled hash 58 // ----------------------------------------------------------------------------- 59 cc_test_library { 60 name: "libsysv-hash-table-library", 61 defaults: ["bionic_testlib_defaults"], 62 srcs: ["dlext_test_library.cpp"], 63 ldflags: ["-Wl,--hash-style=sysv"], 64 } 65 66 // ----------------------------------------------------------------------------- 67 // Library used by dlext tests - with GNU RELRO program header 68 // ----------------------------------------------------------------------------- 69 // In Android.mk to support creating symlinks 70 71 // ----------------------------------------------------------------------------- 72 // Library used by dlext tests - without GNU RELRO program header 73 // ----------------------------------------------------------------------------- 74 cc_test_library { 75 name: "libdlext_test_norelro", 76 defaults: ["bionic_testlib_defaults"], 77 srcs: ["dlext_test_library.cpp"], 78 ldflags: ["-Wl,-z,norelro"], 79 shared_libs = ["libtest_simple"], 80 } 81 82 // ----------------------------------------------------------------------------- 83 // Library used by dlext tests - different name non-default location 84 // ----------------------------------------------------------------------------- 85 // In Android.mk to support installing to /data 86 87 // ----------------------------------------------------------------------------- 88 // Libraries used by dlext tests for open from a zip-file 89 // ----------------------------------------------------------------------------- 90 // In Android.mk to support installing to /data 91 92 // ---------------------------------------------------------------------------- 93 // Library with soname which does not match filename 94 // ---------------------------------------------------------------------------- 95 // In Android.mk to support zipped and aligned tests 96 97 // ----------------------------------------------------------------------------- 98 // Library used by dlext tests - zipped and aligned 99 // ----------------------------------------------------------------------------- 100 // In Android.mk to support zipped and aligned tests 101 102 // ----------------------------------------------------------------------------- 103 // Library used by dlfcn tests 104 // ----------------------------------------------------------------------------- 105 cc_test_library { 106 name: "libtest_simple", 107 defaults: ["bionic_testlib_defaults"], 108 srcs: ["dlopen_testlib_simple.cpp"], 109 } 110 111 // ----------------------------------------------------------------------------- 112 // Library used by dlfcn nodelete tests 113 // ----------------------------------------------------------------------------- 114 cc_test_library { 115 name: "libtest_nodelete_1", 116 defaults: ["bionic_testlib_defaults"], 117 srcs: ["dlopen_nodelete_1.cpp"], 118 } 119 120 // ----------------------------------------------------------------------------- 121 // Library used by dlfcn nodelete tests 122 // ----------------------------------------------------------------------------- 123 cc_test_library { 124 name: "libtest_nodelete_2", 125 defaults: ["bionic_testlib_defaults"], 126 srcs: ["dlopen_nodelete_2.cpp"], 127 } 128 129 // ----------------------------------------------------------------------------- 130 // Library used by dlfcn nodelete tests 131 // ----------------------------------------------------------------------------- 132 cc_test_library { 133 name: "libtest_nodelete_dt_flags_1", 134 defaults: ["bionic_testlib_defaults"], 135 srcs: ["dlopen_nodelete_dt_flags_1.cpp"], 136 ldflags: ["-Wl,-z,nodelete"], 137 } 138 139 // ----------------------------------------------------------------------------- 140 // Build test helper libraries for linker namespaces 141 // ----------------------------------------------------------------------------- 142 // include $(LOCAL_PATH)/Android.build.linker_namespaces.mk 143 144 // ----------------------------------------------------------------------------- 145 // Build DT_RUNPATH test helper libraries 146 // ----------------------------------------------------------------------------- 147 // include $(LOCAL_PATH)/Android.build.dt_runpath.mk 148 149 // ----------------------------------------------------------------------------- 150 // Build library with two parents 151 // ----------------------------------------------------------------------------- 152 // include $(LOCAL_PATH)/Android.build.dlopen_2_parents_reloc.mk 153 154 // ----------------------------------------------------------------------------- 155 // Build libtest_check_order_dlsym.so with its dependencies. 156 // ----------------------------------------------------------------------------- 157 // include $(LOCAL_PATH)/Android.build.dlopen_check_order_dlsym.mk 158 159 // ----------------------------------------------------------------------------- 160 // Build libtest_check_order_siblings.so with its dependencies. 161 // ----------------------------------------------------------------------------- 162 // include $(LOCAL_PATH)/Android.build.dlopen_check_order_reloc_siblings.mk 163 164 // ----------------------------------------------------------------------------- 165 // Build libtest_check_order_root.so with its dependencies. 166 // ----------------------------------------------------------------------------- 167 // include $(LOCAL_PATH)/Android.build.dlopen_check_order_reloc_main_executable.mk 168 169 // ----------------------------------------------------------------------------- 170 // Build libtest_versioned_lib.so with its dependencies. 171 // ----------------------------------------------------------------------------- 172 // include $(LOCAL_PATH)/Android.build.versioned_lib.mk 173 174 // ----------------------------------------------------------------------------- 175 // Build libraries needed by pthread_atfork tests 176 // ----------------------------------------------------------------------------- 177 // include $(LOCAL_PATH)/Android.build.pthread_atfork.mk 178 179 // ----------------------------------------------------------------------------- 180 // Library with dependency loop used by dlfcn tests 181 // 182 // libtest_with_dependency_loop -> a -> b -> c -> a 183 // ----------------------------------------------------------------------------- 184 cc_test_library { 185 name: "libtest_with_dependency_loop", 186 defaults: ["bionic_testlib_defaults"], 187 srcs: ["dlopen_testlib_loopy_root.cpp"], 188 shared_libs: ["libtest_with_dependency_loop_a"], 189 } 190 191 // ----------------------------------------------------------------------------- 192 // libtest_with_dependency_loop_a.so 193 // ----------------------------------------------------------------------------- 194 cc_test_library { 195 name: "libtest_with_dependency_loop_a", 196 defaults: ["bionic_testlib_defaults"], 197 srcs: ["dlopen_testlib_loopy_a.cpp"], 198 shared_libs: ["libtest_with_dependency_loop_b_tmp"], 199 } 200 201 // ----------------------------------------------------------------------------- 202 // libtest_with_dependency_loop_b.so 203 // 204 // this is temporary placeholder - will be removed 205 // ----------------------------------------------------------------------------- 206 cc_test_library { 207 name: "libtest_with_dependency_loop_b_tmp", 208 defaults: ["bionic_testlib_defaults"], 209 srcs: ["dlopen_testlib_loopy_invalid.cpp"], 210 ldflags: ["-Wl,-soname=libtest_with_dependency_loop_b.so"], 211 } 212 213 // ----------------------------------------------------------------------------- 214 // libtest_with_dependency_loop_b.so 215 // ----------------------------------------------------------------------------- 216 cc_test_library { 217 name: "libtest_with_dependency_loop_b", 218 defaults: ["bionic_testlib_defaults"], 219 srcs: ["dlopen_testlib_loopy_b.cpp"], 220 shared_libs: ["libtest_with_dependency_loop_c"], 221 } 222 223 // ----------------------------------------------------------------------------- 224 // libtest_with_dependency_loop_c.so 225 // ----------------------------------------------------------------------------- 226 cc_test_library { 227 name: "libtest_with_dependency_loop_c", 228 defaults: ["bionic_testlib_defaults"], 229 srcs: ["dlopen_testlib_loopy_c.cpp"], 230 shared_libs: ["libtest_with_dependency_loop_a"], 231 } 232 233 // ----------------------------------------------------------------------------- 234 // libtest_relo_check_dt_needed_order.so 235 // | 236 // +-> libtest_relo_check_dt_needed_order_1.so 237 // | 238 // +-> libtest_relo_check_dt_needed_order_2.so 239 // ----------------------------------------------------------------------------- 240 241 242 cc_test_library { 243 name: "libtest_relo_check_dt_needed_order", 244 defaults: ["bionic_testlib_defaults"], 245 srcs: ["dlopen_testlib_relo_check_dt_needed_order.cpp"], 246 shared_libs: [ 247 "libtest_relo_check_dt_needed_order_1", 248 "libtest_relo_check_dt_needed_order_2", 249 ], 250 } 251 252 cc_test_library { 253 name: "libtest_relo_check_dt_needed_order_1", 254 defaults: ["bionic_testlib_defaults"], 255 srcs: ["dlopen_testlib_relo_check_dt_needed_order_1.cpp"], 256 } 257 258 cc_test_library { 259 name: "libtest_relo_check_dt_needed_order_2", 260 defaults: ["bionic_testlib_defaults"], 261 srcs: ["dlopen_testlib_relo_check_dt_needed_order_2.cpp"], 262 } 263 264 // ----------------------------------------------------------------------------- 265 // Library with dependency used by dlfcn tests 266 // ----------------------------------------------------------------------------- 267 // In Android.mk to support dependency on libdlext_test 268 269 // ----------------------------------------------------------------------------- 270 // Library used by ifunc tests 271 // ----------------------------------------------------------------------------- 272 cc_test_library { 273 name: "libtest_ifunc", 274 defaults: ["bionic_testlib_defaults"], 275 srcs: ["dlopen_testlib_ifunc.cpp"], 276 277 arch: { 278 mips: { 279 enabled: false, 280 }, 281 mips64: { 282 enabled: false, 283 }, 284 }, 285 286 target: { 287 android: { 288 shared_libs: ["libdl"], 289 }, 290 host: { 291 host_ldlibs: ["-ldl"], 292 }, 293 }, 294 } 295 296 cc_test_library { 297 name: "libtest_ifunc_variable", 298 defaults: ["bionic_testlib_defaults"], 299 srcs: ["dlopen_testlib_ifunc_variable.cpp"], 300 shared_libs: [ "libtest_ifunc_variable_impl" ], 301 302 arch: { 303 mips: { 304 enabled: false, 305 }, 306 mips64: { 307 enabled: false, 308 }, 309 }, 310 311 target: { 312 android: { 313 shared_libs: ["libdl"], 314 }, 315 host: { 316 host_ldlibs: ["-ldl"], 317 }, 318 }, 319 } 320 321 cc_test_library { 322 name: "libtest_ifunc_variable_impl", 323 defaults: ["bionic_testlib_defaults"], 324 srcs: ["dlopen_testlib_ifunc_variable_impl.cpp"], 325 326 arch: { 327 mips: { 328 enabled: false, 329 }, 330 mips64: { 331 enabled: false, 332 }, 333 }, 334 335 target: { 336 android: { 337 shared_libs: ["libdl"], 338 }, 339 host: { 340 host_ldlibs: ["-ldl"], 341 }, 342 }, 343 } 344 345 // ----------------------------------------------------------------------------- 346 // Library used by atexit tests 347 // ----------------------------------------------------------------------------- 348 349 cc_test_library { 350 name: "libtest_atexit", 351 defaults: ["bionic_testlib_defaults"], 352 srcs: ["atexit_testlib.cpp"], 353 } 354 355 // ----------------------------------------------------------------------------- 356 // This library is used by dl_load test to check symbol preempting 357 // by main executable 358 // ----------------------------------------------------------------------------- 359 cc_test_library { 360 name: "libdl_preempt_test_1", 361 defaults: ["bionic_testlib_defaults"], 362 srcs: ["dl_preempt_library_1.cpp"], 363 } 364 365 // ----------------------------------------------------------------------------- 366 // This library is used by dl_load test to check symbol preempting 367 // by libdl_preempt_test_1.so 368 // ----------------------------------------------------------------------------- 369 cc_test_library { 370 name: "libdl_preempt_test_2", 371 defaults: ["bionic_testlib_defaults"], 372 srcs: ["dl_preempt_library_2.cpp"], 373 } 374 375 // ----------------------------------------------------------------------------- 376 // Library with DF_1_GLOBAL 377 // ----------------------------------------------------------------------------- 378 cc_test_library { 379 name: "libdl_test_df_1_global", 380 defaults: ["bionic_testlib_defaults"], 381 srcs: ["dl_df_1_global.cpp"], 382 ldflags: ["-Wl,-z,global"], 383 384 target: { 385 host: { 386 // TODO (dimitry): host ld.gold does not yet support -z global 387 // remove this line once it is updated. 388 ldflags: ["-fuse-ld=bfd"], 389 }, 390 }, 391 } 392 393 // ----------------------------------------------------------------------------- 394 // Library using symbol from libdl_test_df_1_global 395 // ----------------------------------------------------------------------------- 396 cc_test_library { 397 name: "libtest_dlsym_df_1_global", 398 defaults: ["bionic_testlib_defaults"], 399 srcs: ["dl_df_1_use_global.cpp"], 400 } 401 402 // ----------------------------------------------------------------------------- 403 // Library with weak function 404 // ----------------------------------------------------------------------------- 405 cc_test_library { 406 name: "libtest_dlsym_weak_func", 407 defaults: ["bionic_testlib_defaults"], 408 srcs: ["dlsym_weak_function.cpp"], 409 } 410 411 // ----------------------------------------------------------------------------- 412 // Library to check RTLD_LOCAL with dlsym in 'this' 413 // ----------------------------------------------------------------------------- 414 cc_test_library { 415 name: "libtest_dlsym_from_this", 416 defaults: ["bionic_testlib_defaults"], 417 srcs: ["dlsym_from_this_symbol.cpp"], 418 shared_libs: ["libtest_dlsym_from_this_child"], 419 420 target: { 421 android: { 422 shared_libs: ["libdl"], 423 }, 424 host: { 425 host_ldlibs: ["-ldl"], 426 }, 427 }, 428 } 429 430 // ----------------------------------------------------------------------------- 431 cc_test_library { 432 name: "libtest_dlsym_from_this_child", 433 defaults: ["bionic_testlib_defaults"], 434 srcs: ["dlsym_from_this_functions.cpp"], 435 shared_libs: ["libtest_dlsym_from_this_grandchild"], 436 target: { 437 android: { 438 shared_libs: ["libdl"], 439 }, 440 host: { 441 host_ldlibs: ["-ldl"], 442 }, 443 }, 444 } 445 446 // ----------------------------------------------------------------------------- 447 cc_test_library { 448 name: "libtest_dlsym_from_this_grandchild", 449 defaults: ["bionic_testlib_defaults"], 450 srcs: ["dlsym_from_this_symbol2.cpp"], 451 } 452 453 // ----------------------------------------------------------------------------- 454 // Empty library 455 // ----------------------------------------------------------------------------- 456 cc_test_library { 457 name: "libtest_empty", 458 defaults: ["bionic_testlib_defaults"], 459 srcs: ["empty.cpp"], 460 } 461 462 // ----------------------------------------------------------------------------- 463 // Library with weak undefined function 464 // ----------------------------------------------------------------------------- 465 cc_test_library { 466 name: "libtest_dlopen_weak_undefined_func", 467 defaults: ["bionic_testlib_defaults"], 468 srcs: ["dlopen_weak_undefined.cpp"], 469 } 470 471 // ----------------------------------------------------------------------------- 472 // Check that RTLD_NEXT of a libc symbol works in dlopened library 473 // ----------------------------------------------------------------------------- 474 cc_test_library { 475 name: "libtest_check_rtld_next_from_library", 476 defaults: ["bionic_testlib_defaults"], 477 srcs: ["check_rtld_next_from_library.cpp"], 478 479 target: { 480 android: { 481 shared_libs: ["libdl"], 482 }, 483 host: { 484 host_ldlibs: ["-ldl"], 485 }, 486 }, 487 } 488 489 // ----------------------------------------------------------------------------- 490 // Library with constructor that calls dlopen() b/7941716 491 // ----------------------------------------------------------------------------- 492 cc_test_library { 493 name: "libtest_dlopen_from_ctor", 494 defaults: ["bionic_testlib_defaults"], 495 srcs: ["dlopen_testlib_dlopen_from_ctor.cpp"], 496 target: { 497 android: { 498 shared_libs: ["libdl"], 499 }, 500 host: { 501 host_ldlibs: ["-ldl"], 502 }, 503 }, 504 } 505 506 // ----------------------------------------------------------------------------- 507 // Libraries used to check init/fini call order 508 // ----------------------------------------------------------------------------- 509 cc_test_library { 510 name: "libtest_init_fini_order_root", 511 defaults: ["bionic_testlib_defaults"], 512 srcs: ["dlopen_check_init_fini_root.cpp"], 513 shared_libs: [ 514 "libtest_init_fini_order_child", 515 "libtest_init_fini_order_grand_child", 516 ], 517 } 518 519 cc_test_library { 520 name: "libtest_init_fini_order_root2", 521 defaults: ["bionic_testlib_defaults"], 522 srcs: ["dlopen_check_init_fini_root.cpp"], 523 shared_libs: [ 524 "libtest_init_fini_order_grand_child", 525 "libtest_init_fini_order_child", 526 ], 527 } 528 529 cc_test_library { 530 name: "libtest_init_fini_order_child", 531 defaults: ["bionic_testlib_defaults"], 532 srcs: ["dlopen_check_init_fini_child.cpp"], 533 shared_libs: ["libtest_init_fini_order_grand_child"], 534 } 535 536 cc_test_library { 537 name: "libtest_init_fini_order_grand_child", 538 defaults: ["bionic_testlib_defaults"], 539 srcs: ["dlopen_check_init_fini_grand_child.cpp"], 540 } 541 542 // ----------------------------------------------------------------------------- 543 // Library that depends on the library with constructor that calls dlopen() b/7941716 544 // ----------------------------------------------------------------------------- 545 cc_test_library { 546 name: "libtest_dlopen_from_ctor_main", 547 defaults: ["bionic_testlib_defaults"], 548 srcs: ["empty.cpp"], 549 shared_libs: ["libtest_dlopen_from_ctor"], 550 } 551 552 // ----------------------------------------------------------------------------- 553 // Tool to use to align the shared libraries in a zip file. 554 // ----------------------------------------------------------------------------- 555 cc_binary_host { 556 name: "bionic_tests_zipalign", 557 srcs: ["bionic_tests_zipalign.cpp"], 558 cflags: [ 559 "-Wall", 560 "-Werror", 561 ], 562 563 static_libs: [ 564 "libziparchive", 565 "liblog", 566 "libbase", 567 "libz", 568 "libutils", 569 ], 570 } 571 572 cc_test_library { 573 name: "libcfi-test", 574 defaults: ["bionic_testlib_defaults"], 575 srcs: ["cfi_test_lib.cpp"], 576 sanitize: { 577 cfi: false, 578 }, 579 } 580 581 cc_test_library { 582 name: "libcfi-test-bad", 583 defaults: ["bionic_testlib_defaults"], 584 srcs: ["cfi_test_bad_lib.cpp"], 585 sanitize: { 586 cfi: false, 587 }, 588 } 589 590 cc_test { 591 name: "cfi_test_helper", 592 host_supported: false, 593 defaults: ["bionic_testlib_defaults"], 594 srcs: ["cfi_test_helper.cpp"], 595 ldflags: ["-rdynamic"], 596 } 597 598 cc_test { 599 name: "cfi_test_helper2", 600 host_supported: false, 601 defaults: ["bionic_testlib_defaults"], 602 srcs: ["cfi_test_helper2.cpp"], 603 shared_libs: ["libcfi-test"], 604 ldflags: ["-Wl,--rpath,${ORIGIN}/.."], 605 } 606 607 cc_test { 608 name: "preinit_getauxval_test_helper", 609 host_supported: false, 610 defaults: ["bionic_testlib_defaults"], 611 srcs: ["preinit_getauxval_test_helper.cpp"], 612 } 613 614 cc_test { 615 name: "preinit_syscall_test_helper", 616 host_supported: false, 617 defaults: ["bionic_testlib_defaults"], 618 srcs: ["preinit_syscall_test_helper.cpp"], 619 } 620 621 cc_test { 622 name: "ld_preload_test_helper", 623 host_supported: false, 624 defaults: ["bionic_testlib_defaults"], 625 srcs: ["ld_preload_test_helper.cpp"], 626 shared_libs: ["ld_preload_test_helper_lib1"], 627 ldflags: ["-Wl,--rpath,${ORIGIN}/.."], 628 } 629 630 cc_test_library { 631 name: "ld_preload_test_helper_lib1", 632 host_supported: false, 633 defaults: ["bionic_testlib_defaults"], 634 srcs: ["ld_preload_test_helper_lib1.cpp"], 635 } 636 637 cc_test_library { 638 name: "ld_preload_test_helper_lib2", 639 host_supported: false, 640 defaults: ["bionic_testlib_defaults"], 641 srcs: ["ld_preload_test_helper_lib2.cpp"], 642 } 643 644 cc_test { 645 name: "ld_config_test_helper", 646 host_supported: false, 647 defaults: ["bionic_testlib_defaults"], 648 srcs: ["ld_config_test_helper.cpp"], 649 shared_libs: ["ld_config_test_helper_lib1"], 650 ldflags: ["-Wl,--rpath,${ORIGIN}/.."], 651 } 652 653 cc_test_library { 654 name: "ld_config_test_helper_lib1", 655 host_supported: false, 656 defaults: ["bionic_testlib_defaults"], 657 srcs: ["ld_config_test_helper_lib1.cpp"], 658 shared_libs: ["ld_config_test_helper_lib2"], 659 relative_install_path: "/ns2", 660 } 661 662 cc_test_library { 663 name: "ld_config_test_helper_lib2", 664 host_supported: false, 665 defaults: ["bionic_testlib_defaults"], 666 srcs: ["ld_config_test_helper_lib2.cpp"], 667 relative_install_path: "/ns2", 668 } 669 670 cc_test_library { 671 name: "ld_config_test_helper_lib3", 672 host_supported: false, 673 defaults: ["bionic_testlib_defaults"], 674 srcs: ["ld_config_test_helper_lib3.cpp"], 675 } 676