From c87bc779d4e9f109e92f8b8f1dfad5d6739f8e97 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Mon, 14 May 2001 21:45:53 +0000
Subject: [PATCH] Use RTLD_GLOBAL flag for dlopen-style dynamic loaders.

---
 src/backend/port/dynloader/aix.h      |  4 ++--
 src/backend/port/dynloader/bsdi.c     |  4 ++--
 src/backend/port/dynloader/bsdi.h     | 16 ++++++++--------
 src/backend/port/dynloader/dgux.h     |  4 ++--
 src/backend/port/dynloader/freebsd.h  |  4 ++--
 src/backend/port/dynloader/irix5.h    |  2 +-
 src/backend/port/dynloader/linux.h    | 21 ++++++++++-----------
 src/backend/port/dynloader/netbsd.h   |  4 ++--
 src/backend/port/dynloader/openbsd.h  |  4 ++--
 src/backend/port/dynloader/osf.h      |  4 ++--
 src/backend/port/dynloader/sco.h      |  4 ++--
 src/backend/port/dynloader/solaris.h  |  4 ++--
 src/backend/port/dynloader/sunos4.h   |  4 ++--
 src/backend/port/dynloader/svr4.h     |  4 ++--
 src/backend/port/dynloader/univel.h   |  2 +-
 src/backend/port/dynloader/unixware.h |  2 +-
 src/backend/port/dynloader/win.h      |  2 +-
 src/template/bsdi                     |  4 ----
 18 files changed, 44 insertions(+), 49 deletions(-)

diff --git a/src/backend/port/dynloader/aix.h b/src/backend/port/dynloader/aix.h
index f34d07b065..a0320727f3 100644
--- a/src/backend/port/dynloader/aix.h
+++ b/src/backend/port/dynloader/aix.h
@@ -1,5 +1,5 @@
 /*
- * $Id: aix.h,v 1.5 2001/03/22 03:59:42 momjian Exp $
+ * $Id: aix.h,v 1.6 2001/05/14 21:45:53 petere Exp $
  *
  * @(#)dlfcn.h	1.4 revision of 95/04/25  09:36:52
  * This is an unpublished work copyright (c) 1992 HELIOS Software GmbH
@@ -58,7 +58,7 @@ extern		"C"
 
 #include "utils/dynamic_loader.h"
 
-#define  pg_dlopen(f)	dlopen(f, RTLD_LAZY)
+#define  pg_dlopen(f)	dlopen((f), RTLD_LAZY | RTLD_GLOBAL)
 #define  pg_dlsym	dlsym
 #define  pg_dlclose dlclose
 #define  pg_dlerror dlerror
diff --git a/src/backend/port/dynloader/bsdi.c b/src/backend/port/dynloader/bsdi.c
index bbedee3d0c..e974330e58 100644
--- a/src/backend/port/dynloader/bsdi.c
+++ b/src/backend/port/dynloader/bsdi.c
@@ -15,7 +15,7 @@
  *
  *-------------------------------------------------------------------------
  */
-#ifdef PRE_BSDI_2_1
+#ifndef HAVE_DLOPEN
 #include "postgres.h"
 
 extern char pg_pathname[];
@@ -95,4 +95,4 @@ pg_dlerror()
 	return dld_strerror(dld_errno);
 }
 
-#endif
+#endif /* not HAVE_DLOPEN */
diff --git a/src/backend/port/dynloader/bsdi.h b/src/backend/port/dynloader/bsdi.h
index 56f3443665..834dff0d70 100644
--- a/src/backend/port/dynloader/bsdi.h
+++ b/src/backend/port/dynloader/bsdi.h
@@ -1,7 +1,6 @@
 /*-------------------------------------------------------------------------
  *
- * port_protos.h
- *	  port-specific prototypes for SunOS 4
+ * Dynamic loader interface for BSD/OS
  *
  *
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
@@ -16,19 +15,20 @@
 
 #include "utils/dynamic_loader.h"
 
-/* dynloader.c */
 
-#ifndef  PRE_BSDI_2_1
+#ifdef HAVE_DLOPEN
+
 #include <dlfcn.h>
-#define		  pg_dlopen(f)	  dlopen(f, RTLD_LAZY)
+#define		  pg_dlopen(f)	  dlopen((f), RTLD_LAZY | RTLD_GLOBAL)
 #define		  pg_dlsym		  dlsym
 #define		  pg_dlclose	  dlclose
 #define		  pg_dlerror	  dlerror
-#else
+
+#else /* not HAVE_DLOPEN */
+
 #define pg_dlsym(handle, funcname)	  ((PGFunction) dld_get_func((funcname)))
 #define pg_dlclose(handle)			  ({ dld_unlink_by_file(handle, 1); free(handle); })
