Index: libexec/ld.elf_so/tls.c =================================================================== RCS file: /cvsroot/src/libexec/ld.elf_so/tls.c,v retrieving revision 1.23 diff -u -p -r1.23 tls.c --- libexec/ld.elf_so/tls.c 30 Nov 2024 01:04:05 -0000 1.23 +++ libexec/ld.elf_so/tls.c 27 Sep 2025 13:12:53 -0000 @@ -71,8 +71,16 @@ static void *_rtld_tls_module_allocate(s #define TLS_DTV_OFFSET 0 #endif +#if defined(__HAVE_TLS_VARIANT_I) +#define _RTLD_TLS_INITIAL_OFFSET sizeof(struct tls_tcb) +#endif +#if defined(__HAVE_TLS_VARIANT_II) +#define _RTLD_TLS_INITIAL_OFFSET 0 +#endif + static size_t _rtld_tls_static_space; /* Static TLS space allocated */ -static size_t _rtld_tls_static_offset; /* Next offset for static TLS to use */ +static size_t _rtld_tls_static_offset = + _RTLD_TLS_INITIAL_OFFSET; /* Next offset for static TLS to use */ size_t _rtld_tls_dtv_generation = 1; /* Bumped on each load of obj w/ TLS */ size_t _rtld_tls_max_index = 1; /* Max index into up-to-date DTV */ @@ -247,7 +255,6 @@ _rtld_tls_allocate_locked(void) p = xcalloc(_rtld_tls_static_space + sizeof(struct tls_tcb)); #ifdef __HAVE_TLS_VARIANT_I tcb = (struct tls_tcb *)p; - p += sizeof(struct tls_tcb); #else p += _rtld_tls_static_space; tcb = (struct tls_tcb *)p;