1 /* This testcase is part of GDB, the GNU debugger. 2 3 Copyright (C) 2013-2023 Free Software Foundation, Inc. 4 5 This program is free software; you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published by 7 the Free Software Foundation; either version 3 of the License, or 8 (at your option) any later version. 9 10 This program 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 13 GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 17 18 #include <stdio.h> 19 #include <stdlib.h> 20 21 #ifdef __WIN32__ 22 #include <windows.h> 23 #define dlopen(name, mode) LoadLibrary (TEXT (name)) 24 # define dlsym(handle, func) GetProcAddress (handle, func) 25 #define dlclose(handle) FreeLibrary (handle) 26 #else 27 #include <dlfcn.h> 28 #endif 29 30 static void **handles; 31 32 void 33 do_test_load (int number) 34 { 35 char libname[40]; 36 int i; 37 38 handles = malloc (sizeof (void *) * number); 39 if (handles == NULL) 40 { 41 printf ("ERROR on malloc\n"); 42 exit (-1); 43 } 44 45 for (i = 0; i < number; i++) 46 { 47 sprintf (libname, "solib-lib%d", i); 48 handles[i] = dlopen (libname, RTLD_LAZY); 49 if (handles[i] == NULL) 50 { 51 printf ("ERROR on dlopen %s\n", libname); 52 exit (-1); 53 } 54 } 55 } 56 57 void 58 do_test_unload (int number) 59 { 60 int i; 61 62 /* Unload shared libraries in different orders. */ 63 #ifndef SOLIB_DLCLOSE_REVERSED_ORDER 64 for (i = 0; i < number; i++) 65 #else 66 for (i = number - 1; i >= 0; i--) 67 #endif 68 dlclose (handles[i]); 69 70 free (handles); 71 } 72 73 static void 74 end (void) 75 {} 76 77 int 78 main (void) 79 { 80 end (); 81 82 return 0; 83 } 84