glibc/sysdeps
H.J. Lu 88866d885c x86: Update _dl_tlsdesc_dynamic to preserve caller-saved registers
Compiler generates the following instruction sequence for GNU2 dynamic
TLS access:

	leaq	tls_var@TLSDESC(%rip), %rax
	call	*tls_var@TLSCALL(%rax)

or

	leal	tls_var@TLSDESC(%ebx), %eax
	call	*tls_var@TLSCALL(%eax)

CALL instruction is transparent to compiler which assumes all registers,
except for EFLAGS and RAX/EAX, are unchanged after CALL.  When
_dl_tlsdesc_dynamic is called, it calls __tls_get_addr on the slow
path.  __tls_get_addr is a normal function which doesn't preserve any
caller-saved registers.  _dl_tlsdesc_dynamic saved and restored integer
caller-saved registers, but didn't preserve any other caller-saved
registers.  Add _dl_tlsdesc_dynamic IFUNC functions for FNSAVE, FXSAVE,
XSAVE and XSAVEC to save and restore all caller-saved registers.  This
fixes BZ #31372.

Add GLRO(dl_x86_64_runtime_resolve) with GLRO(dl_x86_tlsdesc_dynamic)
to optimize elf_machine_runtime_setup.
Reviewed-by: Noah Goldstein <goldstein.w.n@gmail.com>

(cherry picked from commit 0aac205a81)
2025-08-19 18:22:00 -07:00
..
aarch64 AArch64: Use prefer_sve_ifuncs for SVE memset 2025-02-28 14:44:25 +00:00
alpha configure: Use autoconf 2.71 2023-07-17 10:08:10 -04:00
arc login: Check default sizes of structs utmp, utmpx, lastlog 2024-04-19 18:38:23 +02:00
arm elf: Do not add a copy of _dl_find_object to libc.so 2025-08-14 09:07:44 +02:00
csky login: structs utmp, utmpx, lastlog _TIME_BITS independence (bug 30701) 2024-04-19 18:38:24 +02:00
generic elf: Support recursive use of dynamic TLS in interposed malloc 2025-01-10 16:49:38 -08:00
gnu configure: Use autoconf 2.71 2023-07-17 10:08:10 -04:00
hppa login: Check default sizes of structs utmp, utmpx, lastlog 2024-04-19 18:38:23 +02:00
htl Fix misspellings in sysdeps/ -- BZ 25337 2023-05-30 23:02:29 +00:00
hurd hurd: Fix using interposable hurd_thread_self 2023-05-19 20:45:51 +02:00
i386 x86: Update _dl_tlsdesc_dynamic to preserve caller-saved registers 2025-08-19 18:22:00 -07:00
ia64 configure: Use autoconf 2.71 2023-07-17 10:08:10 -04:00
ieee754 math: Improve layout of exp/exp10 data 2025-02-28 14:52:00 +00:00
loongarch LoongArch: Correct {__ieee754, _}_scalb -> {__ieee754, _}_scalbf 2024-03-22 09:25:39 +08:00
m68k login: structs utmp, utmpx, lastlog _TIME_BITS independence (bug 30701) 2024-04-19 18:38:24 +02:00
mach malloc: Use __get_nprocs on arena_get2 (BZ 30945) 2024-02-12 09:53:27 -03:00
microblaze login: structs utmp, utmpx, lastlog _TIME_BITS independence (bug 30701) 2024-04-19 18:38:24 +02:00
mips login: structs utmp, utmpx, lastlog _TIME_BITS independence (bug 30701) 2024-04-19 18:38:24 +02:00
nios2 login: structs utmp, utmpx, lastlog _TIME_BITS independence (bug 30701) 2024-04-19 18:38:24 +02:00
nptl nptl: PTHREAD_COND_INITIALIZER compatibility with pre-2.41 versions (bug 32786) 2025-07-11 13:56:56 -04:00
or1k login: Check default sizes of structs utmp, utmpx, lastlog 2024-04-19 18:38:23 +02:00
posix Fix underallocation of abort_msg_s struct (CVE-2025-0395) 2025-01-22 17:10:37 +01:00
powerpc login: structs utmp, utmpx, lastlog _TIME_BITS independence (bug 30701) 2024-04-19 18:38:24 +02:00
pthread Add crt1-2.0.o for glibc 2.0 compatibility tests 2024-10-01 10:33:51 +08:00
riscv login: Check default sizes of structs utmp, utmpx, lastlog 2024-04-19 18:38:23 +02:00
s390 s390x: Fix segfault in wcsncmp [BZ #31934] 2024-07-16 10:26:44 +02:00
sh login: structs utmp, utmpx, lastlog _TIME_BITS independence (bug 30701) 2024-04-19 18:38:24 +02:00
sparc login: structs utmp, utmpx, lastlog _TIME_BITS independence (bug 30701) 2024-04-19 18:38:24 +02:00
unix x32/cet: Support shadow stack during startup for Linux 6.10 2025-08-19 18:11:21 -07:00
wordsize-32
wordsize-64
x86 x86: Update _dl_tlsdesc_dynamic to preserve caller-saved registers 2025-08-19 18:22:00 -07:00
x86_64 x86: Update _dl_tlsdesc_dynamic to preserve caller-saved registers 2025-08-19 18:22:00 -07:00