aboutsummaryrefslogtreecommitdiff
path: root/boehm-gc
diff options
context:
space:
mode:
authorTom Tromey <tromey@cygnus.com>2000-02-14 21:53:27 +0000
committerTom Tromey <tromey@cygnus.com>2000-02-14 21:53:27 +0000
commitc002c9af6958a41a8cb8d12682a7edd25bf51bcf (patch)
tree347e3b2add618ac89c250ec8658175ad538f1b65 /boehm-gc
parente3fc895cd974226abecac4a492d13878d4e240fc (diff)
* gc.h (dlopen): Define as GC_dlopen on Linux.
(GC_dlopen): Declare on Linux. * dyn_load.c (GC_dlopen): Define for Linux. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@31970 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'boehm-gc')
-rw-r--r--boehm-gc/ChangeLog6
-rw-r--r--boehm-gc/dyn_load.c26
-rw-r--r--boehm-gc/gc.h4
3 files changed, 30 insertions, 6 deletions
diff --git a/boehm-gc/ChangeLog b/boehm-gc/ChangeLog
index 180f111067f..538a55c465f 100644
--- a/boehm-gc/ChangeLog
+++ b/boehm-gc/ChangeLog
@@ -1,3 +1,9 @@
+2000-02-14 Tom Tromey <tromey@cygnus.com>
+
+ * gc.h (dlopen): Define as GC_dlopen on Linux.
+ (GC_dlopen): Declare on Linux.
+ * dyn_load.c (GC_dlopen): Define for Linux.
+
Fri Jan 28 17:13:20 2000 Anthony Green <green@cygnus.com>
* gcconfig.h (DATASTART): Add missing extern declaration
diff --git a/boehm-gc/dyn_load.c b/boehm-gc/dyn_load.c
index 8c3ec4186c4..f44726bc833 100644
--- a/boehm-gc/dyn_load.c
+++ b/boehm-gc/dyn_load.c
@@ -32,7 +32,7 @@
#include "gc_priv.h"
/* BTL: avoid circular redefinition of dlopen if SOLARIS_THREADS defined */
-# if defined(SOLARIS_THREADS) && defined(dlopen)
+# if (defined(SOLARIS_THREADS) || defined(LINUX_THREADS)) && defined(dlopen)
/* To support threads in Solaris, gc.h interposes on dlopen by */
/* defining "dlopen" to be "GC_dlopen", which is implemented below. */
/* However, both GC_FirstDLOpenedLinkMap() and GC_dlopen() use the */
@@ -190,11 +190,6 @@ void * GC_dlopen(const char *path, int mode)
}
# endif /* SOLARIS_THREADS */
-/* BTL: added to fix circular dlopen definition if SOLARIS_THREADS defined */
-# if defined(GC_must_restore_redefined_dlopen)
-# define dlopen GC_dlopen
-# endif
-
# ifndef USE_PROC_FOR_LIBRARIES
void GC_register_dynamic_libraries()
{
@@ -260,6 +255,25 @@ void GC_register_dynamic_libraries()
# endif /* !USE_PROC ... */
# endif /* SUNOS */
+#ifdef LINUX_THREADS
+#include <dlfcn.h>
+
+void * GC_dlopen(const char *path, int mode)
+{
+ void * result;
+
+ LOCK();
+ result = dlopen(path, mode);
+ UNLOCK();
+ return(result);
+}
+#endif /* LINUX_THREADS */
+
+/* BTL: added to fix circular dlopen definition if SOLARIS_THREADS defined */
+#if defined(GC_must_restore_redefined_dlopen)
+# define dlopen GC_dlopen
+#endif
+
#if defined(LINUX) && defined(__ELF__) || defined(SCO_ELF)
/* Dynamic loading code for Linux running ELF. Somewhat tested on
diff --git a/boehm-gc/gc.h b/boehm-gc/gc.h
index 535ff63ac03..bd7fddf4391 100644
--- a/boehm-gc/gc.h
+++ b/boehm-gc/gc.h
@@ -712,6 +712,10 @@ GC_API void (*GC_is_visible_print_proc)
# endif /* SOLARIS_THREADS */
+#if defined(LINUX_THREADS)
+ void * GC_dlopen(const char *path, int mode);
+# define dlopen GC_dlopen
+#endif
#if defined(IRIX_THREADS) || defined(LINUX_THREADS) || defined(HPUX_THREADS)
/* We treat these similarly. */