-#endif
 
-/* port.c */
+#endif /* not HAVE_DLOPEN */
 
 #endif	 /* PORT_PROTOS_H */
diff --git a/src/backend/port/dynloader/dgux.h b/src/backend/port/dynloader/dgux.h
index 7eb676687d..15fb78a90b 100644
--- a/src/backend/port/dynloader/dgux.h
+++ b/src/backend/port/dynloader/dgux.h
@@ -5,7 +5,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: dgux.h,v 1.9 2001/02/10 02:31:26 tgl Exp $
+ * $Id: dgux.h,v 1.10 2001/05/14 21:45:53 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -23,7 +23,7 @@
  * library as the file to be dynamically loaded.
  *
  */
-#define pg_dlopen(f)  dlopen(f,1)
+#define pg_dlopen(f)  dlopen((f), RTLD_LAZY | RTLD_GLOBAL)
 #define pg_dlsym		dlsym
 #define pg_dlclose		dlclose
 #define pg_dlerror		dlerror
diff --git a/src/backend/port/dynloader/freebsd.h b/src/backend/port/dynloader/freebsd.h
index 4b66585834..fe75a47f0c 100644
--- a/src/backend/port/dynloader/freebsd.h
+++ b/src/backend/port/dynloader/freebsd.h
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: freebsd.h,v 1.8 2001/02/10 02:31:26 tgl Exp $
+ * $Id: freebsd.h,v 1.9 2001/05/14 21:45:53 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -33,7 +33,7 @@
  * begin with an underscore is fairly tricky, and some versions of
  * NetBSD (like 1.0, and 1.0A pre June 1995) have no dlerror.)
  */
-#define		   pg_dlopen(f)    BSD44_derived_dlopen(f, 1)
+#define		   pg_dlopen(f)    BSD44_derived_dlopen((f), RTLD_LAZY | RTLD_GLOBAL)
 #define		   pg_dlsym		   BSD44_derived_dlsym
 #define		   pg_dlclose	   BSD44_derived_dlclose
 #define		   pg_dlerror	   BSD44_derived_dlerror
diff --git a/src/backend/port/dynloader/irix5.h b/src/backend/port/dynloader/irix5.h
index 355ce1b87d..a4a5d134b6 100644
--- a/src/backend/port/dynloader/irix5.h
+++ b/src/backend/port/dynloader/irix5.h
@@ -26,7 +26,7 @@
  * library as the file to be dynamically loaded.
  *
  */
-#define pg_dlopen(f)	dlopen(f,1)
+#define pg_dlopen(f)	dlopen((f), RTLD_LAZY | RTLD_GLOBAL)
 #define pg_dlsym		dlsym
 #define pg_dlclose		dlclose
 #define pg_dlerror		dlerror
diff --git a/src/backend/port/dynloader/linux.h b/src/backend/port/dynloader/linux.h
index 64807b036f..d6873763b4 100644
--- a/src/backend/port/dynloader/linux.h
+++ b/src/backend/port/dynloader/linux.h
@@ -1,13 +1,12 @@
 /*-------------------------------------------------------------------------
  *
- * port_protos.h
- *	  port-specific prototypes for Linux
+ * Dynamic loader interface for Linux
  *
  *
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: linux.h,v 1.11 2001/02/10 02:31:26 tgl Exp $
+ * $Id: linux.h,v 1.12 2001/05/14 21:45:53 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -15,13 +14,13 @@
 #define PORT_PROTOS_H
 
 #include "utils/dynamic_loader.h"
-#ifdef __ELF__
+#ifdef HAVE_DLOPEN
 #include <dlfcn.h>
 #endif
 
-/* dynloader.c */
 
-#ifndef __ELF__
+#ifndef HAVE_DLOPEN
+
 #ifndef HAVE_DLD_H
 #define pg_dlsym(handle, funcname)		(NULL)
 #define pg_dlclose(handle)			   ({})
@@ -29,14 +28,14 @@
 #define pg_dlsym(handle, funcname)		((PGFunction) dld_get_func((funcname)))
 #define pg_dlclose(handle)			   ({ dld_unlink_by_file(handle, 1); free(handle); })
 #endif
-#else
-/* #define		pg_dlopen(f)	dlopen(f, 1) */
-#define pg_dlopen(f)	dlopen(f, 2)
+
+#else /* HAVE_DLOPEN */
+
+#define pg_dlopen(f)	dlopen((f), RTLD_LAZY | RTLD_GLOBAL)
 #define pg_dlsym		dlsym
 #define pg_dlclose		dlclose
 #define pg_dlerror		dlerror
-#endif
 
