From 6fc4950f05d425378ca7d1f3237aa759c761a07d Mon Sep 17 00:00:00 2001
From: tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Mon, 14 Feb 2000 21:53:27 +0000
Subject: [PATCH] 	* 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: svn+ssh://gcc.gnu.org/svn/gcc/trunk@31970 138bc75d-0d04-0410-961f-82ee72b054a4
---
 boehm-gc/ChangeLog  |  6 ++++++
 boehm-gc/dyn_load.c | 26 ++++++++++++++++++++------
 boehm-gc/gc.h       |  4 ++++
 3 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/boehm-gc/ChangeLog b/boehm-gc/ChangeLog
index 180f111067f9..538a55c465f1 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 8c3ec4186c40..f44726bc833c 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 535ff63ac031..bd7fddf43914 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. */
-- 
GitLab