| lh | 9ed821d | 2023-04-07 01:36:19 -0700 | [diff] [blame] | 1 | #include <dlfcn.h> | 
 | 2 | #include <stdio.h> | 
 | 3 |  | 
 | 4 | int | 
 | 5 | main (void) | 
 | 6 | { | 
 | 7 |   void *g = dlopen ("unload3mod1.so", RTLD_GLOBAL | RTLD_NOW); | 
 | 8 |   void *h = dlopen ("unload3mod2.so", RTLD_GLOBAL | RTLD_NOW); | 
 | 9 |   if (g == NULL || h == NULL) | 
 | 10 |     { | 
 | 11 |       printf ("dlopen unload3mod{1,2}.so failed: %p %p\n", g, h); | 
 | 12 |       return 1; | 
 | 13 |     } | 
 | 14 |   dlclose (h); | 
 | 15 |   dlclose (g); | 
 | 16 |  | 
 | 17 |   g = dlopen ("unload3mod3.so", RTLD_GLOBAL | RTLD_NOW); | 
 | 18 |   h = dlopen ("unload3mod4.so", RTLD_GLOBAL | RTLD_NOW); | 
 | 19 |   if (g == NULL || h == NULL) | 
 | 20 |     { | 
 | 21 |       printf ("dlopen unload3mod{3,4}.so failed: %p %p\n", g, h); | 
 | 22 |       return 1; | 
 | 23 |     } | 
 | 24 |  | 
 | 25 |   int (*fn) (int); | 
 | 26 |   fn = dlsym (h, "bar"); | 
 | 27 |   if (fn == NULL) | 
 | 28 |     { | 
 | 29 |       puts ("dlsym failed"); | 
 | 30 |       return 1; | 
 | 31 |     } | 
 | 32 |  | 
 | 33 |   int val = fn (16); | 
 | 34 |   if (val != 24) | 
 | 35 |     { | 
 | 36 |       printf ("bar returned %d != 24\n", val); | 
 | 37 |       return 1; | 
 | 38 |     } | 
 | 39 |  | 
 | 40 |   return 0; | 
 | 41 | } |