Changes in uspace/app/dltest/dltest.c [2112a79:9182e86f] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/dltest/dltest.c
r2112a79 r9182e86f 43 43 44 44 /** libdltest library handle */ 45 static void *handle; 46 47 /** If true, do not run dlfcn tests */ 48 static bool no_dlfcn = false; 45 void *handle; 49 46 50 47 /** Test dlsym() function */ … … 96 93 { 97 94 int (*p_dl_get_private_var)(void); 98 int *(*p_dl_get_private_var_addr)(void);99 95 int val; 100 96 … … 107 103 } 108 104 109 p_dl_get_private_var_addr = dlsym(handle, "dl_get_private_var_addr");110 if (p_dl_get_private_var_addr == NULL) {111 printf("FAILED\n");112 return false;113 }114 115 105 val = p_dl_get_private_var(); 116 106 117 107 printf("Got %d, expected %d... ", val, dl_private_var_val); 118 108 if (val != dl_private_var_val) { 119 printf("dl_get_private_var_addr -> %p\n",120 p_dl_get_private_var_addr());121 109 printf("FAILED\n"); 122 110 return false; … … 133 121 { 134 122 int (*p_dl_get_private_uvar)(void); 135 int *(*p_dl_get_private_uvar_addr)(void);136 123 int val; 137 124 … … 144 131 } 145 132 146 p_dl_get_private_uvar_addr = dlsym(handle, "dl_get_private_uvar_addr");147 if (p_dl_get_private_uvar_addr == NULL) {148 printf("FAILED\n");149 return false;150 }151 152 133 val = p_dl_get_private_uvar(); 153 134 154 135 printf("Got %d, expected %d... ", val, 0); 155 136 if (val != 0) { 156 printf("dl_get_private_uvar_addr -> %p\n",157 p_dl_get_private_uvar_addr());158 137 printf("FAILED\n"); 159 138 return false; … … 170 149 { 171 150 int (*p_dl_get_public_var)(void); 172 int *(*p_dl_get_public_var_addr)(void);173 151 int val; 174 152 … … 181 159 } 182 160 183 p_dl_get_public_var_addr = dlsym(handle, "dl_get_public_var_addr");184 if (p_dl_get_public_var_addr == NULL) {185 printf("FAILED\n");186 return false;187 }188 189 161 val = p_dl_get_public_var(); 190 162 191 163 printf("Got %d, expected %d... ", val, dl_public_var_val); 192 164 if (val != dl_public_var_val) { 193 printf("dl_get_public_var_addr -> %p\n",194 p_dl_get_public_var_addr());195 165 printf("FAILED\n"); 196 166 return false; … … 207 177 { 208 178 int (*p_dl_get_public_uvar)(void); 209 int *(*p_dl_get_public_uvar_addr)(void);210 179 int val; 211 180 … … 218 187 } 219 188 220 p_dl_get_public_uvar_addr = dlsym(handle, "dl_get_public_uvar_addr");221 if (p_dl_get_public_uvar_addr == NULL) {222 printf("FAILED\n");223 return false;224 }225 226 189 val = p_dl_get_public_uvar(); 227 190 228 191 printf("Got %d, expected %d... ", val, 0); 229 192 if (val != 0) { 230 printf("dl_get_public_uvar_addr -> %p\n",231 p_dl_get_public_uvar_addr());232 193 printf("FAILED\n"); 233 194 return false; … … 244 205 { 245 206 int *p_dl_public_var; 246 int *(*p_dl_get_public_var_addr)(void);247 207 int val; 248 208 … … 255 215 } 256 216 257 p_dl_get_public_var_addr = dlsym(handle, "dl_get_public_var_addr");258 if (p_dl_get_public_var_addr == NULL) {259 printf("FAILED\n");260 return false;261 }262 263 217 val = *p_dl_public_var; 264 218 265 219 printf("Got %d, expected %d... ", val, dl_public_var_val); 266 220 if (val != dl_public_var_val) { 267 printf("&dl_public_var = %p, "268 "dl_get_public_var_addr -> %p\n",269 p_dl_public_var, p_dl_get_public_var_addr());270 221 printf("FAILED\n"); 271 222 return false; … … 282 233 { 283 234 int *p_dl_public_uvar; 284 int *(*p_dl_get_public_uvar_addr)(void);285 235 int val; 286 236 … … 293 243 } 294 244 295 p_dl_get_public_uvar_addr = dlsym(handle, "dl_get_public_uvar_addr");296 if (p_dl_get_public_uvar_addr == NULL) {297 printf("FAILED\n");298 return false;299 }300 301 245 val = *p_dl_public_uvar; 302 246 303 247 printf("Got %d, expected %d... ", val, 0); 304 248 if (val != 0) { 305 printf("&dl_public_uvar = %p, " 306 "dl_get_public_uvar_addr -> %p\n", 307 p_dl_public_uvar, p_dl_get_public_uvar_addr()); 308 printf("FAILED\n"); 309 return false; 310 } 311 312 printf("Passed\n"); 313 return true; 314 } 315 316 #ifndef STATIC_EXE 317 318 /** Test calling a function that returns contents of a private initialized 319 * fibril-local variable. 320 */ 321 static bool test_dlfcn_dl_get_private_fib_var(void) 322 { 323 int (*p_dl_get_private_fib_var)(void); 324 int *(*p_dl_get_private_fib_var_addr)(void); 325 int val; 326 327 printf("Call dlsym/dl_get_private_fib_var...\n"); 328 329 p_dl_get_private_fib_var = dlsym(handle, "dl_get_private_fib_var"); 330 if (p_dl_get_private_fib_var == NULL) { 331 printf("FAILED\n"); 332 return false; 333 } 334 335 p_dl_get_private_fib_var_addr = dlsym(handle, "dl_get_private_fib_var_addr"); 336 if (p_dl_get_private_fib_var_addr == NULL) { 337 printf("FAILED\n"); 338 return false; 339 } 340 341 val = p_dl_get_private_fib_var(); 342 343 printf("Got %d, expected %d... ", val, dl_private_fib_var_val); 344 if (val != dl_private_fib_var_val) { 345 printf("dl_get_private_fib_var_addr -> %p\n", 346 p_dl_get_private_fib_var_addr()); 347 printf("FAILED\n"); 348 return false; 349 } 350 351 printf("Passed\n"); 352 return true; 353 } 354 355 /** Test calling a function that returns contents of a private uninitialized 356 * fibril-local variable. 357 */ 358 static bool test_dlfcn_dl_get_private_fib_uvar(void) 359 { 360 int (*p_dl_get_private_fib_uvar)(void); 361 int *(*p_dl_get_private_fib_uvar_addr)(void); 362 int val; 363 364 printf("Call dlsym/dl_get_private_fib_uvar...\n"); 365 366 p_dl_get_private_fib_uvar = dlsym(handle, "dl_get_private_fib_uvar"); 367 if (p_dl_get_private_fib_uvar == NULL) { 368 printf("FAILED\n"); 369 return false; 370 } 371 372 p_dl_get_private_fib_uvar_addr = dlsym(handle, "dl_get_private_fib_uvar_addr"); 373 if (p_dl_get_private_fib_uvar_addr == NULL) { 374 printf("FAILED\n"); 375 return false; 376 } 377 378 val = p_dl_get_private_fib_uvar(); 379 380 printf("Got %d, expected %d... ", val, 0); 381 if (val != 0) { 382 printf("dl_get_private_fib_uvar_addr -> %p\n", 383 p_dl_get_private_fib_uvar_addr()); 384 printf("FAILED\n"); 385 return false; 386 } 387 388 printf("Passed\n"); 389 return true; 390 } 391 392 /** Test calling a function that returns the contents of a public initialized 393 * fibril-local variable. 394 */ 395 static bool test_dlfcn_dl_get_public_fib_var(void) 396 { 397 int (*p_dl_get_public_fib_var)(void); 398 int *(*p_dl_get_public_fib_var_addr)(void); 399 int val; 400 401 printf("Call dlsym/dl_get_public_fib_var...\n"); 402 403 p_dl_get_public_fib_var = dlsym(handle, "dl_get_public_fib_var"); 404 if (p_dl_get_public_fib_var == NULL) { 405 printf("FAILED\n"); 406 return false; 407 } 408 409 p_dl_get_public_fib_var_addr = dlsym(handle, "dl_get_public_fib_var_addr"); 410 if (p_dl_get_public_fib_var_addr == NULL) { 411 printf("FAILED\n"); 412 return false; 413 } 414 415 val = p_dl_get_public_fib_var(); 416 417 printf("Got %d, expected %d... ", val, dl_public_fib_var_val); 418 if (val != dl_public_fib_var_val) { 419 printf("dl_get_public_fib_var_addr -> %p\n", 420 p_dl_get_public_fib_var_addr()); 421 printf("FAILED\n"); 422 return false; 423 } 424 425 printf("Passed\n"); 426 return true; 427 } 428 429 /** Test calling a function that returns the contents of a public uninitialized 430 * fibril-local variable. 431 */ 432 static bool test_dlfcn_dl_get_public_fib_uvar(void) 433 { 434 int (*p_dl_get_public_fib_uvar)(void); 435 int *(*p_dl_get_public_fib_uvar_addr)(void); 436 int val; 437 438 printf("Call dlsym/dl_get_public_fib_uvar...\n"); 439 440 p_dl_get_public_fib_uvar = dlsym(handle, "dl_get_public_fib_uvar"); 441 if (p_dl_get_public_fib_uvar == NULL) { 442 printf("FAILED\n"); 443 return false; 444 } 445 446 p_dl_get_public_fib_uvar_addr = dlsym(handle, "dl_get_public_fib_uvar_addr"); 447 if (p_dl_get_public_fib_uvar_addr == NULL) { 448 printf("FAILED\n"); 449 return false; 450 } 451 452 val = p_dl_get_public_fib_uvar(); 453 454 printf("Got %d, expected %d... ", val, 0); 455 if (val != 0) { 456 printf("dl_get_public_fib_uvar_addr -> %p\n", 457 p_dl_get_public_fib_uvar_addr()); 458 printf("FAILED\n"); 459 return false; 460 } 461 462 printf("Passed\n"); 463 return true; 464 } 465 466 /** Test directly reading a public initialized fibril-local variable 467 * whose address was obtained using dlsym. 468 */ 469 static bool test_dlfcn_read_public_fib_var(void) 470 { 471 int *p_dl_public_fib_var; 472 int *(*p_dl_get_public_fib_var_addr)(void); 473 int val; 474 475 printf("Read dlsym/dl_public_fib_var...\n"); 476 477 p_dl_public_fib_var = dlsym(handle, "dl_public_fib_var"); 478 if (p_dl_public_fib_var == NULL) { 479 printf("FAILED\n"); 480 return false; 481 } 482 483 p_dl_get_public_fib_var_addr = dlsym(handle, "dl_get_public_fib_var_addr"); 484 if (p_dl_get_public_fib_var_addr == NULL) { 485 printf("FAILED\n"); 486 return false; 487 } 488 489 val = *p_dl_public_fib_var; 490 491 printf("Got %d, expected %d... ", val, dl_public_fib_var_val); 492 if (val != dl_public_fib_var_val) { 493 printf("&dl_public_fib_var = %p, " 494 "dl_get_public_fib_var_addr -> %p\n", 495 p_dl_public_fib_var, p_dl_get_public_fib_var_addr()); 496 printf("FAILED\n"); 497 return false; 498 } 499 500 printf("Passed\n"); 501 return true; 502 } 503 504 /** Test directly reading a public uninitialized fibril-local variable 505 * whose address was obtained using dlsym. 506 */ 507 static bool test_dlfcn_read_public_fib_uvar(void) 508 { 509 int *p_dl_public_fib_uvar; 510 int *(*p_dl_get_public_fib_uvar_addr)(void); 511 int val; 512 513 printf("Read dlsym/dl_public_fib_uvar...\n"); 514 515 p_dl_public_fib_uvar = dlsym(handle, "dl_public_fib_uvar"); 516 if (p_dl_public_fib_uvar == NULL) { 517 printf("FAILED\n"); 518 return false; 519 } 520 521 p_dl_get_public_fib_uvar_addr = dlsym(handle, "dl_get_public_fib_uvar_addr"); 522 if (p_dl_get_public_fib_uvar_addr == NULL) { 523 printf("FAILED\n"); 524 return false; 525 } 526 527 val = *p_dl_public_fib_uvar; 528 529 printf("Got %d, expected %d... ", val, 0); 530 if (val != 0) { 531 printf("&dl_public_fib_uvar = %p, " 532 "dl_get_public_fib_uvar_addr -> %p\n", 533 p_dl_public_fib_uvar, p_dl_get_public_fib_uvar_addr()); 534 printf("FAILED\n"); 535 return false; 536 } 537 538 printf("Passed\n"); 539 return true; 540 } 541 542 #endif /* STATIC_EXE */ 543 544 #ifdef DLTEST_LINKED 545 546 /** Test directly calling function that returns a constant */ 547 static bool test_lnk_dl_get_constant(void) 548 { 549 int val; 550 551 printf("Call linked dl_get_constant...\n"); 552 553 val = dl_get_constant(); 554 555 printf("Got %d, expected %d... ", val, dl_constant); 556 if (val != dl_constant) { 557 printf("FAILED\n"); 558 return false; 559 } 560 561 printf("Passed\n"); 562 return true; 563 } 564 565 /** Test dircetly calling a function that returns contents of a private 566 * initialized variable. 567 */ 568 static bool test_lnk_dl_get_private_var(void) 569 { 570 int val; 571 572 printf("Call linked dl_get_private_var...\n"); 573 574 val = dl_get_private_var(); 575 576 printf("Got %d, expected %d... ", val, dl_private_var_val); 577 if (val != dl_private_var_val) { 578 printf("dl_get_private_var_addr -> %p\n", 579 dl_get_private_var_addr()); 580 printf("FAILED\n"); 581 return false; 582 } 583 584 printf("Passed\n"); 585 return true; 586 } 587 588 /** Test dircetly calling a function that returns contents of a private 589 * uninitialized variable. 590 */ 591 static bool test_lnk_dl_get_private_uvar(void) 592 { 593 int val; 594 595 printf("Call linked dl_get_private_uvar...\n"); 596 597 val = dl_get_private_uvar(); 598 599 printf("Got %d, expected %d... ", val, 0); 600 if (val != 0) { 601 printf("dl_get_private_uvar_addr -> %p\n", 602 dl_get_private_uvar_addr()); 603 printf("FAILED\n"); 604 return false; 605 } 606 607 printf("Passed\n"); 608 return true; 609 } 610 611 /** Test directly calling a function that returns the contents of a public 612 * initialized variable. 613 */ 614 static bool test_lnk_dl_get_public_var(void) 615 { 616 int val; 617 618 printf("Call linked dl_get_public_var...\n"); 619 620 val = dl_get_public_var(); 621 622 printf("Got %d, expected %d... ", val, dl_public_var_val); 623 if (val != dl_public_var_val) { 624 printf("dl_get_public_var_addr -> %p\n", 625 dl_get_public_var_addr()); 626 printf("FAILED\n"); 627 return false; 628 } 629 630 printf("Passed\n"); 631 return true; 632 } 633 634 /** Test directly calling a function that returns the contents of a public 635 * uninitialized variable. 636 */ 637 static bool test_lnk_dl_get_public_uvar(void) 638 { 639 int val; 640 641 printf("Call linked dl_get_public_uvar...\n"); 642 643 val = dl_get_public_uvar(); 644 645 printf("Got %d, expected %d... ", val, 0); 646 if (val != 0) { 647 printf("dl_get_public_uvar_addr -> %p\n", 648 dl_get_public_uvar_addr()); 649 printf("FAILED\n"); 650 return false; 651 } 652 653 printf("Passed\n"); 654 return true; 655 } 656 657 /** Test directly reading a public initialized variable. */ 658 static bool test_lnk_read_public_var(void) 659 { 660 int val; 661 662 printf("Read linked dl_public_var...\n"); 663 664 val = dl_public_var; 665 666 printf("Got %d, expected %d... ", val, dl_public_var_val); 667 if (val != dl_public_var_val) { 668 printf("&dl_public_var = %p, dl_get_public_var_addr -> %p\n", 669 &dl_public_var, dl_get_public_var_addr()); 670 printf("FAILED\n"); 671 return false; 672 } 673 674 printf("Passed\n"); 675 return true; 676 } 677 678 /** Test directly reading a public uninitialized variable. */ 679 static bool test_lnk_read_public_uvar(void) 680 { 681 int val; 682 683 printf("Read linked dl_public_uvar...\n"); 684 685 val = dl_public_uvar; 686 687 printf("Got %d, expected %d... ", val, 0); 688 if (val != 0) { 689 printf("&dl_public_uvar = %p, dl_get_public_uvar_addr -> %p\n", 690 &dl_public_uvar, dl_get_public_uvar_addr()); 691 printf("FAILED\n"); 692 return false; 693 } 694 695 printf("Passed\n"); 696 return true; 697 } 698 699 /** Test dircetly calling a function that returns contents of a private 700 * initialized fibril-local variable. 701 */ 702 static bool test_lnk_dl_get_private_fib_var(void) 703 { 704 int val; 705 706 printf("Call linked dl_get_private_fib_var...\n"); 707 708 val = dl_get_private_fib_var(); 709 710 printf("Got %d, expected %d... ", val, dl_private_fib_var_val); 711 if (val != dl_private_fib_var_val) { 712 printf("dl_get_private_fib_var_addr -> %p\n", 713 dl_get_private_fib_var_addr()); 714 printf("FAILED\n"); 715 return false; 716 } 717 718 printf("Passed\n"); 719 return true; 720 } 721 722 /** Test dircetly calling a function that returns contents of a private 723 * uninitialized fibril-local variable. 724 */ 725 static bool test_lnk_dl_get_private_fib_uvar(void) 726 { 727 int val; 728 729 printf("Call linked dl_get_private_fib_uvar...\n"); 730 731 val = dl_get_private_fib_uvar(); 732 733 printf("Got %d, expected %d... ", val, 0); 734 if (val != 0) { 735 printf("dl_get_private_fib_uvar_addr -> %p\n", 736 dl_get_private_fib_var_addr()); 737 printf("FAILED\n"); 738 return false; 739 } 740 741 printf("Passed\n"); 742 return true; 743 } 744 745 /** Test directly calling a function that returns the contents of a public 746 * initialized fibril-local variable. 747 */ 748 static bool test_lnk_dl_get_public_fib_var(void) 749 { 750 int val; 751 752 printf("Call linked dl_get_public_fib_var...\n"); 753 754 val = dl_get_public_fib_var(); 755 756 printf("Got %d, expected %d... ", val, dl_public_fib_var_val); 757 if (val != dl_public_fib_var_val) { 758 printf("dl_get_public_fib_var_addr -> %p\n", 759 dl_get_public_fib_var_addr()); 760 printf("FAILED\n"); 761 return false; 762 } 763 764 printf("Passed\n"); 765 return true; 766 } 767 768 /** Test directly calling a function that returns the contents of a public 769 * uninitialized fibril-local variable. 770 */ 771 static bool test_lnk_dl_get_public_fib_uvar(void) 772 { 773 int val; 774 775 printf("Call linked dl_get_public_fib_uvar...\n"); 776 777 val = dl_get_public_fib_uvar(); 778 779 printf("Got %d, expected %d... ", val, 0); 780 if (val != 0) { 781 printf("dl_get_public_fib_uvar_addr -> %p\n", 782 dl_get_public_fib_uvar_addr()); 783 printf("FAILED\n"); 784 return false; 785 } 786 787 printf("Passed\n"); 788 return true; 789 } 790 791 /** Test directly reading a public initialized fibril-local variable. */ 792 static bool test_lnk_read_public_fib_var(void) 793 { 794 int val; 795 796 printf("Read linked dl_public_fib_var...\n"); 797 798 val = dl_public_fib_var; 799 800 printf("Got %d, expected %d... ", val, dl_public_fib_var_val); 801 if (val != dl_public_fib_var_val) { 802 printf("&dl_public_fib_var = %p, " 803 "dl_get_public_fib_var_addr -> %p\n", 804 &dl_public_fib_var, dl_get_public_fib_var_addr()); 805 printf("FAILED\n"); 806 return false; 807 } 808 809 printf("Passed\n"); 810 return true; 811 } 812 813 /** Test directly reading a public uninitialized fibril-local variable. */ 814 static bool test_lnk_read_public_fib_uvar(void) 815 { 816 int val; 817 818 printf("Read linked dl_public_fib_uvar...\n"); 819 820 val = dl_public_fib_uvar; 821 822 printf("Got %d, expected %d... ", val, 0); 823 if (val != 0) { 824 printf("&dl_public_fib_uvar = %p, " 825 "dl_get_public_fib_uvar_addr -> %p\n", 826 &dl_public_fib_uvar, dl_get_public_fib_uvar_addr()); 827 printf("FAILED\n"); 828 return false; 829 } 830 831 printf("Passed\n"); 832 return true; 833 } 834 835 #endif /* DLTEST_LINKED */ 836 837 static int test_dlfcn(void) 838 { 249 printf("FAILED\n"); 250 return false; 251 } 252 253 printf("Passed\n"); 254 return true; 255 } 256 257 int main(int argc, char *argv[]) 258 { 259 260 printf("Dynamic linking test\n"); 261 839 262 printf("dlopen()... "); 840 263 handle = dlopen("libdltest.so.0", 0); … … 870 293 return 1; 871 294 872 #ifndef STATIC_EXE873 if (!test_dlfcn_dl_get_private_fib_var())874 return 1;875 876 if (!test_dlfcn_dl_get_private_fib_uvar())877 return 1;878 879 if (!test_dlfcn_dl_get_public_fib_var())880 return 1;881 882 if (!test_dlfcn_dl_get_public_fib_uvar())883 return 1;884 885 if (!test_dlfcn_read_public_fib_var())886 return 1;887 888 if (!test_dlfcn_read_public_fib_uvar())889 return 1;890 #endif /* STATIC_EXE */891 892 295 // printf("dlclose()... "); 893 296 // dlclose(handle); 894 297 // printf("Passed\n"); 895 298 896 return 0;897 }898 899 #ifdef DLTEST_LINKED900 901 static int test_lnk(void)902 {903 if (!test_lnk_dl_get_constant())904 return 1;905 906 if (!test_lnk_dl_get_private_var())907 return 1;908 909 if (!test_lnk_dl_get_private_uvar())910 return 1;911 912 if (!test_lnk_dl_get_public_var())913 return 1;914 915 if (!test_lnk_dl_get_public_uvar())916 return 1;917 918 if (!test_lnk_read_public_var())919 return 1;920 921 if (!test_lnk_read_public_uvar())922 return 1;923 924 if (!test_lnk_dl_get_private_fib_var())925 return 1;926 927 if (!test_lnk_dl_get_private_fib_uvar())928 return 1;929 930 if (!test_lnk_dl_get_public_fib_var())931 return 1;932 933 if (!test_lnk_dl_get_public_fib_uvar())934 return 1;935 936 if (!test_lnk_read_public_fib_var())937 return 1;938 939 if (!test_lnk_read_public_fib_uvar())940 return 1;941 942 return 0;943 }944 945 #endif /* DLTEST_LINKED */946 947 static void print_syntax(void)948 {949 fprintf(stderr, "syntax: dltest [-n]\n");950 fprintf(stderr, "\t-n Do not run dlfcn tests\n");951 }952 953 int main(int argc, char *argv[])954 {955 printf("Dynamic linking test\n");956 957 if (argc > 1) {958 if (argc > 2) {959 print_syntax();960 return 1;961 }962 963 if (str_cmp(argv[1], "-n") == 0) {964 no_dlfcn = true;965 } else {966 print_syntax();967 return 1;968 }969 }970 971 if (!no_dlfcn) {972 if (test_dlfcn() != 0)973 return 1;974 }975 976 #ifdef DLTEST_LINKED977 if (test_lnk() != 0)978 return 1;979 #endif980 981 299 printf("All passed.\n"); 982 300 return 0;
Note:
See TracChangeset
for help on using the changeset viewer.