| commit 948ebc098ed3cd928ea10997f990115e7770bda3 |
| Author: Florian Weimer <fweimer@redhat.com> |
| Date: Thu Jan 27 16:03:58 2022 +0100 |
| |
| Fix glibc 2.34 ABI omission (missing GLIBC_2.34 in dynamic loader) |
| |
| 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> |
| (cherry picked from commit af121ae3e7cd12628c91ecfc46a9d65313a6e972) |
| |
| diff --git a/elf/Makefile b/elf/Makefile |
| index 11ff0aa8438de4e4..cd8725c76f4cfb48 100644 |
| |
| |
| @@ -117,6 +117,7 @@ elide-routines.os = \ |
| # interpreter and operating independent of libc. |
| rtld-routines = \ |
| $(all-dl-routines) \ |
| + dl-compat \ |
| dl-conflict \ |
| dl-diagnostics \ |
| dl-diagnostics-cpu \ |
| diff --git a/elf/Versions b/elf/Versions |
| index 775aab62af500f6c..2af210b8f771c950 100644 |
| |
| |
| @@ -48,6 +48,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 |
| index 0000000000000000..cc560c515930f59a |
| |
| |
| @@ -0,0 +1,32 @@ |
| +/* 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> |
| + |
| +/* GLIBC_2.34 placeholder for future symbol moves. */ |
| + |
| +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); |
| diff --git a/sysdeps/mach/hurd/i386/ld.abilist b/sysdeps/mach/hurd/i386/ld.abilist |
| index 7e20c5e7ce8a7a5e..ebba31f7706d854d 100644 |
| |
| |
| @@ -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 |
| diff --git a/sysdeps/unix/sysv/linux/aarch64/ld.abilist b/sysdeps/unix/sysv/linux/aarch64/ld.abilist |
| index 80b2fe672541c6e9..b7196a80e2df8efc 100644 |
| |
| |
| @@ -3,3 +3,4 @@ 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 |
| diff --git a/sysdeps/unix/sysv/linux/alpha/ld.abilist b/sysdeps/unix/sysv/linux/alpha/ld.abilist |
| index 98a03f611f98f3a4..13f7fc74af62941d 100644 |
| |
| |
| @@ -2,4 +2,5 @@ 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.4 __stack_chk_guard D 0x8 |
| diff --git a/sysdeps/unix/sysv/linux/arc/ld.abilist b/sysdeps/unix/sysv/linux/arc/ld.abilist |
| index 048f17c8486f3d54..7284383a6bea8e64 100644 |
| |
| |
| @@ -3,3 +3,4 @@ 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 |
| diff --git a/sysdeps/unix/sysv/linux/arm/be/ld.abilist b/sysdeps/unix/sysv/linux/arm/be/ld.abilist |
| index cc8825c3bc68ad4a..7987bbae1112aa3d 100644 |
| |
| |
| @@ -1,3 +1,4 @@ |
| +GLIBC_2.34 __rtld_version_placeholder F |
| GLIBC_2.4 __libc_stack_end D 0x4 |
| GLIBC_2.4 __stack_chk_guard D 0x4 |
| GLIBC_2.4 __tls_get_addr F |
| diff --git a/sysdeps/unix/sysv/linux/arm/le/ld.abilist b/sysdeps/unix/sysv/linux/arm/le/ld.abilist |
| index cc8825c3bc68ad4a..7987bbae1112aa3d 100644 |
| |
| |
| @@ -1,3 +1,4 @@ |
| +GLIBC_2.34 __rtld_version_placeholder F |
| GLIBC_2.4 __libc_stack_end D 0x4 |
| GLIBC_2.4 __stack_chk_guard D 0x4 |
| GLIBC_2.4 __tls_get_addr F |
| diff --git a/sysdeps/unix/sysv/linux/csky/ld.abilist b/sysdeps/unix/sysv/linux/csky/ld.abilist |
| index 564ac09737d6d8d5..4939b20631dc6c54 100644 |
| |
| |
| @@ -3,3 +3,4 @@ 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 |
| diff --git a/sysdeps/unix/sysv/linux/hppa/ld.abilist b/sysdeps/unix/sysv/linux/hppa/ld.abilist |
| index d155a59843df9091..7cc9ebd792c2aadc 100644 |
| |
| |
| @@ -2,4 +2,5 @@ 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.4 __stack_chk_guard D 0x4 |
| diff --git a/sysdeps/unix/sysv/linux/i386/ld.abilist b/sysdeps/unix/sysv/linux/i386/ld.abilist |
| index 0478e220712a55e6..e8d187b14d722a64 100644 |
| |
| |
| @@ -3,3 +3,4 @@ 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 |
| diff --git a/sysdeps/unix/sysv/linux/ia64/ld.abilist b/sysdeps/unix/sysv/linux/ia64/ld.abilist |
| index 33f91199bfa516fb..be5122650ae2b327 100644 |
| |
| |
| @@ -2,3 +2,4 @@ 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 |
| diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/ld.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/ld.abilist |
| index cc8825c3bc68ad4a..7987bbae1112aa3d 100644 |
| |
| |
| @@ -1,3 +1,4 @@ |
| +GLIBC_2.34 __rtld_version_placeholder F |
| GLIBC_2.4 __libc_stack_end D 0x4 |
| GLIBC_2.4 __stack_chk_guard D 0x4 |
| GLIBC_2.4 __tls_get_addr F |
| diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/ld.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/ld.abilist |
| index 3ba474c27f62fb10..4f2854edf7746958 100644 |
| |
| |
| @@ -2,4 +2,5 @@ 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.4 __stack_chk_guard D 0x4 |
| diff --git a/sysdeps/unix/sysv/linux/microblaze/ld.abilist b/sysdeps/unix/sysv/linux/microblaze/ld.abilist |
| index a4933c3541119538..9f0fdeca38890a34 100644 |
| |
| |
| @@ -3,3 +3,4 @@ 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 |
| diff --git a/sysdeps/unix/sysv/linux/mips/mips32/ld.abilist b/sysdeps/unix/sysv/linux/mips/mips32/ld.abilist |
| index be09641a48962434..f750067d5c34bf42 100644 |
| |
| |
| @@ -2,4 +2,5 @@ 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.4 __stack_chk_guard D 0x4 |
| diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/ld.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/ld.abilist |
| index be09641a48962434..f750067d5c34bf42 100644 |
| |
| |
| @@ -2,4 +2,5 @@ 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.4 __stack_chk_guard D 0x4 |
| diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/ld.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/ld.abilist |
| index 1ea36e13f294a249..2fba6a9b6ec92e47 100644 |
| |
| |
| @@ -2,4 +2,5 @@ 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.4 __stack_chk_guard D 0x8 |
| diff --git a/sysdeps/unix/sysv/linux/nios2/ld.abilist b/sysdeps/unix/sysv/linux/nios2/ld.abilist |
| index 52178802dd82b59a..57dfad5a53b739e8 100644 |
| |
| |
| @@ -3,3 +3,4 @@ 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 |
| diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/ld.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/ld.abilist |
| index 4bbfba7a61c7a5ef..e89660739262c6ab 100644 |
| |
| |
| @@ -4,3 +4,4 @@ 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 |
| diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/ld.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/ld.abilist |
| index 283fb4510bea40ba..ce0bc639597c4bd9 100644 |
| |
| |
| @@ -4,3 +4,4 @@ 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 |
| diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/ld.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/ld.abilist |
| index b1f313c7cd33defc..65b22674d2462e96 100644 |
| |
| |
| @@ -4,3 +4,4 @@ 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 |
| diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/ld.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/ld.abilist |
| index 94ca64c43db63b2a..5ad4c81d12d7a612 100644 |
| |
| |
| @@ -3,3 +3,4 @@ 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 |
| diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/ld.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/ld.abilist |
| index 845f356c3c3fad54..479efdea9bb654bb 100644 |
| |
| |
| @@ -3,3 +3,4 @@ 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 |
| diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/ld.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/ld.abilist |
| index b56f005bebd3baf1..d5ecb636bb792bdf 100644 |
| |
| |
| @@ -2,3 +2,4 @@ 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 |
| diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/ld.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/ld.abilist |
| index 6f788a086d68aaa5..62a5e1d99a2e6f42 100644 |
| |
| |
| @@ -2,3 +2,4 @@ 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 |
| diff --git a/sysdeps/unix/sysv/linux/sh/be/ld.abilist b/sysdeps/unix/sysv/linux/sh/be/ld.abilist |
| index d155a59843df9091..7cc9ebd792c2aadc 100644 |
| |
| |
| @@ -2,4 +2,5 @@ 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.4 __stack_chk_guard D 0x4 |
| diff --git a/sysdeps/unix/sysv/linux/sh/le/ld.abilist b/sysdeps/unix/sysv/linux/sh/le/ld.abilist |
| index d155a59843df9091..7cc9ebd792c2aadc 100644 |
| |
| |
| @@ -2,4 +2,5 @@ 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.4 __stack_chk_guard D 0x4 |
| diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/ld.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/ld.abilist |
| index 0c6610e3c2f00cf3..2e6054349871e7d5 100644 |
| |
| |
| @@ -2,3 +2,4 @@ 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 |
| diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/ld.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/ld.abilist |
| index 33f91199bfa516fb..be5122650ae2b327 100644 |
| |
| |
| @@ -2,3 +2,4 @@ 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 |
| diff --git a/sysdeps/unix/sysv/linux/x86_64/64/ld.abilist b/sysdeps/unix/sysv/linux/x86_64/64/ld.abilist |
| index d3cdf7611eb9cab3..afddaec57c11f837 100644 |
| |
| |
| @@ -2,3 +2,4 @@ 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 |
| diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/ld.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/ld.abilist |
| index c70bccf78245a552..defc488d137c61c3 100644 |
| |
| |
| @@ -2,3 +2,4 @@ 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 |