Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 842cb9f

Browse files
committed
Refactor dlopen() support
Nowadays, all platforms except Windows and older HP-UX have standard dlopen() support. So having a separate implementation per platform under src/backend/port/dynloader/ is a bit excessive. Instead, treat dlopen() like other library functions that happen to be missing sometimes and put a replacement implementation under src/port/. Discussion: https://www.postgresql.org/message-id/flat/e11a49cb-570a-60b7-707d-7084c8de0e61%402ndquadrant.com#54e735ae37476a121abb4e33c2549b03
1 parent ac27c74 commit 842cb9f

37 files changed

+172
-540
lines changed

configure

+39-4
Original file line numberDiff line numberDiff line change
@@ -15060,7 +15060,7 @@ fi
1506015060
LIBS_including_readline="$LIBS"
1506115061
LIBS=`echo "$LIBS" | sed -e 's/-ledit//g' -e 's/-lreadline//g'`
1506215062

15063-
for ac_func in cbrt clock_gettime dlopen fdatasync getifaddrs getpeerucred getrlimit mbstowcs_l memmove poll posix_fallocate pstat pthread_is_threaded_np readlink setproctitle setproctitle_fast setsid shm_open symlink sync_file_range utime utimes wcstombs_l
15063+
for ac_func in cbrt clock_gettime fdatasync getifaddrs getpeerucred getrlimit mbstowcs_l memmove poll posix_fallocate pstat pthread_is_threaded_np readlink setproctitle setproctitle_fast setsid shm_open symlink sync_file_range utime utimes wcstombs_l
1506415064
do :
1506515065
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
1506615066
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
@@ -15252,6 +15252,30 @@ cat >>confdefs.h <<_ACEOF
1525215252
_ACEOF
1525315253

1525415254

15255+
ac_fn_c_check_decl "$LINENO" "RTLD_GLOBAL" "ac_cv_have_decl_RTLD_GLOBAL" "#include <dlfcn.h>
15256+
"
15257+
if test "x$ac_cv_have_decl_RTLD_GLOBAL" = xyes; then :
15258+
ac_have_decl=1
15259+
else
15260+
ac_have_decl=0
15261+
fi
15262+
15263+
cat >>confdefs.h <<_ACEOF
15264+
#define HAVE_DECL_RTLD_GLOBAL $ac_have_decl
15265+
_ACEOF
15266+
ac_fn_c_check_decl "$LINENO" "RTLD_NOW" "ac_cv_have_decl_RTLD_NOW" "#include <dlfcn.h>
15267+
"
15268+
if test "x$ac_cv_have_decl_RTLD_NOW" = xyes; then :
15269+
ac_have_decl=1
15270+
else
15271+
ac_have_decl=0
15272+
fi
15273+
15274+
cat >>confdefs.h <<_ACEOF
15275+
#define HAVE_DECL_RTLD_NOW $ac_have_decl
15276+
_ACEOF
15277+
15278+
1525515279
HAVE_IPV6=no
1525615280
ac_fn_c_check_type "$LINENO" "struct sockaddr_in6" "ac_cv_type_struct_sockaddr_in6" "$ac_includes_default
1525715281
#include <netinet/in.h>
@@ -15461,6 +15485,19 @@ esac
1546115485

1546215486
fi
1546315487

15488+
ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
15489+
if test "x$ac_cv_func_dlopen" = xyes; then :
15490+
$as_echo "#define HAVE_DLOPEN 1" >>confdefs.h
15491+
15492+
else
15493+
case " $LIBOBJS " in
15494+
*" dlopen.$ac_objext "* ) ;;
15495+
*) LIBOBJS="$LIBOBJS dlopen.$ac_objext"
15496+
;;
15497+
esac
15498+
15499+
fi
15500+
1546415501
ac_fn_c_check_func "$LINENO" "fls" "ac_cv_func_fls"
1546515502
if test "x$ac_cv_func_fls" = xyes; then :
1546615503
$as_echo "#define HAVE_FLS 1" >>confdefs.h
@@ -19016,7 +19053,7 @@ fi
1901619053
ac_config_files="$ac_config_files GNUmakefile src/Makefile.global"
1901719054

