(root)/
glibc-2.38/
elf/
tst-audit-tlsdesc-dlopen.c
       1  /* DT_AUDIT with modules with TLSDESC.
       2     Copyright (C) 2021-2023 Free Software Foundation, Inc.
       3     This file is part of the GNU C Library.
       4  
       5     The GNU C Library is free software; you can redistribute it and/or
       6     modify it under the terms of the GNU Lesser General Public
       7     License as published by the Free Software Foundation; either
       8     version 2.1 of the License, or (at your option) any later version.
       9  
      10     The GNU C Library is distributed in the hope that it will be useful,
      11     but WITHOUT ANY WARRANTY; without even the implied warranty of
      12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      13     Lesser General Public License for more details.
      14  
      15     You should have received a copy of the GNU Lesser General Public
      16     License along with the GNU C Library; if not, see
      17     <https://www.gnu.org/licenses/>.  */
      18  
      19  #include <support/check.h>
      20  #include <support/xthread.h>
      21  #include <support/xdlfcn.h>
      22  
      23  static void *
      24  thr_func (void *mod)
      25  {
      26    int* (*get_global1)(void) = xdlsym (mod, "get_global1");
      27    int* (*get_global2)(void) = xdlsym (mod, "get_global2");
      28    void (*set_global2)(int) = xdlsym (mod, "set_global2");
      29    int* (*get_local1)(void) = xdlsym (mod, "get_local1");
      30    int* (*get_local2)(void) = xdlsym (mod, "get_local2");
      31  
      32    int *global1 = get_global1 ();
      33    TEST_COMPARE (*global1, 0);
      34    ++*global1;
      35  
      36    int *global2 = get_global2 ();
      37    TEST_COMPARE (*global2, 0);
      38    ++*global2;
      39    TEST_COMPARE (*global2, 1);
      40  
      41    set_global2 (10);
      42    TEST_COMPARE (*global2, 10);
      43  
      44    int *local1 = get_local1 ();
      45    TEST_COMPARE (*local1, 0);
      46    ++*local1;
      47  
      48    int *local2 = get_local2 ();
      49    TEST_COMPARE (*local2, 0);
      50    ++*local2;
      51  
      52    return 0;
      53  }
      54  
      55  static int
      56  do_test (void)
      57  {
      58    void *mod = xdlopen ("tst-audit-tlsdesc-mod1.so", RTLD_LAZY);
      59  
      60    pthread_t thr = xpthread_create (NULL, thr_func, mod);
      61    void *r = xpthread_join (thr);
      62    TEST_VERIFY (r == NULL);
      63  
      64    return 0;
      65  }
      66  
      67  #include <support/test-driver.c>