-/* port.c */
+#endif /* HAVE_DLOPEN */
 
 #endif	 /* PORT_PROTOS_H */
diff --git a/src/backend/port/dynloader/netbsd.h b/src/backend/port/dynloader/netbsd.h
index a4c13b322c..21b434e872 100644
--- a/src/backend/port/dynloader/netbsd.h
+++ b/src/backend/port/dynloader/netbsd.h
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: netbsd.h,v 1.3 2001/02/10 02:31:26 tgl Exp $
+ * $Id: netbsd.h,v 1.4 2001/05/14 21:45:53 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -33,7 +33,7 @@
  * begin with an underscore is fairly tricky, and some versions of
  * NetBSD (like 1.0, and 1.0A pre June 1995) have no dlerror.)
  */
-#define		   pg_dlopen(f)    BSD44_derived_dlopen(f, 1)
+#define		   pg_dlopen(f)    BSD44_derived_dlopen((f), RTLD_LAZY | RTLD_GLOBAL)
 #define		   pg_dlsym		   BSD44_derived_dlsym
 #define		   pg_dlclose	   BSD44_derived_dlclose
 #define		   pg_dlerror	   BSD44_derived_dlerror
diff --git a/src/backend/port/dynloader/openbsd.h b/src/backend/port/dynloader/openbsd.h
index 307edf97cc..155600e697 100644
--- a/src/backend/port/dynloader/openbsd.h
+++ b/src/backend/port/dynloader/openbsd.h
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: openbsd.h,v 1.3 2001/02/10 02:31:26 tgl Exp $
+ * $Id: openbsd.h,v 1.4 2001/05/14 21:45:53 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -33,7 +33,7 @@
  * begin with an underscore is fairly tricky, and some versions of
  * NetBSD (like 1.0, and 1.0A pre June 1995) have no dlerror.)
  */
-#define		   pg_dlopen(f)    BSD44_derived_dlopen(f, 1)
+#define		   pg_dlopen(f)    BSD44_derived_dlopen((f), RTLD_LAZY | RTLD_GLOBAL)
 #define		   pg_dlsym		   BSD44_derived_dlsym
 #define		   pg_dlclose	   BSD44_derived_dlclose
 #define		   pg_dlerror	   BSD44_derived_dlerror
diff --git a/src/backend/port/dynloader/osf.h b/src/backend/port/dynloader/osf.h
index 9f5cdd5c58..61961b02d6 100644
--- a/src/backend/port/dynloader/osf.h
+++ b/src/backend/port/dynloader/osf.h
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: osf.h,v 1.2 2001/01/24 19:43:04 momjian Exp $
+ * $Id: osf.h,v 1.3 2001/05/14 21:45:53 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -28,7 +28,7 @@
  * library as the file to be dynamically loaded.
  *
  */
-#define  pg_dlopen(f)	dlopen(f, RTLD_LAZY)
+#define  pg_dlopen(f)	dlopen((f), RTLD_LAZY | RTLD_GLOBAL)
 #define  pg_dlsym(h, f) ((PGFunction) dlsym(h, f))
 #define  pg_dlclose(h)	dlclose(h)
 #define  pg_dlerror()	dlerror()
diff --git a/src/backend/port/dynloader/sco.h b/src/backend/port/dynloader/sco.h
index 584799f52b..70ead4fa8d 100644
--- a/src/backend/port/dynloader/sco.h
+++ b/src/backend/port/dynloader/sco.h
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: sco.h,v 1.7 2001/02/10 02:31:26 tgl Exp $
+ * $Id: sco.h,v 1.8 2001/05/14 21:45:53 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -26,7 +26,7 @@
  * library as the file to be dynamically loaded.
  *
  */
-#define pg_dlopen(f)	dlopen(f,1)
+#define pg_dlopen(f)	dlopen((f), RTLD_LAZY | RTLD_GLOBAL)
 #define pg_dlsym		dlsym
 #define pg_dlclose		dlclose
 #define pg_dlerror		dlerror
diff --git a/src/backend/port/dynloader/solaris.h b/src/backend/port/dynloader/solaris.h
index c5f6ec1874..e4b81f435f 100644
--- a/src/backend/port/dynloader/solaris.h
+++ b/src/backend/port/dynloader/solaris.h
@@ -1,4 +1,4 @@
-/* $Header: /cvsroot/pgsql/src/backend/port/dynloader/solaris.h,v 1.3 2001/03/22 03:59:43 momjian Exp $ */
+/* $Header: /cvsroot/pgsql/src/backend/port/dynloader/solaris.h,v 1.4 2001/05/14 21:45:53 petere Exp $ */
 
 #ifndef DYNLOADER_SOLARIS_H
 #define DYNLOADER_SOLARIS_H
