diff options
Diffstat (limited to 'byterun/unix.c')
-rw-r--r-- | byterun/unix.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/byterun/unix.c b/byterun/unix.c index 3b8bb22e6..7343a0957 100644 --- a/byterun/unix.c +++ b/byterun/unix.c @@ -25,6 +25,8 @@ #ifdef SUPPORT_DYNAMIC_LINKING #ifdef HAS_NSLINKMODULE #include <mach-o/dyld.h> +#elif defined(__CYGWIN32__) +#include "flexdll.h" #else #include <dlfcn.h> #endif @@ -263,6 +265,11 @@ void * caml_dlsym(void * handle, char * name) else return NULL; } +void * caml_globalsym(char * name) +{ + return NULL; +} + char * caml_dlerror(void) { NSLinkEditErrors c; @@ -273,6 +280,36 @@ char * caml_dlerror(void) return (char *) errorString; } +#elif defined(__CYGWIN32__) +/* Use flexdll */ + +void * caml_dlopen(char * libname, int for_execution) +{ + int flags = FLEXDLL_RTLD_GLOBAL; + if (!for_execution) flags |= FLEXDLL_RTLD_NOEXEC; + return flexdll_dlopen(libname, flags); +} + +void caml_dlclose(void * handle) +{ + flexdll_dlclose(handle); +} + +void * caml_dlsym(void * handle, char * name) +{ + return flexdll_dlsym(handle, name); +} + +void * caml_globalsym(char * name) +{ + return flexdll_dlsym(flexdll_dlopen(NULL,0), name); +} + +char * caml_dlerror(void) +{ + return flexdll_dlerror(); +} + #else /* Use normal dlopen */ @@ -304,6 +341,11 @@ void * caml_dlsym(void * handle, char * name) return dlsym(handle, name); } +void * caml_globalsym(char * name) +{ + return caml_dlsym(dlopen(NULL,RTLD_GLOBAL), name); +} + char * caml_dlerror(void) { return dlerror(); @@ -326,6 +368,11 @@ void * caml_dlsym(void * handle, char * name) return NULL; } +void * caml_globalsym(char * name) +{ + return NULL; +} + char * caml_dlerror(void) { return "dynamic loading not supported on this platform"; |