| #include <dlfcn.h> | 
 | #include <stdio.h> | 
 | #include <malloc.h> | 
 |  | 
 | int | 
 | main (void) | 
 | { | 
 | #ifdef M_PERTURB | 
 |   mallopt (M_PERTURB, 0xaa); | 
 | #endif | 
 |  | 
 |   void *h; | 
 |   int (*fn) (int); | 
 |   h = dlopen ("unload4mod1.so", RTLD_LAZY); | 
 |   if (h == NULL) | 
 |     { | 
 |       puts ("1st dlopen failed"); | 
 |       return 1; | 
 |     } | 
 |   fn = dlsym (h, "foo"); | 
 |   if (fn == NULL) | 
 |     { | 
 |       puts ("dlsym failed"); | 
 |       return 1; | 
 |     } | 
 |   int n = fn (10); | 
 |   if (n != 28) | 
 |     { | 
 |       printf ("foo (10) returned %d != 28\n", n); | 
 |       return 1; | 
 |     } | 
 |   dlclose (h); | 
 |   h = dlopen ("unload4mod3.so", RTLD_LAZY); | 
 |   fn = dlsym (h, "mod3fn2"); | 
 |   if (fn == NULL) | 
 |     { | 
 |       puts ("second dlsym failed"); | 
 |       return 1; | 
 |     } | 
 |   n = fn (10); | 
 |   if (n != 22) | 
 |     { | 
 |       printf ("mod3fn2 (10) returned %d != 22\n", n); | 
 |       return 1; | 
 |     } | 
 |   dlclose (h); | 
 |   return 0; | 
 | } |