Fix glibc 2.34 ABI omission (missing GLIBC_2.34 in dynamic loader)
authorFlorian Weimer <fweimer@redhat.com>
Thu, 27 Jan 2022 15:03:58 +0000 (16:03 +0100)
committerFlorian Weimer <fweimer@redhat.com>
Thu, 27 Jan 2022 17:52:05 +0000 (18:52 +0100)
The glibc 2.34 release really should have added a GLIBC_2.34
symbol to the dynamic loader. With it, we could move functions such
as dlopen or pthread_key_create that work on process-global state
into the dynamic loader (once we have fixed a longstanding issue
with static linking).  Without the GLIBC_2.34 symbol, yet another
new symbol version would be needed because old glibc will fail to
load binaries due to the missing symbol version in ld.so that newly
linked programs will require.

Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
33 files changed:
elf/Makefile
elf/Versions
elf/dl-compat.c [new file with mode: 0644]
sysdeps/mach/hurd/i386/ld.abilist
sysdeps/unix/sysv/linux/aarch64/ld.abilist
sysdeps/unix/sysv/linux/alpha/ld.abilist
sysdeps/unix/sysv/linux/arc/ld.abilist
sysdeps/unix/sysv/linux/arm/be/ld.abilist
sysdeps/unix/sysv/linux/arm/le/ld.abilist
sysdeps/unix/sysv/linux/csky/ld.abilist
sysdeps/unix/sysv/linux/hppa/ld.abilist
sysdeps/unix/sysv/linux/i386/ld.abilist
sysdeps/unix/sysv/linux/ia64/ld.abilist
sysdeps/unix/sysv/linux/m68k/coldfire/ld.abilist
sysdeps/unix/sysv/linux/m68k/m680x0/ld.abilist
sysdeps/unix/sysv/linux/microblaze/ld.abilist
sysdeps/unix/sysv/linux/mips/mips32/ld.abilist
sysdeps/unix/sysv/linux/mips/mips64/n32/ld.abilist
sysdeps/unix/sysv/linux/mips/mips64/n64/ld.abilist
sysdeps/unix/sysv/linux/nios2/ld.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc32/ld.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc64/be/ld.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc64/le/ld.abilist
sysdeps/unix/sysv/linux/riscv/rv32/ld.abilist
sysdeps/unix/sysv/linux/riscv/rv64/ld.abilist
sysdeps/unix/sysv/linux/s390/s390-32/ld.abilist
sysdeps/unix/sysv/linux/s390/s390-64/ld.abilist
sysdeps/unix/sysv/linux/sh/be/ld.abilist
sysdeps/unix/sysv/linux/sh/le/ld.abilist
sysdeps/unix/sysv/linux/sparc/sparc32/ld.abilist
sysdeps/unix/sysv/linux/sparc/sparc64/ld.abilist
sysdeps/unix/sysv/linux/x86_64/64/ld.abilist
sysdeps/unix/sysv/linux/x86_64/x32/ld.abilist

index 775c755291f0b933d71eb0cb25658a3815225bc7..718e826290fe45dcb3c48cc391becc60f4958585 100644 (file)
@@ -126,6 +126,7 @@ shared-only-routines = libc-dl_find_object
 rtld-routines = \
   $(all-dl-routines) \
   dl-audit \
+  dl-compat \
   dl-conflict \
   dl-diagnostics \
   dl-diagnostics-cpu \
index a4f1e76708b0033f48df84fae1fdfdd799a856b5..8bed855d8cb74ffb987995021f22545ce31ba7ff 100644 (file)
@@ -51,6 +51,9 @@ ld {
     # stack canary
     __stack_chk_guard;
   }
