Changeset f356618 in mainline for uspace/app/dltest/dltest.c


Ignore:
Timestamp:
2016-05-22T21:05:55Z (9 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
b3364b7c
Parents:
af2254ec (diff), 3a9414e (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge dynamic linking support for thread local storage.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/dltest/dltest.c

    raf2254ec rf356618  
    4343
    4444/** libdltest library handle */
    45 void *handle;
     45static void *handle;
     46
     47/** If true, do not run dlfcn tests */
     48static bool no_dlfcn = false;
    4649
    4750/** Test dlsym() function */
     
    9396{
    9497        int (*p_dl_get_private_var)(void);
     98        int *(*p_dl_get_private_var_addr)(void);
    9599        int val;
    96100
     
    103107        }
    104108
     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
    105115        val = p_dl_get_private_var();
    106116
    107117        printf("Got %d, expected %d... ", val, dl_private_var_val);
    108118        if (val != dl_private_var_val) {
     119                printf("dl_get_private_var_addr -> %p\n",
     120                    p_dl_get_private_var_addr());
    109121                printf("FAILED\n");
    110122                return false;
     
    121133{
    122134        int (*p_dl_get_private_uvar)(void);
     135        int *(*p_dl_get_private_uvar_addr)(void);
    123136        int val;
    124137
     
    131144        }
    132145
     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
    133152        val = p_dl_get_private_uvar();
    134153
    135154        printf("Got %d, expected %d... ", val, 0);
    136155        if (val != 0) {
     156                printf("dl_get_private_uvar_addr -> %p\n",
     157                    p_dl_get_private_uvar_addr());
    137158                printf("FAILED\n");
    138159                return false;
     
    149170{
    150171        int (*p_dl_get_public_var)(void);
     172        int *(*p_dl_get_public_var_addr)(void);
    151173        int val;
    152174
     
    159181        }
    160182
     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
    161189        val = p_dl_get_public_var();
    162190
    163191        printf("Got %d, expected %d... ", val, dl_public_var_val);
    164192        if (val != dl_public_var_val) {
     193                printf("dl_get_public_var_addr -> %p\n",
     194                    p_dl_get_public_var_addr());
    165195                printf("FAILED\n");
    166196                return false;
     
    177207{
    178208        int (*p_dl_get_public_uvar)(void);
     209        int *(*p_dl_get_public_uvar_addr)(void);
    179210        int val;
    180211
     
    187218        }
    188219
     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
    189226        val = p_dl_get_public_uvar();
    190227
    191228        printf("Got %d, expected %d... ", val, 0);
    192229        if (val != 0) {
     230                printf("dl_get_public_uvar_addr -> %p\n",
     231                    p_dl_get_public_uvar_addr());
    193232                printf("FAILED\n");
    194233                return false;
     
    205244{
    206245        int *p_dl_public_var;
     246        int *(*p_dl_get_public_var_addr)(void);
    207247        int val;
    208248
     
    215255        }
    216256
     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
    217263        val = *p_dl_public_var;
    218264
    219265        printf("Got %d, expected %d... ", val, dl_public_var_val);
    220266        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());
    221270                printf("FAILED\n");
    222271                return false;
     
    233282{
    234283        int *p_dl_public_uvar;
     284        int *(*p_dl_get_public_uvar_addr)(void);
    235285        int val;
    236286
     
    243293        }
    244294
     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
    245301        val = *p_dl_public_uvar;
    246302
    247303        printf("Got %d, expected %d... ", val, 0);
    248304        if (val != 0) {
    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 
     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 */
     321static 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 */
     358static 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 */
     395static 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 */
     432static 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 */
     469static 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 */
     507static 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 */
     547static 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 */
     568static 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 */
     591static 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 */
     614static 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 */
     637static 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. */
     658static 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. */
     679static 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 */
     702static 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 */
     725static 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 */
     748static 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 */
     771static 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. */
     792static 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. */
     814static 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
     837static int test_dlfcn(void)
     838{
    262839        printf("dlopen()... ");
    263840        handle = dlopen("libdltest.so.0", 0);
     
    293870                return 1;
    294871
     872#ifndef STATIC_EXE
     873        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
    295892//      printf("dlclose()... ");
    296893//      dlclose(handle);
    297894//      printf("Passed\n");
    298895
     896        return 0;
     897}
     898
     899#ifdef DLTEST_LINKED
     900
     901static 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
     947static 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
     953int 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_LINKED
     977        if (test_lnk() != 0)
     978                return 1;
     979#endif
     980
    299981        printf("All passed.\n");
    300982        return 0;
Note: See TracChangeset for help on using the changeset viewer.