summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Munro2022-08-04 21:12:45 +0000
committerThomas Munro2022-08-04 21:12:45 +0000
commitca1e85513e1c92afb80a74935cbbb6f7e4a3ccf9 (patch)
tree30f8c430f3f63b856fda4e5f3553ec4fb04577e3
parent87e22f675fd81ba1d96b0b9a34bbf26d5ec532d5 (diff)
Remove configure probe for dlopen, and refactor.
dlopen() is in SUSv2 and all targeted Unix systems have it. We still need replacement functions for Windows, but we don't need a configure probe for that. Since it's no longer needed by other operating systems, rename dlopen.c to win32dlopen.c and move the declarations into win32_port.h. Likewise, the macros RTLD_NOW and RTLD_GLOBAL now only need to be defined on Windows, since all targeted Unix systems have 'em. Reviewed-by: Tom Lane <[email protected]> Reviewed-by: Andres Freund <[email protected]> Discussion: https://postgr.es/m/CA+hUKGJ3LHeP9w5Fgzdr4G8AnEtJ=z=p6hGDEm4qYGEUX5B6fQ@mail.gmail.com
-rwxr-xr-xconfigure43
-rw-r--r--configure.ac4
-rw-r--r--src/backend/utils/fmgr/dfmgr.c4
-rw-r--r--src/include/pg_config.h.in11
-rw-r--r--src/include/port.h23
-rw-r--r--src/include/port/win32_port.h9
-rw-r--r--src/port/win32dlopen.c (renamed from src/port/dlopen.c)10
-rw-r--r--src/tools/msvc/Mkvcbuild.pm3
-rw-r--r--src/tools/msvc/Solution.pm3
9 files changed, 23 insertions, 87 deletions
diff --git a/configure b/configure
index c5bc382395..2583a04a87 100755
--- a/configure
+++ b/configure
@@ -16618,30 +16618,6 @@ cat >>confdefs.h <<_ACEOF
_ACEOF
-ac_fn_c_check_decl "$LINENO" "RTLD_GLOBAL" "ac_cv_have_decl_RTLD_GLOBAL" "#include <dlfcn.h>
-"
-if test "x$ac_cv_have_decl_RTLD_GLOBAL" = xyes; then :
- ac_have_decl=1
-else
- ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_RTLD_GLOBAL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "RTLD_NOW" "ac_cv_have_decl_RTLD_NOW" "#include <dlfcn.h>
-"
-if test "x$ac_cv_have_decl_RTLD_NOW" = xyes; then :
- ac_have_decl=1
-else
- ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_RTLD_NOW $ac_have_decl
-_ACEOF
-
-
ac_fn_c_check_type "$LINENO" "struct sockaddr_in6" "ac_cv_type_struct_sockaddr_in6" "$ac_includes_default
#include <netinet/in.h>
"
@@ -16687,19 +16663,6 @@ $as_echo "#define HAVE_PS_STRINGS 1" >>confdefs.h
fi
-ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
-if test "x$ac_cv_func_dlopen" = xyes; then :
- $as_echo "#define HAVE_DLOPEN 1" >>confdefs.h
-
-else
- case " $LIBOBJS " in
- *" dlopen.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS dlopen.$ac_objext"
- ;;
-esac
-
-fi
-
ac_fn_c_check_func "$LINENO" "explicit_bzero" "ac_cv_func_explicit_bzero"
if test "x$ac_cv_func_explicit_bzero" = xyes; then :
$as_echo "#define HAVE_EXPLICIT_BZERO 1" >>confdefs.h
@@ -17079,6 +17042,12 @@ esac
esac
case " $LIBOBJS " in
+ *" win32dlopen.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS win32dlopen.$ac_objext"
+ ;;
+esac
+
+ case " $LIBOBJS " in
*" win32env.$ac_objext "* ) ;;
*) LIBOBJS="$LIBOBJS win32env.$ac_objext"
;;
diff --git a/configure.ac b/configure.ac
index 61d0dd5d58..84bdaeb46c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1858,8 +1858,6 @@ AC_CHECK_DECLS([pwritev], [], [AC_LIBOBJ(pwritev)], [#include <sys/uio.h>])
# This is probably only present on macOS, but may as well check always
AC_CHECK_DECLS(F_FULLFSYNC, [], [], [#include <fcntl.h>])
-AC_CHECK_DECLS([RTLD_GLOBAL, RTLD_NOW], [], [], [#include <dlfcn.h>])
-
AC_CHECK_TYPE([struct sockaddr_in6],
[AC_DEFINE(HAVE_IPV6, 1, [Define to 1 if you have support for IPv6.])],
[],
@@ -1880,7 +1878,6 @@ if test "$pgac_cv_var_PS_STRINGS" = yes ; then
fi
AC_REPLACE_FUNCS(m4_normalize([
- dlopen
explicit_bzero
getopt
getpeereid
@@ -1962,6 +1959,7 @@ if test "$PORTNAME" = "win32"; then
AC_LIBOBJ(kill)
AC_LIBOBJ(open)
AC_LIBOBJ(system)
+ AC_LIBOBJ(win32dlopen)
AC_LIBOBJ(win32env)
AC_LIBOBJ(win32error)
AC_LIBOBJ(win32ntdll)
diff --git a/src/backend/utils/fmgr/dfmgr.c b/src/backend/utils/fmgr/dfmgr.c
index 7f9ea97280..08fd7e1264 100644
--- a/src/backend/utils/fmgr/dfmgr.c
+++ b/src/backend/utils/fmgr/dfmgr.c
@@ -16,7 +16,7 @@
#include <sys/stat.h>
-#ifdef HAVE_DLOPEN
+#ifndef WIN32
#include <dlfcn.h>
/*
@@ -28,7 +28,7 @@
#undef bool
#endif
#endif
-#endif /* HAVE_DLOPEN */
+#endif /* !WIN32 */
#include "fmgr.h"
#include "lib/stringinfo.h"
diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in
index f9618e1986..ab812bca89 100644
--- a/src/include/pg_config.h.in
+++ b/src/include/pg_config.h.in
@@ -141,14 +141,6 @@
don't. */
#undef HAVE_DECL_PWRITEV
-/* Define to 1 if you have the declaration of `RTLD_GLOBAL', and to 0 if you
- don't. */
-#undef HAVE_DECL_RTLD_GLOBAL
-
-/* Define to 1 if you have the declaration of `RTLD_NOW', and to 0 if you
- don't. */
-#undef HAVE_DECL_RTLD_NOW
-
/* Define to 1 if you have the declaration of `strlcat', and to 0 if you
don't. */
#undef HAVE_DECL_STRLCAT
@@ -169,9 +161,6 @@
don't. */
#undef HAVE_DECL_STRTOULL
-/* Define to 1 if you have the `dlopen' function. */
-#undef HAVE_DLOPEN
-
/* Define to 1 if you have the <editline/history.h> header file. */
#undef HAVE_EDITLINE_HISTORY_H
diff --git a/src/include/port.h b/src/include/port.h
index d39b04141f..323df8f9ed 100644
--- a/src/include/port.h
+++ b/src/include/port.h
@@ -455,29 +455,6 @@ extern int setenv(const char *name, const char *value, int overwrite);
extern int unsetenv(const char *name);
#endif
-#ifndef HAVE_DLOPEN
-extern void *dlopen(const char *file, int mode);
-extern void *dlsym(void *handle, const char *symbol);
-extern int dlclose(void *handle);
-extern char *dlerror(void);
-#endif
-
-/*
- * In some older systems, the RTLD_NOW flag isn't defined and the mode
- * argument to dlopen must always be 1.
- */
-#if !HAVE_DECL_RTLD_NOW
-#define RTLD_NOW 1
-#endif
-
-/*
- * The RTLD_GLOBAL flag is wanted if available, but it doesn't exist
- * everywhere. If it doesn't exist, set it to 0 so it has no effect.
- */
-#if !HAVE_DECL_RTLD_GLOBAL
-#define RTLD_GLOBAL 0
-#endif
-
/* thread.c */
#ifndef WIN32
extern bool pg_get_user_name(uid_t user_id, char *buffer, size_t buflen);
diff --git a/src/include/port/win32_port.h b/src/include/port/win32_port.h
index 4de5bf3bf6..a48eed53eb 100644
--- a/src/include/port/win32_port.h
+++ b/src/include/port/win32_port.h
@@ -503,6 +503,15 @@ extern int pgwin32_ReserveSharedMemoryRegion(HANDLE);
/* in backend/port/win32/crashdump.c */
extern void pgwin32_install_crashdump_handler(void);
+/* in port/win32dlopen.c */
+extern void *dlopen(const char *file, int mode);
+extern void *dlsym(void *handle, const char *symbol);
+extern int dlclose(void *handle);
+extern char *dlerror(void);
+
+#define RTLD_NOW 1
+#define RTLD_GLOBAL 0
+
/* in port/win32error.c */
extern void _dosmaperr(unsigned long);
diff --git a/src/port/dlopen.c b/src/port/win32dlopen.c
index 6ff9f4bf64..2657537c29 100644
--- a/src/port/dlopen.c
+++ b/src/port/win32dlopen.c
@@ -1,22 +1,20 @@
/*-------------------------------------------------------------------------
*
- * dlopen.c
- * dynamic loader for platforms without dlopen()
+ * win32dlopen.c
+ * dynamic loader for Windows
*
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
*
* IDENTIFICATION
- * src/port/dlopen.c
+ * src/port/win32dlopen.c
*
*-------------------------------------------------------------------------
*/
#include "c.h"
-#if defined(WIN32)
-
static char last_dyn_error[512];
static void
@@ -93,5 +91,3 @@ dlopen(const char *file, int mode)
last_dyn_error[0] = 0;
return (void *) h;
}
-
-#endif
diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index c935f776e5..266f98e2ed 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -103,11 +103,12 @@ sub mkvcbuild
getpeereid.c getrusage.c inet_aton.c
getaddrinfo.c gettimeofday.c inet_net_ntop.c kill.c open.c
snprintf.c strlcat.c strlcpy.c dirmod.c noblock.c path.c
- dirent.c dlopen.c getopt.c getopt_long.c link.c
+ dirent.c getopt.c getopt_long.c link.c
pread.c preadv.c pwrite.c pwritev.c pg_bitutils.c
pg_strong_random.c pgcheckdir.c pgmkdirp.c pgsleep.c pgstrcasecmp.c
pqsignal.c mkdtemp.c qsort.c qsort_arg.c bsearch_arg.c quotes.c system.c
strerror.c tar.c
+ win32dlopen.c
win32env.c win32error.c win32ntdll.c
win32security.c win32setlocale.c win32stat.c);
diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm
index b09872e018..a7a5c31a5b 100644
--- a/src/tools/msvc/Solution.pm
+++ b/src/tools/msvc/Solution.pm
@@ -244,14 +244,11 @@ sub GenerateFiles
HAVE_DECL_POSIX_FADVISE => 0,
HAVE_DECL_PREADV => 0,
HAVE_DECL_PWRITEV => 0,
- HAVE_DECL_RTLD_GLOBAL => 0,
- HAVE_DECL_RTLD_NOW => 0,
HAVE_DECL_STRLCAT => 0,
HAVE_DECL_STRLCPY => 0,
HAVE_DECL_STRNLEN => 1,
HAVE_DECL_STRTOLL => 1,
HAVE_DECL_STRTOULL => 1,
- HAVE_DLOPEN => undef,
HAVE_EDITLINE_HISTORY_H => undef,
HAVE_EDITLINE_READLINE_H => undef,
HAVE_EXECINFO_H => undef,