diff --git a/Makefile b/Makefile
index 9bc1a4ec17..8a2ec9396b 100644
--- a/Makefile
+++ b/Makefile
@@ -13,6 +13,8 @@
# AIX make defaults to building *every* target of the first rule. Start with
# a single-target, empty rule to make the other targets non-default.
+# (We don't support AIX anymore, but if someone tries to build on AIX anyway,
+# at least they'll get the instructions to run 'configure' first.)
all:
all check install installdirs installcheck installcheck-parallel uninstall clean distclean maintainer-clean dist distcheck world check-world install-world installcheck-world:
diff --git a/config/c-compiler.m4 b/config/c-compiler.m4
index 5db02b2ab7..3268a780bb 100644
--- a/config/c-compiler.m4
+++ b/config/c-compiler.m4
@@ -137,7 +137,7 @@ if test x"$pgac_cv__128bit_int" = xyes ; then
AC_CACHE_CHECK([for __int128 alignment bug], [pgac_cv__128bit_int_bug],
[AC_RUN_IFELSE([AC_LANG_PROGRAM([
/* This must match the corresponding code in c.h: */
-#if defined(__GNUC__) || defined(__SUNPRO_C) || defined(__IBMC__)
+#if defined(__GNUC__) || defined(__SUNPRO_C)
#define pg_attribute_aligned(a) __attribute__((aligned(a)))
#elif defined(_MSC_VER)
#define pg_attribute_aligned(a) __declspec(align(a))
diff --git a/configure b/configure
index 6b87e5c9a8..564319c056 100755
--- a/configure
+++ b/configure
@@ -2987,7 +2987,6 @@ else
# --with-template not given
case $host_os in
- aix*) template=aix ;;
cygwin*|msys*) template=cygwin ;;
darwin*) template=darwin ;;
dragonfly*) template=netbsd ;;
@@ -3917,10 +3916,10 @@ fi
-case $template in
- aix) pgac_cc_list="gcc xlc"; pgac_cxx_list="g++ xlC";;
- *) pgac_cc_list="gcc cc"; pgac_cxx_list="g++ c++";;
-esac
+# If you don't specify a list of compilers to test, the AC_PROG_CC and
+# AC_PROG_CXX macros test for a long list of unsupported compilers.
+pgac_cc_list="gcc cc"
+pgac_cxx_list="g++ c++"
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
@@ -6874,190 +6873,6 @@ if test x"$pgac_cv_prog_CXX_cxxflags__fno_strict_aliasing" = x"yes"; then
fi
-elif test "$PORTNAME" = "aix"; then
- # AIX's xlc has to have strict aliasing turned off too
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CC} supports -qnoansialias, for CFLAGS" >&5
-$as_echo_n "checking whether ${CC} supports -qnoansialias, for CFLAGS... " >&6; }
-if ${pgac_cv_prog_CC_cflags__qnoansialias+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- pgac_save_CFLAGS=$CFLAGS
-pgac_save_CC=$CC
-CC=${CC}
-CFLAGS="${CFLAGS} -qnoansialias"
-ac_save_c_werror_flag=$ac_c_werror_flag
-ac_c_werror_flag=yes
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pgac_cv_prog_CC_cflags__qnoansialias=yes
-else
- pgac_cv_prog_CC_cflags__qnoansialias=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_c_werror_flag=$ac_save_c_werror_flag
-CFLAGS="$pgac_save_CFLAGS"
-CC="$pgac_save_CC"
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_prog_CC_cflags__qnoansialias" >&5
-$as_echo "$pgac_cv_prog_CC_cflags__qnoansialias" >&6; }
-if test x"$pgac_cv_prog_CC_cflags__qnoansialias" = x"yes"; then
- CFLAGS="${CFLAGS} -qnoansialias"
-fi
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CXX} supports -qnoansialias, for CXXFLAGS" >&5
-$as_echo_n "checking whether ${CXX} supports -qnoansialias, for CXXFLAGS... " >&6; }
-if ${pgac_cv_prog_CXX_cxxflags__qnoansialias+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- pgac_save_CXXFLAGS=$CXXFLAGS
-pgac_save_CXX=$CXX
-CXX=${CXX}
-CXXFLAGS="${CXXFLAGS} -qnoansialias"
-ac_save_cxx_werror_flag=$ac_cxx_werror_flag
-ac_cxx_werror_flag=yes
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- pgac_cv_prog_CXX_cxxflags__qnoansialias=yes
-else
- pgac_cv_prog_CXX_cxxflags__qnoansialias=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-CXXFLAGS="$pgac_save_CXXFLAGS"
-CXX="$pgac_save_CXX"
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_prog_CXX_cxxflags__qnoansialias" >&5
-$as_echo "$pgac_cv_prog_CXX_cxxflags__qnoansialias" >&6; }
-if test x"$pgac_cv_prog_CXX_cxxflags__qnoansialias" = x"yes"; then
- CXXFLAGS="${CXXFLAGS} -qnoansialias"
-fi
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CC} supports -qlonglong, for CFLAGS" >&5
-$as_echo_n "checking whether ${CC} supports -qlonglong, for CFLAGS... " >&6; }
-if ${pgac_cv_prog_CC_cflags__qlonglong+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- pgac_save_CFLAGS=$CFLAGS
-pgac_save_CC=$CC
-CC=${CC}
-CFLAGS="${CFLAGS} -qlonglong"
-ac_save_c_werror_flag=$ac_c_werror_flag
-ac_c_werror_flag=yes
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pgac_cv_prog_CC_cflags__qlonglong=yes
-else
- pgac_cv_prog_CC_cflags__qlonglong=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_c_werror_flag=$ac_save_c_werror_flag
-CFLAGS="$pgac_save_CFLAGS"
-CC="$pgac_save_CC"
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_prog_CC_cflags__qlonglong" >&5
-$as_echo "$pgac_cv_prog_CC_cflags__qlonglong" >&6; }
-if test x"$pgac_cv_prog_CC_cflags__qlonglong" = x"yes"; then
- CFLAGS="${CFLAGS} -qlonglong"
-fi
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CXX} supports -qlonglong, for CXXFLAGS" >&5
-$as_echo_n "checking whether ${CXX} supports -qlonglong, for CXXFLAGS... " >&6; }
-if ${pgac_cv_prog_CXX_cxxflags__qlonglong+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- pgac_save_CXXFLAGS=$CXXFLAGS
-pgac_save_CXX=$CXX
-CXX=${CXX}
-CXXFLAGS="${CXXFLAGS} -qlonglong"
-ac_save_cxx_werror_flag=$ac_cxx_werror_flag
-ac_cxx_werror_flag=yes
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- pgac_cv_prog_CXX_cxxflags__qlonglong=yes
-else
- pgac_cv_prog_CXX_cxxflags__qlonglong=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-CXXFLAGS="$pgac_save_CXXFLAGS"
-CXX="$pgac_save_CXX"
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_prog_CXX_cxxflags__qlonglong" >&5
-$as_echo "$pgac_cv_prog_CXX_cxxflags__qlonglong" >&6; }
-if test x"$pgac_cv_prog_CXX_cxxflags__qlonglong" = x"yes"; then
- CXXFLAGS="${CXXFLAGS} -qlonglong"
-fi
-
-
fi
# If the compiler knows how to hide symbols, add the switch needed for that to
@@ -7212,103 +7027,6 @@ if test x"$pgac_cv_prog_CXX_cxxflags__fvisibility_inlines_hidden" = x"yes"; then
fi
have_visibility_attribute=$pgac_cv_prog_CC_cflags__fvisibility_hidden
-elif test "$PORTNAME" = "aix"; then
- # Note that xlc accepts -fvisibility=hidden as a file.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CC} supports -qvisibility=hidden, for CFLAGS_SL_MODULE" >&5
-$as_echo_n "checking whether ${CC} supports -qvisibility=hidden, for CFLAGS_SL_MODULE... " >&6; }
-if ${pgac_cv_prog_CC_cflags__qvisibility_hidden+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- pgac_save_CFLAGS=$CFLAGS
-pgac_save_CC=$CC
-CC=${CC}
-CFLAGS="${CFLAGS_SL_MODULE} -qvisibility=hidden"
-ac_save_c_werror_flag=$ac_c_werror_flag
-ac_c_werror_flag=yes
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pgac_cv_prog_CC_cflags__qvisibility_hidden=yes
-else
- pgac_cv_prog_CC_cflags__qvisibility_hidden=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_c_werror_flag=$ac_save_c_werror_flag
-CFLAGS="$pgac_save_CFLAGS"
-CC="$pgac_save_CC"
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_prog_CC_cflags__qvisibility_hidden" >&5
-$as_echo "$pgac_cv_prog_CC_cflags__qvisibility_hidden" >&6; }
-if test x"$pgac_cv_prog_CC_cflags__qvisibility_hidden" = x"yes"; then
- CFLAGS_SL_MODULE="${CFLAGS_SL_MODULE} -qvisibility=hidden"
-fi
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CXX} supports -qvisibility=hidden, for CXXFLAGS_SL_MODULE" >&5
-$as_echo_n "checking whether ${CXX} supports -qvisibility=hidden, for CXXFLAGS_SL_MODULE... " >&6; }
-if ${pgac_cv_prog_CXX_cxxflags__qvisibility_hidden+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- pgac_save_CXXFLAGS=$CXXFLAGS
-pgac_save_CXX=$CXX
-CXX=${CXX}
-CXXFLAGS="${CXXFLAGS_SL_MODULE} -qvisibility=hidden"
-ac_save_cxx_werror_flag=$ac_cxx_werror_flag
-ac_cxx_werror_flag=yes
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- pgac_cv_prog_CXX_cxxflags__qvisibility_hidden=yes
-else
- pgac_cv_prog_CXX_cxxflags__qvisibility_hidden=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-CXXFLAGS="$pgac_save_CXXFLAGS"
-CXX="$pgac_save_CXX"
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_prog_CXX_cxxflags__qvisibility_hidden" >&5
-$as_echo "$pgac_cv_prog_CXX_cxxflags__qvisibility_hidden" >&6; }
-if test x"$pgac_cv_prog_CXX_cxxflags__qvisibility_hidden" = x"yes"; then
- CXXFLAGS_SL_MODULE="${CXXFLAGS_SL_MODULE} -qvisibility=hidden"
-fi
-
- have_visibility_attribute=$pgac_cv_prog_CC_cflags__qvisibility_hidden
- # Old xlc versions (<13.1) don't have support for -qvisibility. Use expfull to force
- # all extension module symbols to be exported.
- if test "$pgac_cv_prog_CC_cflags__qvisibility_hidden" != "yes"; then
- CFLAGS_SL_MODULE="$CFLAGS_SL_MODULE -Wl,-b,expfull"
- fi
fi
if test "$have_visibility_attribute" = "yes"; then
@@ -13166,8 +12884,7 @@ fi
fi
-# Note: We can test for libldap_r only after we know PTHREAD_LIBS;
-# also, on AIX, we may need to have openssl in LIBS for this step.
+# Note: We can test for libldap_r only after we know PTHREAD_LIBS
if test "$with_ldap" = yes ; then
_LIBS="$LIBS"
if test "$PORTNAME" != "win32"; then
@@ -15025,10 +14742,6 @@ fi
# spelling it understands, because it conflicts with
# __declspec(restrict). Therefore we define pg_restrict to the
# appropriate definition, which presumably won't conflict.
-#
-# Allow platforms with buggy compilers to force restrict to not be
-# used by setting $FORCE_DISABLE_RESTRICT=yes in the relevant
-# template.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5
$as_echo_n "checking for C/C++ restrict keyword... " >&6; }
if ${ac_cv_c_restrict+:} false; then :
@@ -15075,7 +14788,7 @@ _ACEOF
;;
esac
-if test "$ac_cv_c_restrict" = "no" -o "x$FORCE_DISABLE_RESTRICT" = "xyes"; then
+if test "$ac_cv_c_restrict" = "no"; then
pg_restrict=""
else
pg_restrict="$ac_cv_c_restrict"
@@ -17262,18 +16975,28 @@ _ACEOF
# Compute maximum alignment of any basic type.
-# We assume long's alignment is at least as strong as char, short, or int;
-# but we must check long long (if it is being used for int64) and double.
-# Note that we intentionally do not consider any types wider than 64 bits,
-# as allowing MAXIMUM_ALIGNOF to exceed 8 would be too much of a penalty
-# for disk and memory space.
+#
+# We require 'double' to have the strictest alignment among base types,
+# because otherwise the C ABI might impose 8-byte alignment on some of the
+# other C types that correspond to TYPALIGN_DOUBLE SQL types. That could
+# cause a mismatch between the tuple layout and the C struct layout of a
+# catalog tuple. We used to carefully order catalog columns such that any
+# fixed-width, attalign=4 columns were at offsets divisible by 8 regardless
+# of MAXIMUM_ALIGNOF to avoid that, but we no longer support any platforms
+# where TYPALIGN_DOUBLE != MAXIMUM_ALIGNOF.
+#
+# We assume without checking that long's alignment is at least as strong as
+# char, short, or int. Note that we intentionally do not consider any types
+# wider than 64 bits, as allowing MAXIMUM_ALIGNOF to exceed 8 would be too
+# much of a penalty for disk and memory space.
-MAX_ALIGNOF=$ac_cv_alignof_long
-if test $MAX_ALIGNOF -lt $ac_cv_alignof_double ; then
- MAX_ALIGNOF=$ac_cv_alignof_double
+MAX_ALIGNOF=$ac_cv_alignof_double
+
+if test $ac_cv_alignof_long -gt $MAX_ALIGNOF ; then
+ as_fn_error $? "alignment of 'long' is greater than the alignment of 'double'" "$LINENO" 5
fi
-if test x"$HAVE_LONG_LONG_INT_64" = xyes && test $MAX_ALIGNOF -lt $ac_cv_alignof_long_long_int ; then
- MAX_ALIGNOF="$ac_cv_alignof_long_long_int"
+if test x"$HAVE_LONG_LONG_INT_64" = xyes && test $ac_cv_alignof_long_long_int -gt $MAX_ALIGNOF ; then
+ as_fn_error $? "alignment of 'long long int' is greater than the alignment of 'double'" "$LINENO" 5
fi
cat >>confdefs.h <<_ACEOF
@@ -17391,7 +17114,7 @@ else
/* end confdefs.h. */
/* This must match the corresponding code in c.h: */
-#if defined(__GNUC__) || defined(__SUNPRO_C) || defined(__IBMC__)
+#if defined(__GNUC__) || defined(__SUNPRO_C)
#define pg_attribute_aligned(a) __attribute__((aligned(a)))
#elif defined(_MSC_VER)
#define pg_attribute_aligned(a) __declspec(align(a))
diff --git a/configure.ac b/configure.ac
index 6e64ece11d..d034bf742a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -62,7 +62,6 @@ PGAC_ARG_REQ(with, template, [NAME], [override operating system template],
# --with-template not given
case $host_os in
- aix*) template=aix ;;
cygwin*|msys*) template=cygwin ;;
darwin*) template=darwin ;;
dragonfly*) template=netbsd ;;
@@ -374,10 +373,10 @@ AC_DEFINE_UNQUOTED([XLOG_BLCKSZ], ${XLOG_BLCKSZ}, [
# variable.
PGAC_ARG_REQ(with, CC, [CMD], [set compiler (deprecated)], [CC=$with_CC])
-case $template in
- aix) pgac_cc_list="gcc xlc"; pgac_cxx_list="g++ xlC";;
- *) pgac_cc_list="gcc cc"; pgac_cxx_list="g++ c++";;
-esac
+# If you don't specify a list of compilers to test, the AC_PROG_CC and
+# AC_PROG_CXX macros test for a long list of unsupported compilers.
+pgac_cc_list="gcc cc"
+pgac_cxx_list="g++ c++"
AC_PROG_CC([$pgac_cc_list])
AC_PROG_CC_C99()
@@ -594,12 +593,6 @@ elif test "$ICC" = yes; then
# Make sure strict aliasing is off (though this is said to be the default)
PGAC_PROG_CC_CFLAGS_OPT([-fno-strict-aliasing])
PGAC_PROG_CXX_CFLAGS_OPT([-fno-strict-aliasing])
-elif test "$PORTNAME" = "aix"; then
- # AIX's xlc has to have strict aliasing turned off too
- PGAC_PROG_CC_CFLAGS_OPT([-qnoansialias])
- PGAC_PROG_CXX_CFLAGS_OPT([-qnoansialias])
- PGAC_PROG_CC_CFLAGS_OPT([-qlonglong])
- PGAC_PROG_CXX_CFLAGS_OPT([-qlonglong])
fi
# If the compiler knows how to hide symbols, add the switch needed for that to
@@ -618,16 +611,6 @@ if test "$GCC" = yes -o "$SUN_STUDIO_CC" = yes ; then
PGAC_PROG_VARCXX_VARFLAGS_OPT(CXX, CXXFLAGS_SL_MODULE, [-fvisibility=hidden])
PGAC_PROG_VARCXX_VARFLAGS_OPT(CXX, CXXFLAGS_SL_MODULE, [-fvisibility-inlines-hidden])
have_visibility_attribute=$pgac_cv_prog_CC_cflags__fvisibility_hidden
-elif test "$PORTNAME" = "aix"; then
- # Note that xlc accepts -fvisibility=hidden as a file.
- PGAC_PROG_CC_VAR_OPT(CFLAGS_SL_MODULE, [-qvisibility=hidden])
- PGAC_PROG_VARCXX_VARFLAGS_OPT(CXX, CXXFLAGS_SL_MODULE, [-qvisibility=hidden])
- have_visibility_attribute=$pgac_cv_prog_CC_cflags__qvisibility_hidden
- # Old xlc versions (<13.1) don't have support for -qvisibility. Use expfull to force
- # all extension module symbols to be exported.
- if test "$pgac_cv_prog_CC_cflags__qvisibility_hidden" != "yes"; then
- CFLAGS_SL_MODULE="$CFLAGS_SL_MODULE -Wl,-b,expfull"
- fi
fi
if test "$have_visibility_attribute" = "yes"; then
@@ -1407,8 +1390,7 @@ if test "$with_zstd" = yes ; then
AC_CHECK_LIB(zstd, ZSTD_compress, [], [AC_MSG_ERROR([library 'zstd' is required for ZSTD support])])
fi
-# Note: We can test for libldap_r only after we know PTHREAD_LIBS;
-# also, on AIX, we may need to have openssl in LIBS for this step.
+# Note: We can test for libldap_r only after we know PTHREAD_LIBS
if test "$with_ldap" = yes ; then
_LIBS="$LIBS"
if test "$PORTNAME" != "win32"; then
@@ -1666,12 +1648,8 @@ PGAC_TYPE_LOCALE_T
# spelling it understands, because it conflicts with
# __declspec(restrict). Therefore we define pg_restrict to the
# appropriate definition, which presumably won't conflict.
-#
-# Allow platforms with buggy compilers to force restrict to not be
-# used by setting $FORCE_DISABLE_RESTRICT=yes in the relevant
-# template.
AC_C_RESTRICT
-if test "$ac_cv_c_restrict" = "no" -o "x$FORCE_DISABLE_RESTRICT" = "xyes"; then
+if test "$ac_cv_c_restrict" = "no"; then
pg_restrict=""
else
pg_restrict="$ac_cv_c_restrict"
@@ -2022,18 +2000,28 @@ fi
AC_CHECK_ALIGNOF(double)
# Compute maximum alignment of any basic type.
-# We assume long's alignment is at least as strong as char, short, or int;
-# but we must check long long (if it is being used for int64) and double.
-# Note that we intentionally do not consider any types wider than 64 bits,
-# as allowing MAXIMUM_ALIGNOF to exceed 8 would be too much of a penalty
-# for disk and memory space.
+#
+# We require 'double' to have the strictest alignment among the basic types,
+# because otherwise the C ABI might impose 8-byte alignment on some of the
+# other C types that correspond to TYPALIGN_DOUBLE SQL types. That could
+# cause a mismatch between the tuple layout and the C struct layout of a
+# catalog tuple. We used to carefully order catalog columns such that any
+# fixed-width, attalign=4 columns were at offsets divisible by 8 regardless
+# of MAXIMUM_ALIGNOF to avoid that, but we no longer support any platforms
+# where TYPALIGN_DOUBLE != MAXIMUM_ALIGNOF.
+#
+# We assume without checking that long's alignment is at least as strong as
+# char, short, or int. Note that we intentionally do not consider any types
+# wider than 64 bits, as allowing MAXIMUM_ALIGNOF to exceed 8 would be too
+# much of a penalty for disk and memory space.
-MAX_ALIGNOF=$ac_cv_alignof_long
-if test $MAX_ALIGNOF -lt $ac_cv_alignof_double ; then
- MAX_ALIGNOF=$ac_cv_alignof_double
+MAX_ALIGNOF=$ac_cv_alignof_double
+
+if test $ac_cv_alignof_long -gt $MAX_ALIGNOF ; then
+ AC_MSG_ERROR([alignment of 'long' is greater than the alignment of 'double'])
fi
-if test x"$HAVE_LONG_LONG_INT_64" = xyes && test $MAX_ALIGNOF -lt $ac_cv_alignof_long_long_int ; then
- MAX_ALIGNOF="$ac_cv_alignof_long_long_int"
+if test x"$HAVE_LONG_LONG_INT_64" = xyes && test $ac_cv_alignof_long_long_int -gt $MAX_ALIGNOF ; then
+ AC_MSG_ERROR([alignment of 'long long int' is greater than the alignment of 'double'])
fi
AC_DEFINE_UNQUOTED(MAXIMUM_ALIGNOF, $MAX_ALIGNOF, [Define as the maximum alignment requirement of any C data type.])
diff --git a/doc/src/sgml/dfunc.sgml b/doc/src/sgml/dfunc.sgml
index 554f9fac4c..b94aefcd0c 100644
--- a/doc/src/sgml/dfunc.sgml
+++ b/doc/src/sgml/dfunc.sgml
@@ -202,23 +202,4 @@ gcc -G -o foo.so foo.o
server expects to find the shared library files.
-
-
diff --git a/doc/src/sgml/installation.sgml b/doc/src/sgml/installation.sgml
index ed5b285a5e..a453f804cd 100644
--- a/doc/src/sgml/installation.sgml
+++ b/doc/src/sgml/installation.sgml
@@ -3401,7 +3401,7 @@ export MANPATH
PostgreSQL can be expected to work on current
versions of these operating systems: Linux, Windows,
- FreeBSD, OpenBSD, NetBSD, DragonFlyBSD, macOS, AIX, Solaris, and illumos.
+ FreeBSD, OpenBSD, NetBSD, DragonFlyBSD, macOS, Solaris, and illumos.
Other Unix-like systems may also work but are not currently
being tested. In most cases, all CPU architectures supported by
a given operating system will work. Look in
@@ -3422,7 +3422,7 @@ export MANPATH
Historical versions of PostgreSQL or POSTGRES
also ran on CPU architectures including Alpha, Itanium, M32R, M68K,
- M88K, NS32K, SuperH, and VAX, and operating systems including 4.3BSD, BEOS,
+ M88K, NS32K, SuperH, and VAX, and operating systems including 4.3BSD, AIX, BEOS,
BSD/OS, DG/UX, Dynix, HP-UX, IRIX, NeXTSTEP, QNX, SCO, SINIX, Sprite, SunOS,
Tru64 UNIX, and ULTRIX.
@@ -3445,123 +3445,6 @@ export MANPATH
installation issues.
-
- AIX
-
-
- AIX
- installation on
-
-
-
- You can use GCC or the native IBM compiler xlc
- to build PostgreSQL
- on AIX.
-
-
-
- AIX versions before 7.1 are no longer
- tested nor supported by the PostgreSQL
- community.
-
-
-
- Memory Management
-
-
-
- AIX can be somewhat peculiar with regards to the way it does
- memory management. You can have a server with many multiples of
- gigabytes of RAM free, but still get out of memory or address
- space errors when running applications. One example
- is loading of extensions failing with unusual errors.
- For example, running as the owner of the PostgreSQL installation:
-
-=# CREATE EXTENSION plperl;
-ERROR: could not load library "/opt/dbs/pgsql/lib/plperl.so": A memory address is not in the address space for the process.
-
- Running as a non-owner in the group possessing the PostgreSQL
- installation:
-
-=# CREATE EXTENSION plperl;
-ERROR: could not load library "/opt/dbs/pgsql/lib/plperl.so": Bad address
-
- Another example is out of memory errors in the PostgreSQL server
- logs, with every memory allocation near or greater than 256 MB
- failing.
-
-
-
- The overall cause of all these problems is the default bittedness
- and memory model used by the server process. By default, all
- binaries built on AIX are 32-bit. This does not depend upon
- hardware type or kernel in use. These 32-bit processes are
- limited to 4 GB of memory laid out in 256 MB segments using one
- of a few models. The default allows for less than 256 MB in the
- heap as it shares a single segment with the stack.
-
-
-
- In the case of the plperl example, above,
- check your umask and the permissions of the binaries in your
- PostgreSQL installation. The binaries involved in that example
- were 32-bit and installed as mode 750 instead of 755. Due to the
- permissions being set in this fashion, only the owner or a member
- of the possessing group can load the library. Since it isn't
- world-readable, the loader places the object into the process'
- heap instead of the shared library segments where it would
- otherwise be placed.
-
-
-
- The ideal
solution for this is to use a 64-bit
- build of PostgreSQL, but that is not always practical, because
- systems with 32-bit processors can build, but not run, 64-bit
- binaries.
-
-
-
- If a 32-bit binary is desired, set LDR_CNTRL to
- MAXDATA=0xn0000000,
- where 1 <= n <= 8, before starting the PostgreSQL server,
- and try different values and postgresql.conf
- settings to find a configuration that works satisfactorily. This
- use of LDR_CNTRL tells AIX that you want the
- server to have MAXDATA bytes set aside for the
- heap, allocated in 256 MB segments. When you find a workable
- configuration,
- ldedit can be used to modify the binaries so
- that they default to using the desired heap size. PostgreSQL can
- also be rebuilt, passing configure
- LDFLAGS="-Wl,-bmaxdata:0xn0000000"
- to achieve the same effect.
-
-
-
- For a 64-bit build, set OBJECT_MODE to 64 and
- pass CC="gcc -maix64"
- and LDFLAGS="-Wl,-bbigtoc"
- to configure. (Options for
- xlc might differ.) If you omit the export of
- OBJECT_MODE, your build may fail with linker errors. When
- OBJECT_MODE is set, it tells AIX's build utilities
- such as ar, as, and ld what
- type of objects to default to handling.
-
-
-
- By default, overcommit of paging space can happen. While we have
- not seen this occur, AIX will kill processes when it runs out of
- memory and the overcommit is accessed. The closest to this that
- we have seen is fork failing because the system decided that
- there was not enough memory for another process. Like many other
- parts of AIX, the paging space allocation method and
- out-of-memory kill is configurable on a system- or process-wide
- basis if this becomes a problem.
-
-
-
-
Cygwin
diff --git a/doc/src/sgml/runtime.sgml b/doc/src/sgml/runtime.sgml
index 64753d9c01..6047b8171d 100644
--- a/doc/src/sgml/runtime.sgml
+++ b/doc/src/sgml/runtime.sgml
@@ -891,29 +891,6 @@ psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such
-
- AIX
- AIXIPC configuration
-
-
-
- It should not be necessary to do
- any special configuration for such parameters as
- SHMMAX, as it appears this is configured to
- allow all memory to be used as shared memory. That is the
- sort of configuration commonly used for other databases such
- as DB/2.
-
- It might, however, be necessary to modify the global
- ulimit information in
- /etc/security/limits, as the default hard
- limits for file sizes (fsize) and numbers of
- files (nofiles) might be too low.
-
-
-
-
-
FreeBSD
FreeBSDIPC configuration
diff --git a/meson.build b/meson.build
index 8ed51b6aae..a198eca25d 100644
--- a/meson.build
+++ b/meson.build
@@ -196,26 +196,7 @@ endif
# that purpose.
portname = host_system
-if host_system == 'aix'
- library_path_var = 'LIBPATH'
-
- export_file_format = 'aix'
- export_fmt = '-Wl,-bE:@0@'
- mod_link_args_fmt = ['-Wl,-bI:@0@']
- mod_link_with_dir = 'libdir'
- mod_link_with_name = '@0@.imp'
-
- # M:SRE sets a flag indicating that an object is a shared library. Seems to
- # work in some circumstances without, but required in others.
- ldflags_sl += '-Wl,-bM:SRE'
- ldflags_be += '-Wl,-brtllib'
-
- # Native memset() is faster, tested on:
- # - AIX 5.1 and 5.2, XLC 6.0 (IBM's cc)
- # - AIX 5.3 ML3, gcc 4.0.1
- memset_loop_limit = 0
-
-elif host_system == 'cygwin'
+if host_system == 'cygwin'
sema_kind = 'unnamed_posix'
cppflags += '-D_GNU_SOURCE'
dlsuffix = '.dll'
@@ -1499,30 +1480,49 @@ sizeof_long = cc.sizeof('long', args: test_c_args)
cdata.set('SIZEOF_LONG', sizeof_long)
if sizeof_long == 8
cdata.set('HAVE_LONG_INT_64', 1)
- cdata.set('PG_INT64_TYPE', 'long int')
+ pg_int64_type = 'long int'
cdata.set_quoted('INT64_MODIFIER', 'l')
elif sizeof_long == 4 and cc.sizeof('long long', args: test_c_args) == 8
cdata.set('HAVE_LONG_LONG_INT_64', 1)
- cdata.set('PG_INT64_TYPE', 'long long int')
+ pg_int64_type = 'long long int'
cdata.set_quoted('INT64_MODIFIER', 'll')
else
error('do not know how to get a 64bit int')
endif
+cdata.set('PG_INT64_TYPE', pg_int64_type)
if host_machine.endian() == 'big'
cdata.set('WORDS_BIGENDIAN', 1)
endif
+# Determine memory alignment requirements for the basic C data types.
+
alignof_types = ['short', 'int', 'long', 'double']
-maxalign = 0
foreach t : alignof_types
align = cc.alignment(t, args: test_c_args)
- if maxalign < align
- maxalign = align
- endif
cdata.set('ALIGNOF_@0@'.format(t.to_upper()), align)
endforeach
-cdata.set('MAXIMUM_ALIGNOF', maxalign)
+
+# Compute maximum alignment of any basic type.
+#
+# We require 'double' to have the strictest alignment among the basic types,
+# because otherwise the C ABI might impose 8-byte alignment on some of the
+# other C types that correspond to TYPALIGN_DOUBLE SQL types. That could
+# cause a mismatch between the tuple layout and the C struct layout of a
+# catalog tuple. We used to carefully order catalog columns such that any
+# fixed-width, attalign=4 columns were at offsets divisible by 8 regardless
+# of MAXIMUM_ALIGNOF to avoid that, but we no longer support any platforms
+# where TYPALIGN_DOUBLE != MAXIMUM_ALIGNOF.
+#
+# We assume without checking that int64's alignment is at least as strong
+# as long, char, short, or int. Note that we intentionally do not consider
+# any types wider than 64 bits, as allowing MAXIMUM_ALIGNOF to exceed 8
+# would be too much of a penalty for disk and memory space.
+alignof_double = cdata.get('ALIGNOF_DOUBLE')
+if cc.alignment(pg_int64_type, args: test_c_args) > alignof_double
+ error('alignment of int64 is greater than the alignment of double')
+endif
+cdata.set('MAXIMUM_ALIGNOF', alignof_double)
cdata.set('SIZEOF_VOID_P', cc.sizeof('void *', args: test_c_args))
cdata.set('SIZEOF_SIZE_T', cc.sizeof('size_t', args: test_c_args))
@@ -1571,7 +1571,7 @@ if cc.links('''
if not meson.is_cross_build()
r = cc.run('''
/* This must match the corresponding code in c.h: */
- #if defined(__GNUC__) || defined(__SUNPRO_C) || defined(__IBMC__)
+ #if defined(__GNUC__) || defined(__SUNPRO_C)
#define pg_attribute_aligned(a) __attribute__((aligned(a)))
#elif defined(_MSC_VER)
#define pg_attribute_aligned(a) __declspec(align(a))
@@ -2371,10 +2371,6 @@ endif
# conflict.
#
# We assume C99 support, so we don't need to make this conditional.
-#
-# XXX: Historically we allowed platforms to disable restrict in template
-# files, but that was only added for AIX when building with XLC, which we
-# don't support yet.
cdata.set('pg_restrict', '__restrict')
diff --git a/src/Makefile.shlib b/src/Makefile.shlib
index 8ca51ca03f..fa81f6ffdd 100644
--- a/src/Makefile.shlib
+++ b/src/Makefile.shlib
@@ -106,20 +106,6 @@ ifdef SO_MAJOR_VERSION
override CPPFLAGS += -DSO_MAJOR_VERSION=$(SO_MAJOR_VERSION)
endif
-ifeq ($(PORTNAME), aix)
- LINK.shared = $(COMPILER)
- ifdef SO_MAJOR_VERSION
- shlib = lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION)
- endif
- haslibarule = yes
- # $(exports_file) is also usable as an import file
- exports_file = lib$(NAME).exp
- BUILD.exports = ( echo '\#! $(shlib)'; $(AWK) '/^[^\#]/ {printf "%s\n",$$1}' $< ) > $@
- ifneq (,$(SHLIB_EXPORTS))
- LINK.shared += -Wl,-bE:$(exports_file)
- endif
-endif
-
ifeq ($(PORTNAME), darwin)
ifdef soname
# linkable library
@@ -268,14 +254,6 @@ $(stlib): $(OBJS) | $(SHLIB_PREREQS)
touch $@
endif #haslibarule
-# AIX wraps shared libraries inside a static library, can be used both
-# for static and shared linking
-ifeq ($(PORTNAME), aix)
-$(stlib): $(shlib)
- rm -f $(stlib)
- $(AR) $(AROPT) $(stlib) $(shlib)
-endif # aix
-
ifeq (,$(filter cygwin win32,$(PORTNAME)))
# Normal case
@@ -289,11 +267,8 @@ ifneq ($(shlib), $(shlib_major))
endif
# Make sure we have a link to a name without any version numbers
ifneq ($(shlib), $(shlib_bare))
-# except on AIX, where that's not a thing
-ifneq ($(PORTNAME), aix)
rm -f $(shlib_bare)
$(LN_S) $(shlib) $(shlib_bare)
-endif # aix
endif # shlib_bare
endif # shlib_major
@@ -401,9 +376,6 @@ install-lib-static: $(stlib) installdirs-lib
install-lib-shared: $(shlib) installdirs-lib
ifdef soname
-# we don't install $(shlib) on AIX
-# (see http://archives.postgresql.org/message-id/52EF20B2E3209443BC37736D00C3C1380A6E79FE@EXADV1.host.magwien.gv.at)
-ifneq ($(PORTNAME), aix)
$(INSTALL_SHLIB) $< '$(DESTDIR)$(libdir)/$(shlib)'
ifneq ($(PORTNAME), cygwin)
ifneq ($(PORTNAME), win32)
@@ -419,7 +391,6 @@ ifneq ($(shlib), $(shlib_bare))
endif
endif # not win32
endif # not cygwin
-endif # not aix
ifneq (,$(findstring $(PORTNAME),win32 cygwin))
$(INSTALL_SHLIB) $< '$(DESTDIR)$(bindir)/$(shlib)'
endif
diff --git a/src/backend/Makefile b/src/backend/Makefile
index 7d2ea7d54a..d66e2a4b9f 100644
--- a/src/backend/Makefile
+++ b/src/backend/Makefile
@@ -62,14 +62,12 @@ all: submake-libpgport submake-catalog-headers submake-utils-headers postgres $(
ifneq ($(PORTNAME), cygwin)
ifneq ($(PORTNAME), win32)
-ifneq ($(PORTNAME), aix)
postgres: $(OBJS)
$(CC) $(CFLAGS) $(call expand_subsys,$^) $(LDFLAGS) $(LIBS) -o $@
endif
endif
-endif
ifeq ($(PORTNAME), cygwin)
@@ -96,24 +94,6 @@ libpostgres.a: postgres
endif # win32
-ifeq ($(PORTNAME), aix)
-
-postgres: $(POSTGRES_IMP)
- $(CC) $(CFLAGS) $(call expand_subsys,$(OBJS)) $(LDFLAGS) -Wl,-bE:$(top_builddir)/src/backend/$(POSTGRES_IMP) $(LIBS) -Wl,-brtllib -o $@
-
-# Linking to a single .o with -r is a lot faster than building a .a or passing
-# all objects to MKLDEXPORT.
-#
-# It looks alluring to use $(CC) -r instead of ld -r, but that doesn't
-# trivially work with gcc, due to gcc specific static libraries linked in with
-# -r.
-$(POSTGRES_IMP): $(OBJS)
- ld -r -o SUBSYS.o $(call expand_subsys,$^)
- $(MKLDEXPORT) SUBSYS.o . > $@
- @rm -f SUBSYS.o
-
-endif # aix
-
$(top_builddir)/src/port/libpgport_srv.a: | submake-libpgport
diff --git a/src/backend/meson.build b/src/backend/meson.build
index 8767aaba67..436c04af08 100644
--- a/src/backend/meson.build
+++ b/src/backend/meson.build
@@ -91,21 +91,6 @@ if cc.get_id() == 'msvc'
# be restricted to b_pch=true.
backend_link_with += postgres_lib
-elif host_system == 'aix'
- # The '.' argument leads mkldexport.sh to emit "#! .", which refers to the
- # main executable, allowing extension libraries to resolve their undefined
- # symbols to symbols in the postgres binary.
- postgres_imp = custom_target('postgres.imp',
- command: [files('port/aix/mkldexport.sh'), '@INPUT@', '.'],
- input: postgres_lib,
- output: 'postgres.imp',
- capture: true,
- install: true,
- install_dir: dir_lib,
- build_by_default: false,
- )
- backend_link_args += '-Wl,-bE:@0@'.format(postgres_imp.full_path())
- backend_link_depends += postgres_imp
endif
backend_input = []
diff --git a/src/backend/port/aix/mkldexport.sh b/src/backend/port/aix/mkldexport.sh
deleted file mode 100755
index adf3793e86..0000000000
--- a/src/backend/port/aix/mkldexport.sh
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/bin/sh
-#
-# mkldexport
-# create an AIX exports file from an object file
-#
-# src/backend/port/aix/mkldexport.sh
-#
-# Usage:
-# mkldexport objectfile [location]
-# where
-# objectfile is the current location of the object file.
-# location is the eventual (installed) location of the
-# object file (if different from the current
-# working directory).
-#
-# [This file comes from the Postgres 4.2 distribution. - ay 7/95]
-#
-# Header: /usr/local/devel/postgres/src/tools/mkldexport/RCS/mkldexport.sh,v 1.2 1994/03/13 04:59:12 aoki Exp
-#
-
-# setting this to nm -B might be better
-# ... due to changes in AIX 4.x ...
-# ... let us search in different directories - Gerhard Reithofer
-if [ -x /usr/ucb/nm ]
-then NM=/usr/ucb/nm
-elif [ -x /usr/bin/nm ]
-then NM=/usr/bin/nm
-elif [ -x /usr/ccs/bin/nm ]
-then NM=/usr/ccs/bin/nm
-elif [ -x /usr/usg/bin/nm ]
-then NM=/usr/usg/bin/nm
-else echo "Fatal error: cannot find `nm' ... please check your installation."
- exit 1
-fi
-
-CMDNAME=`basename $0`
-if [ -z "$1" ]; then
- echo "Usage: $CMDNAME object [location]"
- exit 1
-fi
-OBJNAME=`basename $1`
-if [ "`basename $OBJNAME`" != "`basename $OBJNAME .o`" ]; then
- OBJNAME=`basename $OBJNAME .o`.so
-fi
-if [ -z "$2" ]; then
- echo '#!'
-else
- if [ "$2" = "." ]; then
- # for the base executable (AIX 4.2 and up)
- echo '#! .'
- else
- echo '#!' $2
- fi
-fi
-$NM -BCg $1 | \
- egrep ' [TDB] ' | \
- sed -e 's/.* //' | \
- egrep -v '\$' | \
- sed -e 's/^[.]//' | \
- sort | \
- uniq
diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c
index bba00a0087..c9719f358b 100644
--- a/src/backend/utils/error/elog.c
+++ b/src/backend/utils/error/elog.c
@@ -911,9 +911,7 @@ errcode_for_file_access(void)
/* Wrong object type or state */
case ENOTDIR: /* Not a directory */
case EISDIR: /* Is a directory */
-#if defined(ENOTEMPTY) && (ENOTEMPTY != EEXIST) /* same code on AIX */
case ENOTEMPTY: /* Directory not empty */
-#endif
edata->sqlerrcode = ERRCODE_WRONG_OBJECT_TYPE;
break;
diff --git a/src/backend/utils/misc/ps_status.c b/src/backend/utils/misc/ps_status.c
index 8f77f4b563..ddb45a6bce 100644
--- a/src/backend/utils/misc/ps_status.c
+++ b/src/backend/utils/misc/ps_status.c
@@ -52,7 +52,7 @@ bool update_process_title = DEFAULT_UPDATE_PROCESS_TITLE;
#define PS_USE_SETPROCTITLE_FAST
#elif defined(HAVE_SETPROCTITLE)
#define PS_USE_SETPROCTITLE
-#elif defined(__linux__) || defined(_AIX) || defined(__sun) || defined(__darwin__)
+#elif defined(__linux__) || defined(__sun) || defined(__darwin__)
#define PS_USE_CLOBBER_ARGV
#elif defined(WIN32)
#define PS_USE_WIN32
@@ -62,7 +62,7 @@ bool update_process_title = DEFAULT_UPDATE_PROCESS_TITLE;
/* Different systems want the buffer padded differently */
-#if defined(_AIX) || defined(__linux__) || defined(__darwin__)
+#if defined(__linux__) || defined(__darwin__)
#define PS_PADDING '\0'
#else
#define PS_PADDING ' '
diff --git a/src/bin/pg_basebackup/t/010_pg_basebackup.pl b/src/bin/pg_basebackup/t/010_pg_basebackup.pl
index 86cc01a640..977ced71f8 100644
--- a/src/bin/pg_basebackup/t/010_pg_basebackup.pl
+++ b/src/bin/pg_basebackup/t/010_pg_basebackup.pl
@@ -401,8 +401,7 @@ SKIP:
{
my $tar = $ENV{TAR};
# don't check for a working tar here, to accommodate various odd
- # cases such as AIX. If tar doesn't work the init_from_backup below
- # will fail.
+ # cases. If tar doesn't work the init_from_backup below will fail.
skip "no tar program available", 1
if (!defined $tar || $tar eq '');
diff --git a/src/bin/pg_verifybackup/t/008_untar.pl b/src/bin/pg_verifybackup/t/008_untar.pl
index 30d9f3f7f0..7a09f3b75b 100644
--- a/src/bin/pg_verifybackup/t/008_untar.pl
+++ b/src/bin/pg_verifybackup/t/008_untar.pl
@@ -104,8 +104,7 @@ for my $tc (@test_configuration)
{
my $tar = $ENV{TAR};
# don't check for a working tar here, to accommodate various odd
- # cases such as AIX. If tar doesn't work the init_from_backup below
- # will fail.
+ # cases. If tar doesn't work the init_from_backup below will fail.
skip "no tar program available", 1
if (!defined $tar || $tar eq '');
diff --git a/src/bin/pg_verifybackup/t/010_client_untar.pl b/src/bin/pg_verifybackup/t/010_client_untar.pl
index 45010d79ac..8c076d46de 100644
--- a/src/bin/pg_verifybackup/t/010_client_untar.pl
+++ b/src/bin/pg_verifybackup/t/010_client_untar.pl
@@ -134,8 +134,7 @@ for my $tc (@test_configuration)
{
my $tar = $ENV{TAR};
# don't check for a working tar here, to accommodate various odd
- # cases such as AIX. If tar doesn't work the init_from_backup below
- # will fail.
+ # cases. If tar doesn't work the init_from_backup below will fail.
skip "no tar program available", 1
if (!defined $tar || $tar eq '');
diff --git a/src/include/c.h b/src/include/c.h
index 2e3ea206e1..cf37e02fe1 100644
--- a/src/include/c.h
+++ b/src/include/c.h
@@ -105,8 +105,6 @@
* GCC: https://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html
* Clang: https://clang.llvm.org/docs/AttributeReference.html
* Sunpro: https://docs.oracle.com/cd/E18659_01/html/821-1384/gjzke.html
- * XLC: https://www.ibm.com/support/knowledgecenter/SSGH2K_13.1.2/com.ibm.xlc131.aix.doc/language_ref/function_attributes.html
- * XLC: https://www.ibm.com/support/knowledgecenter/SSGH2K_13.1.2/com.ibm.xlc131.aix.doc/language_ref/type_attrib.html
*/
/*
@@ -171,8 +169,8 @@
#define PG_USED_FOR_ASSERTS_ONLY pg_attribute_unused()
#endif
-/* GCC and XLC support format attributes */
-#if defined(__GNUC__) || defined(__IBMC__)
+/* GCC supports format attributes */
+#if defined(__GNUC__)
#define pg_attribute_format_arg(a) __attribute__((format_arg(a)))
#define pg_attribute_printf(f,a) __attribute__((format(PG_PRINTF_ATTRIBUTE, f, a)))
#else
@@ -180,8 +178,8 @@
#define pg_attribute_printf(f,a)
#endif
-/* GCC, Sunpro and XLC support aligned, packed and noreturn */
-#if defined(__GNUC__) || defined(__SUNPRO_C) || defined(__IBMC__)
+/* GCC and Sunpro support aligned, packed and noreturn */
+#if defined(__GNUC__) || defined(__SUNPRO_C)
#define pg_attribute_aligned(a) __attribute__((aligned(a)))
#define pg_attribute_noreturn() __attribute__((noreturn))
#define pg_attribute_packed() __attribute__((packed))
@@ -212,8 +210,8 @@
* choose not to. But, if possible, don't force inlining in unoptimized
* debug builds.
*/
-#if (defined(__GNUC__) && __GNUC__ > 3 && defined(__OPTIMIZE__)) || defined(__SUNPRO_C) || defined(__IBMC__)
-/* GCC > 3, Sunpro and XLC support always_inline via __attribute__ */
+#if (defined(__GNUC__) && __GNUC__ > 3 && defined(__OPTIMIZE__)) || defined(__SUNPRO_C)
+/* GCC > 3 and Sunpro support always_inline via __attribute__ */
#define pg_attribute_always_inline __attribute__((always_inline)) inline
#elif defined(_MSC_VER)
/* MSVC has a special keyword for this */
@@ -229,8 +227,8 @@
* for proper cost attribution. Note that unlike the pg_attribute_XXX macros
* above, this should be placed before the function's return type and name.
*/
-/* GCC, Sunpro and XLC support noinline via __attribute__ */
-#if (defined(__GNUC__) && __GNUC__ > 2) || defined(__SUNPRO_C) || defined(__IBMC__)
+/* GCC and Sunpro support noinline via __attribute__ */
+#if (defined(__GNUC__) && __GNUC__ > 2) || defined(__SUNPRO_C)
#define pg_noinline __attribute__((noinline))
/* msvc via declspec */
#elif defined(_MSC_VER)
diff --git a/src/include/port/aix.h b/src/include/port/aix.h
deleted file mode 100644
index 5b1159c578..0000000000
--- a/src/include/port/aix.h
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * src/include/port/aix.h
- */
-#define CLASS_CONFLICT
-#define DISABLE_XOPEN_NLS
-
-/*
- * "IBM XL C/C++ for AIX, V12.1" miscompiles, for 32-bit, some inline
- * expansions of ginCompareItemPointers() "long long" arithmetic. To take
- * advantage of inlining, build a 64-bit PostgreSQL.
- */
-#if defined(__ILP32__) && defined(__IBMC__)
-#define PG_FORCE_DISABLE_INLINE
-#endif
diff --git a/src/include/port/atomics.h b/src/include/port/atomics.h
index bf151037f7..504349080d 100644
--- a/src/include/port/atomics.h
+++ b/src/include/port/atomics.h
@@ -84,11 +84,9 @@
* using compiler intrinsics are a good idea.
*/
/*
- * gcc or compatible, including clang and icc. Exclude xlc. The ppc64le "IBM
- * XL C/C++ for Linux, V13.1.2" emulates gcc, but __sync_lock_test_and_set()
- * of one-byte types elicits SIGSEGV. That bug was gone by V13.1.5 (2016-12).
+ * gcc or compatible, including clang and icc.
*/
-#if (defined(__GNUC__) || defined(__INTEL_COMPILER)) && !(defined(__IBMC__) || defined(__IBMCPP__))
+#if defined(__GNUC__) || defined(__INTEL_COMPILER)
#include "port/atomics/generic-gcc.h"
#elif defined(_MSC_VER)
#include "port/atomics/generic-msvc.h"
diff --git a/src/include/storage/s_lock.h b/src/include/storage/s_lock.h
index 69582f4ae7..29ac6cdcd9 100644
--- a/src/include/storage/s_lock.h
+++ b/src/include/storage/s_lock.h
@@ -414,12 +414,6 @@ typedef unsigned int slock_t;
* an isync is a sufficient synchronization barrier after a lwarx/stwcx loop.
* But if the spinlock is in ordinary memory, we can use lwsync instead for
* better performance.
- *
- * Ordinarily, we'd code the branches here using GNU-style local symbols, that
- * is "1f" referencing "1:" and so on. But some people run gcc on AIX with
- * IBM's assembler as backend, and IBM's assembler doesn't do local symbols.
- * So hand-code the branch offsets; fortunately, all PPC instructions are
- * exactly 4 bytes each, so it's not too hard to count.
*/
static __inline__ int
tas(volatile slock_t *lock)
@@ -430,15 +424,17 @@ tas(volatile slock_t *lock)
__asm__ __volatile__(
" lwarx %0,0,%3,1 \n"
" cmpwi %0,0 \n"
-" bne $+16 \n" /* branch to li %1,1 */
+" bne 1f \n"
" addi %0,%0,1 \n"
" stwcx. %0,0,%3 \n"
-" beq $+12 \n" /* branch to lwsync */
+" beq 2f \n"
+"1: \n"
" li %1,1 \n"
-" b $+12 \n" /* branch to end of asm sequence */
+" b 3f \n"
+"2: \n"
" lwsync \n"
" li %1,0 \n"
-
+"3: \n"
: "=&b"(_t), "=r"(_res), "+m"(*lock)
: "r"(lock)
: "memory", "cc");
@@ -666,21 +662,6 @@ tas(volatile slock_t *lock)
#if !defined(HAS_TEST_AND_SET) /* We didn't trigger above, let's try here */
-#if defined(_AIX) /* AIX */
-/*
- * AIX (POWER)
- */
-#define HAS_TEST_AND_SET
-
-#include
-
-typedef int slock_t;
-
-#define TAS(lock) _check_lock((slock_t *) (lock), 0, 1)
-#define S_UNLOCK(lock) _clear_lock((slock_t *) (lock), 0)
-#endif /* _AIX */
-
-
/* These are in sunstudio_(sparc|x86).s */
#if defined(__SUNPRO_C) && (defined(__i386) || defined(__x86_64__) || defined(__sparc__) || defined(__sparc))
diff --git a/src/interfaces/libpq/Makefile b/src/interfaces/libpq/Makefile
index 083ca6f4cc..fe2af575c5 100644
--- a/src/interfaces/libpq/Makefile
+++ b/src/interfaces/libpq/Makefile
@@ -114,7 +114,7 @@ backend_src = $(top_srcdir)/src/backend
# coding rule.
libpq-refs-stamp: $(shlib)
ifneq ($(enable_coverage), yes)
-ifeq (,$(filter aix solaris,$(PORTNAME)))
+ifeq (,$(filter solaris,$(PORTNAME)))
@if nm -A -u $< 2>/dev/null | grep -v -e __cxa_atexit -e __tsan_func_exit | grep exit; then \
echo 'libpq must not be calling any function which invokes exit'; exit 1; \
fi
diff --git a/src/interfaces/libpq/meson.build b/src/interfaces/libpq/meson.build
index a47b6f425d..be6fadaea2 100644
--- a/src/interfaces/libpq/meson.build
+++ b/src/interfaces/libpq/meson.build
@@ -54,9 +54,8 @@ libpq_c_args = ['-DSO_MAJOR_VERSION=5']
# libpq_st, and {pgport,common}_shlib for libpq_sh
#
# We could try to avoid building the source files twice, but it probably adds
-# more complexity than its worth (AIX doesn't support link_whole yet, reusing
-# object files requires also linking to the library on windows or breaks
-# precompiled headers).
+# more complexity than its worth (reusing object files requires also linking
+# to the library on windows or breaks precompiled headers).
libpq_st = static_library('libpq',
libpq_sources,
include_directories: [libpq_inc],
diff --git a/src/makefiles/Makefile.aix b/src/makefiles/Makefile.aix
deleted file mode 100644
index dd16a7a037..0000000000
--- a/src/makefiles/Makefile.aix
+++ /dev/null
@@ -1,39 +0,0 @@
-# MAKE_EXPORTS is required for svr4 loaders that want a file of
-# symbol names to tell them what to export/import.
-MAKE_EXPORTS= true
-
-# -blibpath must contain ALL directories where we should look for libraries
-libpath := $(shell echo $(subst -L,:,$(filter -L/%,$(LDFLAGS))) | sed -e's/ //g'):/usr/lib:/lib
-
-# when building with gcc, need to make sure that libgcc can be found
-ifeq ($(GCC), yes)
-libpath := $(libpath):$(dir $(shell gcc -print-libgcc-file-name))
-endif
-
-rpath = -Wl,-blibpath:'$(rpathdir)$(libpath)'
-
-LDFLAGS_SL += -Wl,-bnoentry -Wl,-H512 -Wl,-bM:SRE
-
-# gcc needs to know it's building a shared lib, otherwise it'll not emit
-# correct code / link to the right support libraries
-ifeq ($(GCC), yes)
-LDFLAGS_SL += -shared
-endif
-
-# env var name to use in place of LD_LIBRARY_PATH
-ld_library_path_var = LIBPATH
-
-
-POSTGRES_IMP= postgres.imp
-
-ifdef PGXS
-BE_DLLLIBS= -Wl,-bI:$(pkglibdir)/$(POSTGRES_IMP)
-else
-BE_DLLLIBS= -Wl,-bI:$(top_builddir)/src/backend/$(POSTGRES_IMP)
-endif
-
-MKLDEXPORT_DIR=src/backend/port/aix
-MKLDEXPORT=$(top_srcdir)/$(MKLDEXPORT_DIR)/mkldexport.sh
-
-%$(DLSUFFIX): %.o
- $(CC) $(CFLAGS) $*.o $(LDFLAGS) $(LDFLAGS_SL) -o $@ $(BE_DLLLIBS)
diff --git a/src/port/README b/src/port/README
index 97f18a6233..ed5c54a72f 100644
--- a/src/port/README
+++ b/src/port/README
@@ -28,5 +28,5 @@ applications.
from libpgport are linked first. This avoids having applications
dependent on symbols that are _used_ by libpq, but not intended to be
exported by libpq. libpq's libpgport usage changes over time, so such a
-dependency is a problem. Windows, Linux, AIX, and macOS use an export
+dependency is a problem. Windows, Linux, and macOS use an export
list to control the symbols exported by libpq.
diff --git a/src/port/strerror.c b/src/port/strerror.c
index 1070a49802..4918ba821c 100644
--- a/src/port/strerror.c
+++ b/src/port/strerror.c
@@ -214,10 +214,8 @@ get_errno_symbol(int errnum)
return "ENOTCONN";
case ENOTDIR:
return "ENOTDIR";
-#if defined(ENOTEMPTY) && (ENOTEMPTY != EEXIST) /* same code on AIX */
case ENOTEMPTY:
return "ENOTEMPTY";
-#endif
case ENOTSOCK:
return "ENOTSOCK";
#ifdef ENOTSUP
diff --git a/src/template/aix b/src/template/aix
deleted file mode 100644
index 47fa8990a7..0000000000
--- a/src/template/aix
+++ /dev/null
@@ -1,25 +0,0 @@
-# src/template/aix
-
-# Set default options if using xlc. This formerly included -qsrcmsg, but that
-# option elicits internal compiler errors from xlc v16.1.0. Note: configure
-# will add -qnoansialias if the compiler accepts it, even if user specifies a
-# non-default CFLAGS setting.
-if test "$GCC" != yes ; then
- case $host_os in
- *)
- CFLAGS="-O2 -qmaxmem=16384"
- ;;
- esac
-
- # Due to a compiler bug, see 20171013023536.GA492146@rfd.leadboat.com for details,
- # force restrict not to be used when compiling with xlc.
- FORCE_DISABLE_RESTRICT=yes
-fi
-
-# Extra CFLAGS for code that will go into a shared library
-CFLAGS_SL=""
-
-# Native memset() is faster, tested on:
-# AIX 5.1 and 5.2, XLC 6.0 (IBM's cc)
-# AIX 5.3 ML3, gcc 4.0.1
-MEMSET_LOOP_LIMIT=0
diff --git a/src/test/regress/Makefile b/src/test/regress/Makefile
index 7c665ff892..6409a485e8 100644
--- a/src/test/regress/Makefile
+++ b/src/test/regress/Makefile
@@ -7,11 +7,6 @@
# GNU make uses a make file named "GNUmakefile" in preference to "Makefile"
# if it exists. Postgres is shipped with a "GNUmakefile".
-
-# AIX make defaults to building *every* target of the first rule. Start with
-# a single-target, empty rule to make the other targets non-default.
-all:
-
all install clean check installcheck:
@echo "You must use GNU make to use Postgres. It may be installed"
@echo "on your system with the name 'gmake'."
diff --git a/src/test/regress/expected/sanity_check.out b/src/test/regress/expected/sanity_check.out
index c5c675b750..8370c1561c 100644
--- a/src/test/regress/expected/sanity_check.out
+++ b/src/test/regress/expected/sanity_check.out
@@ -25,32 +25,3 @@ SELECT relname, relkind
---------+---------
(0 rows)
---
--- When ALIGNOF_DOUBLE==4 (e.g. AIX), the C ABI may impose 8-byte alignment on
--- some of the C types that correspond to TYPALIGN_DOUBLE SQL types. To ensure
--- catalog C struct layout matches catalog tuple layout, arrange for the tuple
--- offset of each fixed-width, attalign='d' catalog column to be divisible by 8
--- unconditionally. Keep such columns before the first NameData column of the
--- catalog, since packagers can override NAMEDATALEN to an odd number.
---
-WITH check_columns AS (
- SELECT relname, attname,
- array(
- SELECT t.oid
- FROM pg_type t JOIN pg_attribute pa ON t.oid = pa.atttypid
- WHERE pa.attrelid = a.attrelid AND
- pa.attnum > 0 AND pa.attnum < a.attnum
- ORDER BY pa.attnum) AS coltypes
- FROM pg_attribute a JOIN pg_class c ON c.oid = attrelid
- JOIN pg_namespace n ON c.relnamespace = n.oid
- WHERE attalign = 'd' AND relkind = 'r' AND
- attnotnull AND attlen <> -1 AND n.nspname = 'pg_catalog'
-)
-SELECT relname, attname, coltypes, get_columns_length(coltypes)
- FROM check_columns
- WHERE get_columns_length(coltypes) % 8 != 0 OR
- 'name'::regtype::oid = ANY(coltypes);
- relname | attname | coltypes | get_columns_length
----------+---------+----------+--------------------
-(0 rows)
-
diff --git a/src/test/regress/sql/sanity_check.sql b/src/test/regress/sql/sanity_check.sql
index 7f338d191c..162e5324b5 100644
--- a/src/test/regress/sql/sanity_check.sql
+++ b/src/test/regress/sql/sanity_check.sql
@@ -19,29 +19,3 @@ SELECT relname, relkind
FROM pg_class
WHERE relkind IN ('v', 'c', 'f', 'p', 'I')
AND relfilenode <> 0;
-
---
--- When ALIGNOF_DOUBLE==4 (e.g. AIX), the C ABI may impose 8-byte alignment on
--- some of the C types that correspond to TYPALIGN_DOUBLE SQL types. To ensure
--- catalog C struct layout matches catalog tuple layout, arrange for the tuple
--- offset of each fixed-width, attalign='d' catalog column to be divisible by 8
--- unconditionally. Keep such columns before the first NameData column of the
--- catalog, since packagers can override NAMEDATALEN to an odd number.
---
-WITH check_columns AS (
- SELECT relname, attname,
- array(
- SELECT t.oid
- FROM pg_type t JOIN pg_attribute pa ON t.oid = pa.atttypid
- WHERE pa.attrelid = a.attrelid AND
- pa.attnum > 0 AND pa.attnum < a.attnum
- ORDER BY pa.attnum) AS coltypes
- FROM pg_attribute a JOIN pg_class c ON c.oid = attrelid
- JOIN pg_namespace n ON c.relnamespace = n.oid
- WHERE attalign = 'd' AND relkind = 'r' AND
- attnotnull AND attlen <> -1 AND n.nspname = 'pg_catalog'
-)
-SELECT relname, attname, coltypes, get_columns_length(coltypes)
- FROM check_columns
- WHERE get_columns_length(coltypes) % 8 != 0 OR
- 'name'::regtype::oid = ANY(coltypes);
diff --git a/src/tools/gen_export.pl b/src/tools/gen_export.pl
index 888c8a197a..d9fdaaaf6d 100644
--- a/src/tools/gen_export.pl
+++ b/src/tools/gen_export.pl
@@ -16,12 +16,11 @@ GetOptions(
'input:s' => \$input,
'output:s' => \$output) or die "wrong arguments";
-if (not( $format eq 'aix'
- or $format eq 'darwin'
+if (not( $format eq 'darwin'
or $format eq 'gnu'
or $format eq 'win'))
{
- die "$0: $format is not yet handled (only aix, darwin, gnu, win are)\n";
+ die "$0: $format is not yet handled (only darwin, gnu, win are)\n";
}
open(my $input_handle, '<', $input)
@@ -56,11 +55,7 @@ while (<$input_handle>)
}
elsif (/^(\S+)\s+(\S+)/)
{
- if ($format eq 'aix')
- {
- print $output_handle "$1\n";
- }
- elsif ($format eq 'darwin')
+ if ($format eq 'darwin')
{
print $output_handle "_$1\n";
}
diff --git a/src/tools/pginclude/cpluspluscheck b/src/tools/pginclude/cpluspluscheck
index 7edfc44b49..a46ff52cc1 100755
--- a/src/tools/pginclude/cpluspluscheck
+++ b/src/tools/pginclude/cpluspluscheck
@@ -61,7 +61,6 @@ do
# These files are platform-specific, and c.h will include the
# one that's relevant for our current platform anyway.
- test "$f" = src/include/port/aix.h && continue
test "$f" = src/include/port/cygwin.h && continue
test "$f" = src/include/port/darwin.h && continue
test "$f" = src/include/port/freebsd.h && continue
diff --git a/src/tools/pginclude/headerscheck b/src/tools/pginclude/headerscheck
index 84b892b5c5..0e2d7f537e 100755
--- a/src/tools/pginclude/headerscheck
+++ b/src/tools/pginclude/headerscheck
@@ -57,7 +57,6 @@ do
# These files are platform-specific, and c.h will include the
# one that's relevant for our current platform anyway.
- test "$f" = src/include/port/aix.h && continue
test "$f" = src/include/port/cygwin.h && continue
test "$f" = src/include/port/darwin.h && continue
test "$f" = src/include/port/freebsd.h && continue