Upstream commit: fffc2df8a3e2c8cda2991063d23086360268b777 - i386: Provide GLIBC_ABI_GNU_TLS symbol version [BZ #33221] - i386: Update ___tls_get_addr to preserve vector registers - Extend struct r_debug to support multiple namespaces (RHEL-101985) - Fix a potential crash in the dynamic loader when processing specific symbol versions (RHEL-109683) - Signal la_objopen for ld.so with dlmopen (RHEL-109693) - Switch to main malloc after final ld.so self-relocation (RHEL-109703) - Prevent ld.so from asserting and crashing during audited library loads (RHEL-109702) - x86-64: Provide GLIBC_ABI_DT_X86_64_PLT symbol version (RHEL-109621) - x86-64, i386: Provide GLIBC_ABI_GNU2_TLS symbol version (RHEL-109625) - Ensure fallback initialization of ctype TLS data pointers to fix segfaults in programs using dlmopen or auditors (RHEL-72018) - Handle load segment gaps in _dl_find_object (RHEL-104854) - AArch64: Improve codegen in SVE log1p - AArch64: Optimize inverse trig functions - AArch64: Avoid memset ifunc in cpu-features.c [BZ #33112] Resolves: RHEL-109536 Resolves: RHEL-72018 Resolves: RHEL-101985 Resolves: RHEL-104854 Resolves: RHEL-109621 Resolves: RHEL-109625 Resolves: RHEL-109683 Resolves: RHEL-109693 Resolves: RHEL-109702 Resolves: RHEL-109703
77 lines
2.9 KiB
Diff
77 lines
2.9 KiB
Diff
commit 269e89bd8d25a0659c6c963a509e152faefd6ba2
|
|
Author: H.J. Lu <hjl.tools@gmail.com>
|
|
Date: Thu Aug 14 07:03:20 2025 -0700
|
|
|
|
x86-64: Add GLIBC_ABI_DT_X86_64_PLT [BZ #33212]
|
|
|
|
When the linker -z mark-plt option is used to add DT_X86_64_PLT,
|
|
DT_X86_64_PLTSZ and DT_X86_64_PLTENT, the r_addend field of the
|
|
R_X86_64_JUMP_SLOT relocation stores the offset of the indirect
|
|
branch instruction. However, glibc versions without the commit:
|
|
|
|
commit f8587a61892cbafd98ce599131bf4f103466f084
|
|
Author: H.J. Lu <hjl.tools@gmail.com>
|
|
Date: Fri May 20 19:21:48 2022 -0700
|
|
|
|
x86-64: Ignore r_addend for R_X86_64_GLOB_DAT/R_X86_64_JUMP_SLOT
|
|
|
|
According to x86-64 psABI, r_addend should be ignored for R_X86_64_GLOB_DAT
|
|
and R_X86_64_JUMP_SLOT. Since linkers always set their r_addends to 0, we
|
|
can ignore their r_addends.
|
|
|
|
Reviewed-by: Fangrui Song <maskray@google.com>
|
|
|
|
won't ignore the r_addend value in the R_X86_64_JUMP_SLOT relocation.
|
|
Such programs and shared libraries will fail at run-time randomly.
|
|
|
|
Add GLIBC_ABI_DT_X86_64_PLT version to indicate that glibc is compatible
|
|
with DT_X86_64_PLT.
|
|
|
|
The linker can add the glibc GLIBC_ABI_DT_X86_64_PLT version dependency
|
|
whenever -z mark-plt is passed to the linker. The resulting programs and
|
|
shared libraries will fail to load at run-time against libc.so without the
|
|
GLIBC_ABI_DT_X86_64_PLT version, instead of fail randomly.
|
|
|
|
This fixes BZ #33212.
|
|
|
|
Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
|
|
Reviewed-by: Sam James <sam@gentoo.org>
|
|
(cherry picked from commit 399384e0c8193e31aea014220ccfa24300ae5938)
|
|
|
|
diff --git a/sysdeps/x86_64/Makefile b/sysdeps/x86_64/Makefile
|
|
index af978601657c2129..579bb33ada0e5f16 100644
|
|
--- a/sysdeps/x86_64/Makefile
|
|
+++ b/sysdeps/x86_64/Makefile
|
|
@@ -210,6 +210,15 @@ LDFLAGS-tst-plt-rewritemod2.so = -Wl,-z,now,-z,undefs
|
|
tst-plt-rewrite2-ENV = GLIBC_TUNABLES=glibc.cpu.plt_rewrite=2
|
|
$(objpfx)tst-plt-rewrite2: $(objpfx)tst-plt-rewritemod2.so
|
|
|
|
+tests-special += $(objpfx)check-dt-x86-64-plt.out
|
|
+
|
|
+$(objpfx)check-dt-x86-64-plt.out: $(common-objpfx)libc.so
|
|
+ LC_ALL=C $(READELF) -V -W $< \
|
|
+ | sed -ne '/.gnu.version_d/, /.gnu.version_r/ p' \
|
|
+ | grep GLIBC_ABI_DT_X86_64_PLT > $@; \
|
|
+ $(evaluate-test)
|
|
+generated += check-dt-x86-64-plt.out
|
|
+
|
|
tests-special += $(objpfx)check-gnu2-tls.out
|
|
|
|
$(objpfx)check-gnu2-tls.out: $(common-objpfx)libc.so
|
|
diff --git a/sysdeps/x86_64/Versions b/sysdeps/x86_64/Versions
|
|
index a63c11bcb25adf48..0a759029e5a00cf1 100644
|
|
--- a/sysdeps/x86_64/Versions
|
|
+++ b/sysdeps/x86_64/Versions
|
|
@@ -10,6 +10,11 @@ libc {
|
|
# by scripts/versions.awk.
|
|
__placeholder_only_for_empty_version_map;
|
|
}
|
|
+ GLIBC_ABI_DT_X86_64_PLT {
|
|
+ # This symbol is used only for empty version map and will be removed
|
|
+ # by scripts/versions.awk.
|
|
+ __placeholder_only_for_empty_version_map;
|
|
+ }
|
|
}
|
|
libm {
|
|
GLIBC_2.1 {
|