diff options
Diffstat (limited to 'libc/bionic/libc_init_static.cpp')
| -rw-r--r-- | libc/bionic/libc_init_static.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/libc/bionic/libc_init_static.cpp b/libc/bionic/libc_init_static.cpp index 8fbc20e97..514423d06 100644 --- a/libc/bionic/libc_init_static.cpp +++ b/libc/bionic/libc_init_static.cpp @@ -92,19 +92,22 @@ static void layout_static_tls(KernelArgumentBlock& args) { size_t phdr_ct = getauxval(AT_PHNUM); static TlsModule mod; + TlsModules& modules = __libc_shared_globals()->tls_modules; if (__bionic_get_tls_segment(phdr_start, phdr_ct, 0, &mod.segment)) { if (!__bionic_check_tls_alignment(&mod.segment.alignment)) { async_safe_fatal("error: TLS segment alignment in \"%s\" is not a power of 2: %zu\n", progname, mod.segment.alignment); } mod.static_offset = layout.reserve_exe_segment_and_tcb(&mod.segment, progname); - mod.first_generation = 1; - __libc_shared_globals()->tls_modules.generation = 1; - __libc_shared_globals()->tls_modules.module_count = 1; - __libc_shared_globals()->tls_modules.module_table = &mod; + mod.first_generation = kTlsGenerationFirst; + + modules.module_count = 1; + modules.module_table = &mod; } else { layout.reserve_exe_segment_and_tcb(nullptr, progname); } + // Enable the fast path in __tls_get_addr. + __libc_tls_generation_copy = modules.generation; layout.finish_layout(); } |