1901819055

19019-
ac_config_links="$ac_config_links src/backend/port/dynloader.c:src/backend/port/dynloader/${template}.c src/backend/port/pg_sema.c:${SEMA_IMPLEMENTATION} src/backend/port/pg_shmem.c:${SHMEM_IMPLEMENTATION} src/include/dynloader.h:src/backend/port/dynloader/${template}.h src/include/pg_config_os.h:src/include/port/${template}.h src/Makefile.port:src/makefiles/Makefile.${template}"
19056+
ac_config_links="$ac_config_links src/backend/port/pg_sema.c:${SEMA_IMPLEMENTATION} src/backend/port/pg_shmem.c:${SHMEM_IMPLEMENTATION} src/include/pg_config_os.h:src/include/port/${template}.h src/Makefile.port:src/makefiles/Makefile.${template}"
1902019057

1902119058

1902219059
if test "$PORTNAME" = "win32"; then
@@ -19737,10 +19774,8 @@ do
1973719774
"src/backend/port/tas.s") CONFIG_LINKS="$CONFIG_LINKS src/backend/port/tas.s:src/backend/port/tas/${tas_file}" ;;
1973819775
"GNUmakefile") CONFIG_FILES="$CONFIG_FILES GNUmakefile" ;;
1973919776
"src/Makefile.global") CONFIG_FILES="$CONFIG_FILES src/Makefile.global" ;;
19740-
"src/backend/port/dynloader.c") CONFIG_LINKS="$CONFIG_LINKS src/backend/port/dynloader.c:src/backend/port/dynloader/${template}.c" ;;
1974119777
"src/backend/port/pg_sema.c") CONFIG_LINKS="$CONFIG_LINKS src/backend/port/pg_sema.c:${SEMA_IMPLEMENTATION}" ;;
1974219778
"src/backend/port/pg_shmem.c") CONFIG_LINKS="$CONFIG_LINKS src/backend/port/pg_shmem.c:${SHMEM_IMPLEMENTATION}" ;;
19743-
"src/include/dynloader.h") CONFIG_LINKS="$CONFIG_LINKS src/include/dynloader.h:src/backend/port/dynloader/${template}.h" ;;
1974419779
"src/include/pg_config_os.h") CONFIG_LINKS="$CONFIG_LINKS src/include/pg_config_os.h:src/include/port/${template}.h" ;;
1974519780
"src/Makefile.port") CONFIG_LINKS="$CONFIG_LINKS src/Makefile.port:src/makefiles/Makefile.${template}" ;;
1974619781
"check_win32_symlinks") CONFIG_COMMANDS="$CONFIG_COMMANDS check_win32_symlinks" ;;

configure.in

+4-4
Original file line numberDiff line numberDiff line change
@@ -1544,7 +1544,7 @@ PGAC_FUNC_WCSTOMBS_L
15441544
LIBS_including_readline="$LIBS"
15451545
LIBS=`echo "$LIBS" | sed -e 's/-ledit//g' -e 's/-lreadline//g'`
15461546

1547-
AC_CHECK_FUNCS([cbrt clock_gettime dlopen fdatasync getifaddrs getpeerucred getrlimit mbstowcs_l memmove poll posix_fallocate pstat pthread_is_threaded_np readlink setproctitle setproctitle_fast setsid shm_open symlink sync_file_range utime utimes wcstombs_l])
1547+
AC_CHECK_FUNCS([cbrt clock_gettime fdatasync getifaddrs getpeerucred getrlimit mbstowcs_l memmove poll posix_fallocate pstat pthread_is_threaded_np readlink setproctitle setproctitle_fast setsid shm_open symlink sync_file_range utime utimes wcstombs_l])
15481548

