From: H.J. Lu Date: Mon, 28 Jul 2025 19:16:11 +0000 (-0700) Subject: i386: Add GLIBC_ABI_GNU_TLS version [BZ #33221] X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d67776356dc0ed6986e5f924cf1ac166f68324b7;p=thirdparty%2Fglibc.git i386: Add GLIBC_ABI_GNU_TLS version [BZ #33221] On i386, programs and shared libraries with __thread usage may fail silently at run-time against glibc without the TLS run-time fix for: https://sourceware.org/bugzilla/show_bug.cgi?id=32996 Add GLIBC_ABI_GNU_TLS version to indicate that glibc has the working GNU TLS run-time. Linker can add the GLIBC_ABI_GNU_TLS version to binaries which depend on the working TLS run-time so that such programs and shared libraries will fail to load and run at run-time against libc.so without the GLIBC_ABI_GNU_TLS version, instead of fail silently at random. This fixes BZ #33221. Signed-off-by: H.J. Lu Reviewed-by: Sam James (cherry picked from commit ed1b7a5a489ab555a27fad9c101ebe2e1c1ba881) --- diff --git a/sysdeps/i386/Makefile b/sysdeps/i386/Makefile index ee6470d78e..c0c017b899 100644 --- a/sysdeps/i386/Makefile +++ b/sysdeps/i386/Makefile @@ -60,6 +60,15 @@ $(objpfx)tst-ld-sse-use.out: ../sysdeps/i386/tst-ld-sse-use.sh $(objpfx)ld.so @echo "Checking ld.so for SSE register use. This will take a few seconds..." $(BASH) $< $(objpfx) '$(NM)' '$(OBJDUMP)' '$(READELF)' > $@; \ $(evaluate-test) + +tests-special += $(objpfx)check-gnu-tls.out + +$(objpfx)check-gnu-tls.out: $(common-objpfx)libc.so + LC_ALL=C $(READELF) -V -W $< \ + | sed -ne '/.gnu.version_d/, /.gnu.version_r/ p' \ + | grep GLIBC_ABI_GNU_TLS > $@; \ + $(evaluate-test) +generated += check-gnu-tls.out else CFLAGS-.os += $(if $(filter rtld-%.os,$(@F)), $(rtld-CFLAGS)) endif diff --git a/sysdeps/i386/Versions b/sysdeps/i386/Versions index 36e23b466a..9c84c8ef04 100644 --- a/sysdeps/i386/Versions +++ b/sysdeps/i386/Versions @@ -28,6 +28,11 @@ libc { GLIBC_2.13 { __fentry__; } + GLIBC_ABI_GNU_TLS { + # 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 {