# list is processed, with earlier entries taking precedence over later
# entries. So loose patterns at the end of the list can give defaults.
-# Configuration Library versions
-# ------------- ------- --------
+# This file can use cpp-style conditionals starting with % instead of #
+# to test the symbols defined in config.h by configure.
-# The interface to -lm depends only on cpu, not on operating system.
-i?86-*-* libm=6
-m68k-*-* libm=6
-alpha-*-* libm=6
+# In the optional third column, there can one or more symbol set names
+# listed, which must be in ascending version order reading left to right
+# and must appear in this same order in the Versions.def file. Each listed
+# version subsumes all prior versions back to the previous listed version.
+#
+# An entry with DEFAULT in the second column gives a default third column
+# to apply on matching configurations when the matching entry for a particular
+# library has no third column. The defaults must precede the entries they
+# apply to.
-# We provide libc.so.6 for Linux kernel versions 1.3.95 and later.
-i?86-*-linux* libc=6
-m68k-*-linux* libc=6
-alpha-*-linux* libc=6
+# Configuration DEFAULT Earliest symbol set
+# ------------- --------------- ------------------------------
+
+s390x-.*-linux.* DEFAULT GLIBC_2.2
+cris-.*-linux.* DEFAULT GLIBC_2.2
+x86_64-.*-linux.* DEFAULT GLIBC_2.2.5
+powerpc64-.*-linux.* DEFAULT GLIBC_2.3
+.*-.*-gnu-gnu.* DEFAULT GLIBC_2.2.6
+
+# Configuration Library=version Earliest symbol set (optional)
+# ------------- --------------- ------------------------------
+
+# The interface to -lm depends mostly only on cpu, not on operating system.
+sparc64-.*-linux.* libm=6 GLIBC_2.2
+alpha.*-.*-linux.* libm=6.1
+mips.*-.*-linux.* libm=6 GLIBC_2.0 GLIBC_2.2
+ia64-.*-linux.* libm=6.1 GLIBC_2.2
+sh.*-.*-linux.* libm=6 GLIBC_2.2
+hppa.*-.*-.* libm=6 GLIBC_2.2
+.*-.*-linux.* libm=6
+.*-.*-gnu-gnu.* libm=6
+
+# We provide libc.so.6 for Linux kernel versions 2.0 and later.
+alpha.*-.*-linux.* libc=6.1
+# Working mips versions were never released between 2.0 and 2.2.
+mips.*-.*-linux.* libc=6 GLIBC_2.0 GLIBC_2.2
+ia64-.*-linux.* libc=6.1 GLIBC_2.2
+sh.*-.*-linux.* libc=6 GLIBC_2.2
+sparc64-.*-linux.* libc=6 GLIBC_2.2
+hppa.*-.*-.* libc=6 GLIBC_2.2
+.*-.*-linux.* libc=6
# libmachuser.so.1 corresponds to mach/*.defs as of Utah's UK22 release.
-*-*-gnu* libmachuser=1
+.*-.*-gnu-gnu.* libmachuser=1
+
+# libhurduser.so.0.3 corresponds to hurd/*.defs as of 11 June 2002.
+.*-.*-gnu-gnu.* libhurduser=0.3
+
+# libc.so.0.3 is the first Hurd libc using libio.
+.*-.*-gnu-gnu.* libc=0.3
-# libhurduser.so.0.0 corresponds to hurd/*.defs as of 7 May 1996.
-*-*-gnu* libhurduser=0.0
+# The dynamic loader also requires different names.
+i.86-.*-linux.* ld=ld-linux.so.2
+sparc64-.*-linux.* ld=ld-linux.so.2 GLIBC_2.2
+sparc.*-.*-linux.* ld=ld-linux.so.2
+alpha.*-.*-linux.* ld=ld-linux.so.2
+arm.*-.*-linux.* ld=ld-linux.so.2
+sh.*-.*-linux.* ld=ld-linux.so.2 GLIBC_2.2
+ia64-.*-linux.* ld=ld-linux-ia64.so.2 GLIBC_2.2
+mips.*-.*-linux.* ld=ld.so.1 GLIBC_2.0 GLIBC_2.2
+hppa.*-.*-.* ld=ld.so.1 GLIBC_2.2
+s390x-.*-linux.* ld=ld64.so.1 GLIBC_2.2
+powerpc64.*-.*-linux.* ld=ld64.so.1 GLIBC_2.3
+cris-.*-linux.* ld=ld.so.1 GLIBC_2.2
+x86_64-.*-linux.* ld=ld-linux-x86-64.so.2 GLIBC_2.2.5
+# We use the ELF ABI standard name for the default.
+.*-.*-.* ld=ld.so.1
# The -ldl interface (see <dlfcn.h>) is the same on all platforms.
-*-*-* libdl=2
+alpha.*-.*-linux.* libdl=2.1
+mips.*-.*-linux.* libdl=2 GLIBC_2.0 GLIBC_2.2
+.*-.*-.* libdl=2
# So far the -lutil interface is the same on all platforms, except for the
# `struct utmp' format, which depends on libc.
-*-*-* libutil=1
+alpha.*-.*-linux.* libutil=1.1
+.*-.*-.* libutil=1
-# Version number 2 is used on other systems for the BIND 4.9.4 resolver
+# Version number 2 is used on other systems for the BIND 4.9.5 resolver
# interface.
-*-*-* libresolv=2
+alpha.*-.*-linux.* libresolv=2.1
+mips.*-.*-linux.* libresolv=2 GLIBC_2.0 GLIBC_2.2
+.*-.*-.* libresolv=2
# Interface revision of nss_* modules. This must match NSS_SHLIB_REVISION
# in nss/nsswitch.h, which determines the library names used for service
# names given in /etc/nsswitch.conf.
-*-*-* libnss_files=1
-*-*-* libnss_dns=1
+mips.*-.*-linux.* libnss_files=2 GLIBC_2.0 GLIBC_2.2
+mips.*-.*-linux.* libnss_dns=2 GLIBC_2.0 GLIBC_2.2
+mips.*-.*-linux.* libnss_compat=2 GLIBC_2.0 GLIBC_2.2
+mips.*-.*-linux.* libnss_nis=2 GLIBC_2.0 GLIBC_2.2
+mips.*-.*-linux.* libnss_nisplus=2 GLIBC_2.0 GLIBC_2.2
+mips.*-.*-linux.* libnss_ldap=2 GLIBC_2.0 GLIBC_2.2
+mips.*-.*-linux.* libnss_hesiod=2 GLIBC_2.0 GLIBC_2.2
+.*-.*-.* libnss_files=2
+.*-.*-.* libnss_dns=2
+.*-.*-.* libnss_compat=2
+.*-.*-.* libnss_nis=2
+.*-.*-.* libnss_nisplus=2
+.*-.*-.* libnss_ldap=2
+.*-.*-.* libnss_hesiod=2
+
+# Version for libnsl with YP and NIS+ functions.
+alpha.*-.*-linux.* libnsl=1.1
+mips.*-.*-linux.* libnsl=1 GLIBC_2.0 GLIBC_2.2
+.*-.*-.* libnsl=1
+
+# This defines the shared library version numbers we will install.
+alpha.*-.*-linux.* libcrypt=1.1
+.*-.*-.* libcrypt=1
+
+# The gross patch for programs assuming broken locale implementations.
+alpha.*-.*-linux.* libBrokenLocale=1.1
+ia64-.*-.* libBrokenLocale=1 GLIBC_2.2
+sh.*-.*-.* libBrokenLocale=1 GLIBC_2.2
+sparc64-.*-.* libBrokenLocale=1 GLIBC_2.2
+hppa-.*-.* libBrokenLocale=1 GLIBC_2.2
+.*-.*-.* libBrokenLocale=1
+
+# The real-time library from POSIX.1b.
+mips.*-.*-linux.* librt=1 GLIBC_2.0 GLIBC_2.2
+.*-.*-.* librt=1
+
+# The asynchronous name lookup library.
+.*-.*-.* libanl=1