diff options
author | Alain Frisch <alain@frisch.fr> | 2007-11-06 15:16:56 +0000 |
---|---|---|
committer | Alain Frisch <alain@frisch.fr> | 2007-11-06 15:16:56 +0000 |
commit | 3958a92c729c6588bdd4a39d6d8bc5dadb00b3de (patch) | |
tree | d1cb483d1cfed72c42cd3311ae735784bfbe5d13 /byterun/unix.c | |
parent | 2a99b8737bd88e4af552da873ce904a684c631ae (diff) |
Merge the natdynlink branch into HEAD.
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@8477 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
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"; |