@@ -6,7 +6,7 @@
 #include <dlfcn.h>
 #include "utils/dynamic_loader.h"
 
-#define pg_dlopen(f)	dlopen(f,1)
+#define pg_dlopen(f)	dlopen((f), RTLD_LAZY | RTLD_GLOBAL)
 #define pg_dlsym		dlsym
 #define pg_dlclose		dlclose
 #define pg_dlerror		dlerror
diff --git a/src/backend/port/dynloader/sunos4.h b/src/backend/port/dynloader/sunos4.h
index e915a85086..49040c1dea 100644
--- a/src/backend/port/dynloader/sunos4.h
+++ b/src/backend/port/dynloader/sunos4.h
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: sunos4.h,v 1.7 2001/02/10 02:31:26 tgl Exp $
+ * $Id: sunos4.h,v 1.8 2001/05/14 21:45:53 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -26,7 +26,7 @@
  * library as the file to be dynamically loaded.
  *
  */
-#define pg_dlopen(f)	dlopen(f, 1)
+#define pg_dlopen(f)	dlopen((f), RTLD_LAZY | RTLD_GLOBAL)
 #define pg_dlsym		dlsym
 #define pg_dlclose		dlclose
 #define pg_dlerror		dlerror
diff --git a/src/backend/port/dynloader/svr4.h b/src/backend/port/dynloader/svr4.h
index 6e151d2e49..96c39ea2ec 100644
--- a/src/backend/port/dynloader/svr4.h
+++ b/src/backend/port/dynloader/svr4.h
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: svr4.h,v 1.7 2001/02/10 02:31:26 tgl Exp $
+ * $Id: svr4.h,v 1.8 2001/05/14 21:45:53 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -26,7 +26,7 @@
  * library as the file to be dynamically loaded.
  *
  */
-#define pg_dlopen(f)	dlopen(f,RTLD_LAZY)
+#define pg_dlopen(f)	dlopen((f), RTLD_LAZY | RTLD_GLOBAL)
 #define pg_dlsym		dlsym
 #define pg_dlclose		dlclose
 #define pg_dlerror		dlerror
diff --git a/src/backend/port/dynloader/univel.h b/src/backend/port/dynloader/univel.h
index d490e25e6b..83f0e2c82a 100644
--- a/src/backend/port/dynloader/univel.h
+++ b/src/backend/port/dynloader/univel.h
@@ -26,7 +26,7 @@
  * library as the file to be dynamically loaded.
  *
   */
-#define pg_dlopen(f)	dlopen(f,RTLD_LAZY)
+#define pg_dlopen(f)	dlopen((f), RTLD_LAZY | RTLD_GLOBAL)
 #define pg_dlsym		dlsym
 #define pg_dlclose		dlclose
 #define pg_dlerror		dlerror
diff --git a/src/backend/port/dynloader/unixware.h b/src/backend/port/dynloader/unixware.h
index d52842cede..5c1b04cc69 100644
--- a/src/backend/port/dynloader/unixware.h
+++ b/src/backend/port/dynloader/unixware.h
@@ -26,7 +26,7 @@
  * library as the file to be dynamically loaded.
  *
   */
-#define pg_dlopen(f)	dlopen(f,RTLD_LAZY)
+#define pg_dlopen(f)	dlopen((f), RTLD_LAZY | RTLD_GLOBAL)
 #define pg_dlsym		dlsym
 #define pg_dlclose		dlclose
 #define pg_dlerror		dlerror
diff --git a/src/backend/port/dynloader/win.h b/src/backend/port/dynloader/win.h
index 5cabfab3fa..d0d33189b7 100644
--- a/src/backend/port/dynloader/win.h
+++ b/src/backend/port/dynloader/win.h
@@ -26,7 +26,7 @@
  * library as the file to be dynamically loaded.
  *
   */
-#define pg_dlopen(f)		dlopen(f,1)
+#define pg_dlopen(f)		dlopen((f), RTLD_LAZY | RTLD_GLOBAL)
 #define pg_dlsym		dlsym
 #define pg_dlclose		dlclose
 #define pg_dlerror		dlerror
diff --git a/src/template/bsdi b/src/template/bsdi
index d6698e7772..967d055a54 100644
--- a/src/template/bsdi
+++ b/src/template/bsdi
@@ -4,10 +4,6 @@ case $host_cpu in
   i?86)  CFLAGS="$CFLAGS -m486";;
 esac
 
-case $host_os in
-  bsdi2.0) CFLAGS="$CFLAGS -DPRE_BSDI_2_1";;
-esac
-
 case $host_os in
   bsdi2.0 | bsdi2.1 | bsdi3*)
     CC=gcc2
-- 
2.24.1