Extend objdump's --show-all-symbols option so that it also shows the extra symbols...
[binutils-gdb.git] / gdbsupport / gdb-dlfcn.cc
blob1a8289ace74276041fbc2b44681b503a2780526b
1 /* Platform independent shared object routines for GDB.
3 Copyright (C) 2011-2024 Free Software Foundation, Inc.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
20 #include "gdb-dlfcn.h"
22 #ifdef HAVE_DLFCN_H
23 #include <dlfcn.h>
24 #elif __MINGW32__
25 #include <windows.h>
26 #else
27 /* Unsupported configuration. */
28 #define NO_SHARED_LIB
29 #endif
31 #ifdef NO_SHARED_LIB
33 gdb_dlhandle_up
34 gdb_dlopen (const char *filename)
36 gdb_assert_not_reached ("gdb_dlopen should not be called on this platform.");
39 void *
40 gdb_dlsym (const gdb_dlhandle_up &handle, const char *symbol)
42 gdb_assert_not_reached ("gdb_dlsym should not be called on this platform.");
45 void
46 dlclose_deleter::operator() (void *handle) const
48 gdb_assert_not_reached ("gdb_dlclose should not be called on this platform.");
51 int
52 is_dl_available (void)
54 return 0;
57 #else /* NO_SHARED_LIB */
59 gdb_dlhandle_up
60 gdb_dlopen (const char *filename)
62 void *result;
63 #ifdef HAVE_DLFCN_H
64 result = dlopen (filename, RTLD_NOW);
65 #elif __MINGW32__
66 result = (void *) LoadLibrary (filename);
67 #endif
68 if (result != NULL)
69 return gdb_dlhandle_up (result);
71 #ifdef HAVE_DLFCN_H
72 error (_("Could not load %s: %s"), filename, dlerror());
73 #else
75 LPVOID buffer;
76 DWORD dw;
78 dw = GetLastError();
80 FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |
81 FORMAT_MESSAGE_IGNORE_INSERTS,
82 NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
83 (LPTSTR) &buffer,
84 0, NULL);
86 error (_("Could not load %s: %s"), filename, (char *) buffer);
88 #endif
91 void *
92 gdb_dlsym (const gdb_dlhandle_up &handle, const char *symbol)
94 #ifdef HAVE_DLFCN_H
95 return dlsym (handle.get (), symbol);
96 #elif __MINGW32__
97 return (void *) GetProcAddress ((HMODULE) handle.get (), symbol);
98 #endif
101 void
102 dlclose_deleter::operator() (void *handle) const
104 #ifdef HAVE_DLFCN_H
105 dlclose (handle);
106 #elif __MINGW32__
107 FreeLibrary ((HMODULE) handle);
108 #endif
112 is_dl_available (void)
114 return 1;
117 #endif /* NO_SHARED_LIB */