aboutsummaryrefslogtreecommitdiff
path: root/ld/plugin.c
diff options
context:
space:
mode:
authorDave Korn <dave.korn@artimi.com>2010-10-15 16:21:41 +0000
committerDave Korn <dave.korn@artimi.com>2010-10-15 16:21:41 +0000
commit3917d5d5ca1bed255ee9bd0a0b38360505ce5b4c (patch)
tree2cd98ae08c668c0f8121c6421d40f1e68f3a6697 /ld/plugin.c
parentd4cb7acdd8134607c321fc33c91696d672f49b1d (diff)
downloadgdb-3917d5d5ca1bed255ee9bd0a0b38360505ce5b4c.zip
gdb-3917d5d5ca1bed255ee9bd0a0b38360505ce5b4c.tar.gz
gdb-3917d5d5ca1bed255ee9bd0a0b38360505ce5b4c.tar.bz2
Provide win32-based dlapi replacements on windows platforms without dlfcn.h.
ld/ChangeLog: * configure.in: If <dlfcn.h> can't be found, try for <Windows.h> * configure: Regenerate. * config.in: Likewise. * plugin.c [!HAVE_DLFCN_H && HAVE_WINDOWS_H] (dlopen): Provide trival LoadLibrary-based replacement for Windows systems. [!HAVE_DLFCN_H && HAVE_WINDOWS_H] (dlsym): Likewise trivial replacement based on GetProcAddress. [!HAVE_DLFCN_H && HAVE_WINDOWS_H] (dlsym): Likewise FreeLibrary. * sysdep.h: Don't infer presence of <dlfcn.h> from ENABLE_PLUGINS anymore, use its own guard.
Diffstat (limited to 'ld/plugin.c')
-rw-r--r--ld/plugin.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/ld/plugin.c b/ld/plugin.c
index 0c88ef8..c1961c5 100644
--- a/ld/plugin.c
+++ b/ld/plugin.c
@@ -32,6 +32,9 @@
#include "plugin.h"
#include "plugin-api.h"
#include "elf-bfd.h"
+#if !defined (HAVE_DLFCN_H) && defined (HAVE_WINDOWS_H)
+#include <Windows.h>
+#endif
/* The suffix to append to the name of the real (claimed) object file
when generating a dummy BFD to hold the IR symbols sent from the
@@ -128,6 +131,31 @@ static const enum ld_plugin_tag tv_header_tags[] =
/* How many entries in the constant leading part of the tv array. */
static const size_t tv_header_size = ARRAY_SIZE (tv_header_tags);
+#if !defined (HAVE_DLFCN_H) && defined (HAVE_WINDOWS_H)
+
+#define RTLD_NOW 0 /* Dummy value. */
+
+static void *
+dlopen (const char *file, int mode ATTRIBUTE_UNUSED)
+{
+ return LoadLibrary (file);
+}
+
+static void *
+dlsym (void *handle, const char *name)
+{
+ return GetProcAddress (handle, name);
+}
+
+static int
+dlclose (void *handle)
+{
+ FreeLibrary (handle);
+ return 0;
+}
+
+#endif /* !defined (HAVE_DLFCN_H) && defined (HAVE_WINDOWS_H) */
+
/* Helper function for exiting with error status. */
static int
set_plugin_error (const char *plugin)