f86a724b646a42f144b58a56f92404883533fa65
[platform/upstream/gdb.git] / gdb / testsuite / gdb.perf / solib.c
1 /* This testcase is part of GDB, the GNU debugger.
2
3    Copyright (C) 2013-2014 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 }