| lh | 9ed821d | 2023-04-07 01:36:19 -0700 | [diff] [blame] | 1 | #include <dlfcn.h> | 
 | 2 | #include <stdio.h> | 
 | 3 | #include <malloc.h> | 
 | 4 |  | 
 | 5 | int | 
 | 6 | main (void) | 
 | 7 | { | 
 | 8 | #ifdef M_PERTURB | 
 | 9 |   mallopt (M_PERTURB, 0xaa); | 
 | 10 | #endif | 
 | 11 |  | 
 | 12 |   void *h; | 
 | 13 |   int (*fn) (int); | 
 | 14 |   h = dlopen ("unload4mod1.so", RTLD_LAZY); | 
 | 15 |   if (h == NULL) | 
 | 16 |     { | 
 | 17 |       puts ("1st dlopen failed"); | 
 | 18 |       return 1; | 
 | 19 |     } | 
 | 20 |   fn = dlsym (h, "foo"); | 
 | 21 |   if (fn == NULL) | 
 | 22 |     { | 
 | 23 |       puts ("dlsym failed"); | 
 | 24 |       return 1; | 
 | 25 |     } | 
 | 26 |   int n = fn (10); | 
 | 27 |   if (n != 28) | 
 | 28 |     { | 
 | 29 |       printf ("foo (10) returned %d != 28\n", n); | 
 | 30 |       return 1; | 
 | 31 |     } | 
 | 32 |   dlclose (h); | 
 | 33 |   h = dlopen ("unload4mod3.so", RTLD_LAZY); | 
 | 34 |   fn = dlsym (h, "mod3fn2"); | 
 | 35 |   if (fn == NULL) | 
 | 36 |     { | 
 | 37 |       puts ("second dlsym failed"); | 
 | 38 |       return 1; | 
 | 39 |     } | 
 | 40 |   n = fn (10); | 
 | 41 |   if (n != 22) | 
 | 42 |     { | 
 | 43 |       printf ("mod3fn2 (10) returned %d != 22\n", n); | 
 | 44 |       return 1; | 
 | 45 |     } | 
 | 46 |   dlclose (h); | 
 | 47 |   return 0; | 
 | 48 | } |