mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-25 16:57:52 +00:00
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.
This commit is contained in:
28
ld/plugin.c
28
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)
|
||||
|
||||
Reference in New Issue
Block a user