15491549
AC_REPLACE_FUNCS(fseeko)
15501550
case $host_os in
@@ -1570,6 +1570,8 @@ AC_CHECK_DECLS([strlcat, strlcpy, strnlen])
15701570
# This is probably only present on macOS, but may as well check always
15711571
AC_CHECK_DECLS(F_FULLFSYNC, [], [], [#include <fcntl.h>])
15721572

1573+
AC_CHECK_DECLS([RTLD_GLOBAL, RTLD_NOW], [], [], [#include <dlfcn.h>])
1574+
15731575
HAVE_IPV6=no
15741576
AC_CHECK_TYPE([struct sockaddr_in6],
15751577
[AC_DEFINE(HAVE_IPV6, 1, [Define to 1 if you have support for IPv6.])
@@ -1658,7 +1660,7 @@ else
16581660
AC_CHECK_FUNCS([fpclass fp_class fp_class_d class], [break])
16591661
fi
16601662

1661-
AC_REPLACE_FUNCS([crypt fls getopt getrusage inet_aton mkdtemp random rint srandom strerror strlcat strlcpy strnlen])
1663+
AC_REPLACE_FUNCS([crypt dlopen fls getopt getrusage inet_aton mkdtemp random rint srandom strerror strlcat strlcpy strnlen])
16621664

16631665
case $host_os in
16641666

@@ -2382,10 +2384,8 @@ AC_SUBST(vpath_build)
23822384
AC_CONFIG_FILES([GNUmakefile src/Makefile.global])
23832385

23842386
AC_CONFIG_LINKS([
2385-
src/backend/port/dynloader.c:src/backend/port/dynloader/${template}.c
23862387
src/backend/port/pg_sema.c:${SEMA_IMPLEMENTATION}
23872388
src/backend/port/pg_shmem.c:${SHMEM_IMPLEMENTATION}
2388-
src/include/dynloader.h:src/backend/port/dynloader/${template}.h
23892389
src/include/pg_config_os.h:src/include/port/${template}.h
23902390
src/Makefile.port:src/makefiles/Makefile.${template}
23912391
])

src/backend/Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ ifeq ($(PORTNAME), win32)
293293
endif
294294

295295
distclean: clean
296-
rm -f port/tas.s port/dynloader.c port/pg_sema.c port/pg_shmem.c
296+
rm -f port/tas.s port/pg_sema.c port/pg_shmem.c
297297

298298
maintainer-clean: distclean
299299
$(MAKE) -C catalog $@

src/backend/port/.gitignore

-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
/dynloader.c
21
/pg_sema.c
32
/pg_shmem.c
43
/tas.s

src/backend/port/Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ subdir = src/backend/port
2121
top_builddir = ../../..
2222
include $(top_builddir)/src/Makefile.global
2323

24-
OBJS = atomics.o dynloader.o pg_sema.o pg_shmem.o $(TAS)
24+
OBJS = atomics.o pg_sema.o pg_shmem.o $(TAS)
2525

2626
ifeq ($(PORTNAME), win32)
2727
SUBDIRS += win32

src/backend/port/dynloader/aix.c

-7
This file was deleted.

src/backend/port/dynloader/aix.h

-39
This file was deleted.

src/backend/port/dynloader/cygwin.c

-3
This file was deleted.

src/backend/port/dynloader/cygwin.h

-36
This file was deleted.

src/backend/port/dynloader/darwin.c

-35
This file was deleted.

src/backend/port/dynloader/darwin.h

-8
This file was deleted.

src/backend/port/dynloader/freebsd.c

-7
This file was deleted.

src/backend/port/dynloader/freebsd.h

-38
This file was deleted.

src/backend/port/dynloader/hpux.c

-68
This file was deleted.

0 commit comments

Comments
 (0)