(root)/
glibc-2.38/
elf/
unload3.c
       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  }