+  GLIBC_2.34 {
+    __rtld_version_placeholder;
+  }
   GLIBC_PRIVATE {
     # Those are in the dynamic linker, but used by libc.so.
     __libc_enable_secure;
diff --git a/elf/dl-compat.c b/elf/dl-compat.c
new file mode 100644 (file)
index 0000000..05c986a
--- /dev/null
@@ -0,0 +1,35 @@
+/* Placeholder compatibility symbols.
+   Copyright (C) 2022 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#include <shlib-compat.h>
+#include <sys/cdefs.h>
+
+/* The GLIBC_2.35 symbol version is present naturally for later ports.
+   Use OTHER_SHLIB_COMPAT because the module is called rtld, but the
+   ABI version uses ld.  */
+#if OTHER_SHLIB_COMPAT (ld, GLIBC_2_0, GLIBC_2_35)
+void
+attribute_compat_text_section
+__attribute_used__
+__rtld_version_placeholder_1 (void)
+{
+}
+
+compat_symbol (ld, __rtld_version_placeholder_1,
+               __rtld_version_placeholder, GLIBC_2_34);
+#endif
index 7e20c5e7ce8a7a5e81c37fd92ee33de00e4fb4d2..ebba31f7706d854d3ce5dcd6e0f208d5c8107e0f 100644 (file)
@@ -16,3 +16,4 @@ GLIBC_2.2.6 _r_debug D 0x14
 GLIBC_2.2.6 abort F
 GLIBC_2.3 ___tls_get_addr F
 GLIBC_2.3 __tls_get_addr F
+GLIBC_2.34 __rtld_version_placeholder F
index 717a35f24210fcaad00adc3bca418393e8b0deb1..bf4d4f9b6f2ddf97fb8446a0043da26bf663e1e2 100644 (file)
@@ -3,6 +3,7 @@ GLIBC_2.17 __stack_chk_guard D 0x8
 GLIBC_2.17 __tls_get_addr F
 GLIBC_2.17 _dl_mcount F
 GLIBC_2.17 _r_debug D 0x28
+GLIBC_2.34 __rtld_version_placeholder F
 GLIBC_2.35 __rseq_flags D 0x4
 GLIBC_2.35 __rseq_offset D 0x4
 GLIBC_2.35 __rseq_size D 0x4
index 76911bd7f84dc5d5ad73c5f21036fe781722c4e4..a23325a566419b41e2760eb214ef02332bae62e0 100644 (file)
@@ -2,6 +2,7 @@ GLIBC_2.0 _r_debug D 0x28
 GLIBC_2.1 __libc_stack_end D 0x8
 GLIBC_2.1 _dl_mcount F
 GLIBC_2.3 __tls_get_addr F
+GLIBC_2.34 __rtld_version_placeholder F
 GLIBC_2.35 __rseq_flags D 0x4
 GLIBC_2.35 __rseq_offset D 0x4
 GLIBC_2.35 __rseq_size D 0x4
index 71c67f9803b10eaaec3689818956f91c8ee9c8d7..55f0c2ab9c6f7d910d0b1440ea91759a0d23a959 100644 (file)
@@ -3,6 +3,7 @@ GLIBC_2.32 __stack_chk_guard D 0x4
 GLIBC_2.32 __tls_get_addr F
 GLIBC_2.32 _dl_mcount F
 GLIBC_2.32 _r_debug D 0x14
+GLIBC_2.34 __rtld_version_placeholder F
 GLIBC_2.35 __rseq_flags D 0x4
 GLIBC_2.35 __rseq_offset D 0x4
 GLIBC_2.35 __rseq_size D 0x4
index 3859433b21671e4c095c2cce645534592ccc685e..f1da2c636ddb359d03dbb832b27312f25245a436 100644 (file)
@@ -1,3 +1,4 @@
+GLIBC_2.34 __rtld_version_placeholder F
 GLIBC_2.35 __rseq_flags D 0x4
 GLIBC_2.35 __rseq_offset D 0x4
 GLIBC_2.35 __rseq_size D 0x4
index 3859433b21671e4c095c2cce645534592ccc685e..f1da2c636ddb359d03dbb832b27312f25245a436 100644 (file)
@@ -1,3 +1,4 @@
+GLIBC_2.34 __rtld_version_placeholder F
 GLIBC_2.35 __rseq_flags D 0x4
 GLIBC_2.35 __rseq_offset D 0x4
 GLIBC_2.35 __rseq_size D 0x4
index 6bfc582b73563a40be695612f3abee6be75593f4..7f482276ed8df1d543e6e5841198e30e2ca5cc61 100644 (file)
@@ -3,6 +3,7 @@ GLIBC_2.29 __stack_chk_guard D 0x4
 GLIBC_2.29 __tls_get_addr F
 GLIBC_2.29 _dl_mcount F
 GLIBC_2.29 _r_debug D 0x14
+GLIBC_2.34 __rtld_version_placeholder F
 GLIBC_2.35 __rseq_flags D 0x4
 GLIBC_2.35 __rseq_offset D 0x4
 GLIBC_2.35 __rseq_size D 0x4
index efccd6a023675b15623539fd71288127dfb2fcda..7f5527fb301b913c8c2e7718647ff2053bf78331 100644 (file)
@@ -2,6 +2,7 @@ GLIBC_2.2 __libc_stack_end D 0x4
 GLIBC_2.2 _dl_mcount F
 GLIBC_2.2 _r_debug D 0x14
 GLIBC_2.3 __tls_get_addr F
+GLIBC_2.34 __rtld_version_placeholder F
 GLIBC_2.35 __rseq_flags D 0x4
 GLIBC_2.35 __rseq_offset D 0x4
 GLIBC_2.35 __rseq_size D 0x4
index 1eb94ae75fb2867c2aae1ed30e78f8a5d131fd8a..9c4a45d8dc525e52dd14503dee1f38507d9ccf95 100644 (file)
@@ -3,6 +3,7 @@ GLIBC_2.1 __libc_stack_end D 0x4
 GLIBC_2.1 _dl_mcount F
 GLIBC_2.3 ___tls_get_addr F
 GLIBC_2.3 __tls_get_addr F
+GLIBC_2.34 __rtld_version_placeholder F
 GLIBC_2.35 __rseq_flags D 0x4
 GLIBC_2.35 __rseq_offset D 0x4
 GLIBC_2.35 __rseq_size D 0x4
index 2cc68bcf7b3257138de20d45997b4fdef379d357..8ccb5be911e0e9a2c6728011cdfb5705ba9a805b 100644 (file)
@@ -2,6 +2,7 @@ GLIBC_2.2 __libc_stack_end D 0x8
 GLIBC_2.2 _dl_mcount F
 GLIBC_2.2 _r_debug D 0x28
 GLIBC_2.3 __tls_get_addr F
+GLIBC_2.34 __rtld_version_placeholder F
 GLIBC_2.35 __rseq_flags D 0x4
 GLIBC_2.35 __rseq_offset D 0x4
 GLIBC_2.35 __rseq_size D 0x4
index 3859433b21671e4c095c2cce645534592ccc685e..f1da2c636ddb359d03dbb832b27312f25245a436 100644 (file)
@@ -1,3 +1,4 @@
+GLIBC_2.34 __rtld_version_placeholder F
 GLIBC_2.35 __rseq_flags D 0x4
 GLIBC_2.35 __rseq_offset D 0x4
 GLIBC_2.35 __rseq_size D 0x4
index e62b2742afd08c8dd114814d8e101de1ce14d3fc..dadbf852d0522e77359dd54a20aa2f6acdf80840 100644 (file)
@@ -2,6 +2,7 @@ GLIBC_2.0 _r_debug D 0x14
 GLIBC_2.1 __libc_stack_end D 0x4
 GLIBC_2.1 _dl_mcount F
 GLIBC_2.3 __tls_get_addr F
+GLIBC_2.34 __rtld_version_placeholder F
 GLIBC_2.35 __rseq_flags D 0x4
 GLIBC_2.35 __rseq_offset D 0x4
 GLIBC_2.35 __rseq_size D 0x4
index 5d63d74e8f7f8b5fd14551dae7b0dd0a1640b5d3..89a0b7e4fd5a95faf7b34c544613b9aab4ce1384 100644 (file)
@@ -3,6 +3,7 @@ GLIBC_2.18 __stack_chk_guard D 0x4
 GLIBC_2.18 __tls_get_addr F
 GLIBC_2.18 _dl_mcount F
 GLIBC_2.18 _r_debug D 0x14
+GLIBC_2.34 __rtld_version_placeholder F
 GLIBC_2.35 __rseq_flags D 0x4
 GLIBC_2.35 __rseq_offset D 0x4
 GLIBC_2.35 __rseq_size D 0x4
index 53ca22de2f0218236acce5ae3f4f718b45fbf071..e304d1bb464b28f4afeb3a2de02fbaaaec654e2a 100644 (file)
@@ -2,6 +2,7 @@ GLIBC_2.0 _r_debug D 0x14
 GLIBC_2.2 __libc_stack_end D 0x4
 GLIBC_2.2 _dl_mcount F
 GLIBC_2.3 __tls_get_addr F
+GLIBC_2.34 __rtld_version_placeholder F
 GLIBC_2.35 __rseq_flags D 0x4
 GLIBC_2.35 __rseq_offset D 0x4
 GLIBC_2.35 __rseq_size D 0x4
index 53ca22de2f0218236acce5ae3f4f718b45fbf071..e304d1bb464b28f4afeb3a2de02fbaaaec654e2a 100644 (file)
@@ -2,6 +2,7 @@ GLIBC_2.0 _r_debug D 0x14
 GLIBC_2.2 __libc_stack_end D 0x4
 GLIBC_2.2 _dl_mcount F
 GLIBC_2.3 __tls_get_addr F
+GLIBC_2.34 __rtld_version_placeholder F
 GLIBC_2.35 __rseq_flags D 0x4
 GLIBC_2.35 __rseq_offset D 0x4
 GLIBC_2.35 __rseq_size D 0x4
index d1cdd68333a78f51415dd3952e82e1598078abe7..37a47ebc0a0d16c88eef4f54f2fe965ec9f4a7b6 100644 (file)
@@ -2,6 +2,7 @@ GLIBC_2.0 _r_debug D 0x28
 GLIBC_2.2 __libc_stack_end D 0x8
 GLIBC_2.2 _dl_mcount F
 GLIBC_2.3 __tls_get_addr F
+GLIBC_2.34 __rtld_version_placeholder F
 GLIBC_2.35 __rseq_flags D 0x4
 GLIBC_2.35 __rseq_offset D 0x4
 GLIBC_2.35 __rseq_size D 0x4
index bcbba1823eafa3cca0145ad4845060245fc32413..811ae9da2fa85399f220f27e839a6f00705d0093 100644 (file)
@@ -3,6 +3,7 @@ GLIBC_2.21 __stack_chk_guard D 0x4
 GLIBC_2.21 __tls_get_addr F
 GLIBC_2.21 _dl_mcount F
 GLIBC_2.21 _r_debug D 0x14
+GLIBC_2.34 __rtld_version_placeholder F
 GLIBC_2.35 __rseq_flags D 0x4
 GLIBC_2.35 __rseq_offset D 0x4
 GLIBC_2.35 __rseq_size D 0x4
index 0d033cb8bdf5b99c5bfea72f84a54bee94acfa4e..5a68aeb9eed338445ec18fdb9ef798baf6580bba 100644 (file)
@@ -4,6 +4,7 @@ GLIBC_2.1 _dl_mcount F
 GLIBC_2.22 __tls_get_addr_opt F
 GLIBC_2.23 __parse_hwcap_and_convert_at_platform F
 GLIBC_2.3 __tls_get_addr F
+GLIBC_2.34 __rtld_version_placeholder F
 GLIBC_2.35 __rseq_flags D 0x4
 GLIBC_2.35 __rseq_offset D 0x4
 GLIBC_2.35 __rseq_size D 0x4
index 9c627b1ddfc76ab587f5f10bdb9e896556af62a7..da24dc7fb52ad2d4e40edc3e784f22db5065ee1e 100644 (file)
@@ -4,6 +4,7 @@ GLIBC_2.3 __libc_stack_end D 0x8
 GLIBC_2.3 __tls_get_addr F
 GLIBC_2.3 _dl_mcount F
 GLIBC_2.3 _r_debug D 0x28
+GLIBC_2.34 __rtld_version_placeholder F
 GLIBC_2.35 __rseq_flags D 0x4
 GLIBC_2.35 __rseq_offset D 0x4
 GLIBC_2.35 __rseq_size D 0x4
index 3a748c281708bbe2dec72a9646a5a1c9c43f920a..b9ae89ae8d90ed9ec1e5dae715cb020fd60f0114 100644 (file)
@@ -4,6 +4,7 @@ GLIBC_2.17 _dl_mcount F
 GLIBC_2.17 _r_debug D 0x28
 GLIBC_2.22 __tls_get_addr_opt F
 GLIBC_2.23 __parse_hwcap_and_convert_at_platform F
+GLIBC_2.34 __rtld_version_placeholder F
 GLIBC_2.35 __rseq_flags D 0x4
 GLIBC_2.35 __rseq_offset D 0x4
 GLIBC_2.35 __rseq_size D 0x4
index 4c67ea18d6569fa5ca0e53dbf64bc6d76723bf0b..068368878eb2406ebdf0860d4947ed8af2f73f70 100644 (file)
@@ -3,6 +3,7 @@ GLIBC_2.33 __stack_chk_guard D 0x4
 GLIBC_2.33 __tls_get_addr F
 GLIBC_2.33 _dl_mcount F
 GLIBC_2.33 _r_debug D 0x14
+GLIBC_2.34 __rtld_version_placeholder F
 GLIBC_2.35 __rseq_flags D 0x4
 GLIBC_2.35 __rseq_offset D 0x4
 GLIBC_2.35 __rseq_size D 0x4
index 09596f09e21b0e9e731faac622df9557beccdf35..48431c91a9fd16b0ea02e22545d9ad0dc4f27b6f 100644 (file)
@@ -3,6 +3,7 @@ GLIBC_2.27 __stack_chk_guard D 0x8
 GLIBC_2.27 __tls_get_addr F
 GLIBC_2.27 _dl_mcount F
 GLIBC_2.27 _r_debug D 0x28
+GLIBC_2.34 __rtld_version_placeholder F
 GLIBC_2.35 __rseq_flags D 0x4
 GLIBC_2.35 __rseq_offset D 0x4
 GLIBC_2.35 __rseq_size D 0x4
index 2c47004baedebb5f52039a9ca1e2f55aa8f15345..c15288394a232a8caa3c89852148e87964ee982c 100644 (file)
@@ -2,6 +2,7 @@ GLIBC_2.0 _r_debug D 0x14
 GLIBC_2.1 __libc_stack_end D 0x4
 GLIBC_2.1 _dl_mcount F
 GLIBC_2.3 __tls_get_offset F
+GLIBC_2.34 __rtld_version_placeholder F
 GLIBC_2.35 __rseq_flags D 0x4
 GLIBC_2.35 __rseq_offset D 0x4
 GLIBC_2.35 __rseq_size D 0x4
index 385a73a2575884b17dd107b360392a746fdd70df..117d1430a4c6272e700ade91f93f53da4c4ae173 100644 (file)
@@ -2,6 +2,7 @@ GLIBC_2.2 __libc_stack_end D 0x8
 GLIBC_2.2 _dl_mcount F
 GLIBC_2.2 _r_debug D 0x28
 GLIBC_2.3 __tls_get_offset F
+GLIBC_2.34 __rtld_version_placeholder F
 GLIBC_2.35 __rseq_flags D 0x4
 GLIBC_2.35 __rseq_offset D 0x4
 GLIBC_2.35 __rseq_size D 0x4
index efccd6a023675b15623539fd71288127dfb2fcda..7f5527fb301b913c8c2e7718647ff2053bf78331 100644 (file)
@@ -2,6 +2,7 @@ GLIBC_2.2 __libc_stack_end D 0x4
 GLIBC_2.2 _dl_mcount F
 GLIBC_2.2 _r_debug D 0x14
 GLIBC_2.3 __tls_get_addr F
+GLIBC_2.34 __rtld_version_placeholder F
 GLIBC_2.35 __rseq_flags D 0x4
 GLIBC_2.35 __rseq_offset D 0x4
 GLIBC_2.35 __rseq_size D 0x4
index efccd6a023675b15623539fd71288127dfb2fcda..7f5527fb301b913c8c2e7718647ff2053bf78331 100644 (file)
@@ -2,6 +2,7 @@ GLIBC_2.2 __libc_stack_end D 0x4
 GLIBC_2.2 _dl_mcount F
 GLIBC_2.2 _r_debug D 0x14
 GLIBC_2.3 __tls_get_addr F
+GLIBC_2.34 __rtld_version_placeholder F
 GLIBC_2.35 __rseq_flags D 0x4
 GLIBC_2.35 __rseq_offset D 0x4
 GLIBC_2.35 __rseq_size D 0x4
index 8fb5ff3ef33379dbf1d891da05def7a83905fb65..3aac73f3df646cb6aada13f27e7f2ba67f08d998 100644 (file)
@@ -2,6 +2,7 @@ GLIBC_2.0 _r_debug D 0x14
 GLIBC_2.1 __libc_stack_end D 0x4
 GLIBC_2.1 _dl_mcount F
 GLIBC_2.3 __tls_get_addr F
+GLIBC_2.34 __rtld_version_placeholder F
 GLIBC_2.35 __rseq_flags D 0x4
 GLIBC_2.35 __rseq_offset D 0x4
 GLIBC_2.35 __rseq_size D 0x4
index 2cc68bcf7b3257138de20d45997b4fdef379d357..8ccb5be911e0e9a2c6728011cdfb5705ba9a805b 100644 (file)
@@ -2,6 +2,7 @@ GLIBC_2.2 __libc_stack_end D 0x8
 GLIBC_2.2 _dl_mcount F
 GLIBC_2.2 _r_debug D 0x28
 GLIBC_2.3 __tls_get_addr F
+GLIBC_2.34 __rtld_version_placeholder F
 GLIBC_2.35 __rseq_flags D 0x4
 GLIBC_2.35 __rseq_offset D 0x4
 GLIBC_2.35 __rseq_size D 0x4
index 49a8f31c933e546b6e682187431f184765e5fabb..ae622bdf9710bdbdba76f8a8ba3f88d2e11e519e 100644 (file)
@@ -2,6 +2,7 @@ GLIBC_2.2.5 __libc_stack_end D 0x8
 GLIBC_2.2.5 _dl_mcount F
 GLIBC_2.2.5 _r_debug D 0x28
 GLIBC_2.3 __tls_get_addr F
+GLIBC_2.34 __rtld_version_placeholder F
 GLIBC_2.35 __rseq_flags D 0x4
 GLIBC_2.35 __rseq_offset D 0x4
 GLIBC_2.35 __rseq_size D 0x4
index ce68cc6304f3a46e511afc87cabb593754817fd0..e17496d124b0c7b7f373a6cb39f092a8436da6ed 100644 (file)
@@ -2,6 +2,7 @@ GLIBC_2.16 __libc_stack_end D 0x4
 GLIBC_2.16 __tls_get_addr F
 GLIBC_2.16 _dl_mcount F
 GLIBC_2.16 _r_debug D 0x14
+GLIBC_2.34 __rtld_version_placeholder F
 GLIBC_2.35 __rseq_flags D 0x4
 GLIBC_2.35 __rseq_offset D 0x4
 GLIBC_2.35 __rseq_size D 0x4