summaryrefslogtreecommitdiffstats
path: root/byterun/unix.c
diff options
context:
space:
mode:
authorAlain Frisch <alain@frisch.fr>2007-11-06 15:16:56 +0000
committerAlain Frisch <alain@frisch.fr>2007-11-06 15:16:56 +0000
commit3958a92c729c6588bdd4a39d6d8bc5dadb00b3de (patch)
treed1cb483d1cfed72c42cd3311ae735784bfbe5d13 /byterun/unix.c
parent2a99b8737bd88e4af552da873ce904a684c631ae (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.c47
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";