Use TLS initial-exec model for __libc_tsd_CTYPE_* thread variables [BZ #33234]

Commit 10a66a8e42 ("Remove <libc-tsd.h>") removed the TLS initial-exec
(IE) model attribute from the __libc_tsd_CTYPE_* thread variable declarations
and definitions.  Commit a894f04d87 ("Optimize __libc_tsd_* thread
variable access") restored it on declarations.

Restore the TLS initial-exec model attribute on __libc_tsd_CTYPE_* thread
variable definitions.

This resolves test tst-locale1 failure on s390 32-bit, when using a
GNU linker without the fix from GNU binutils commit aefebe82dc89
("IBM zSystems: Fix offset relative to static TLS").

Reviewed-by: Florian Weimer <fweimer@redhat.com>
This commit is contained in:
Jens Remus 2025-07-25 15:40:03 +02:00 committed by Stefan Liebler
parent 1eec8431a5
commit e5363e6f46
1 changed files with 3 additions and 3 deletions

View File

@ -24,11 +24,11 @@
__ctype_init before user code runs, but this does not happen for __ctype_init before user code runs, but this does not happen for
threads in secondary namespaces. With the initializers, secondary threads in secondary namespaces. With the initializers, secondary
namespaces at least get locale data from the C locale. */ namespaces at least get locale data from the C locale. */
__thread const uint16_t * __libc_tsd_CTYPE_B __thread const uint16_t * __libc_tsd_CTYPE_B attribute_tls_model_ie
= (const uint16_t *) _nl_C_LC_CTYPE_class + 128; = (const uint16_t *) _nl_C_LC_CTYPE_class + 128;
__thread const int32_t * __libc_tsd_CTYPE_TOLOWER __thread const int32_t * __libc_tsd_CTYPE_TOLOWER attribute_tls_model_ie
= (const int32_t *) _nl_C_LC_CTYPE_tolower + 128; = (const int32_t *) _nl_C_LC_CTYPE_tolower + 128;
__thread const int32_t * __libc_tsd_CTYPE_TOUPPER __thread const int32_t * __libc_tsd_CTYPE_TOUPPER attribute_tls_model_ie
= (const int32_t *) _nl_C_LC_CTYPE_toupper + 128; = (const int32_t *) _nl_C_LC_CTYPE_toupper + 128;