diff options
| author | Ulrich Drepper <drepper@redhat.com> | 2006-10-27 23:11:47 +0000 |
|---|---|---|
| committer | Ulrich Drepper <drepper@redhat.com> | 2006-10-27 23:11:47 +0000 |
| commit | b52bbc1bdf3886da8dd3265fd955cafe5368d34a (patch) | |
| tree | 117b2e9abb35c86cb2259bf7cdf639fd0df9d39f /elf | |
| parent | ffd0e1b7e9b540716e5a98b49157eb1aed231b57 (diff) | |
| download | glibc-b52bbc1bdf3886da8dd3265fd955cafe5368d34a.tar.xz glibc-b52bbc1bdf3886da8dd3265fd955cafe5368d34a.zip | |
USE_TLS support is now default.
* tls.make.c: USE_TLS support is now default.
* csu/Versions: Likewise.
* csu/libc-start.c: Likewise.
* csu/libc-tls.c: Likewise.
* csu/version.c: Likewise.
* dlfcn/dlinfo.c: Likewise.
* elf/dl-addr.c: Likewise.
* elf/dl-cache.c: Likewise.
* elf/dl-close.c: Likewise.
* elf/dl-iteratephdr.c: Likewise.
* elf/dl-load.c: Likewise.
* elf/dl-lookup.c: Likewise.
* elf/dl-object.c: Likewise.
* elf/dl-open.c: Likewise.
* elf/dl-reloc.c: Likewise.
* elf/dl-support.c: Likewise.
* elf/dl-sym.c: Likewise.
* elf/dl-sysdep.c: Likewise.
* elf/dl-tls.c: Likewise.
* elf/ldconfig.c: Likewise.
* elf/rtld.c: Likewise.
* elf/tst-tls-dlinfo.c: Likewise.
* elf/tst-tls1.c: Likewise.
* elf/tst-tls10.h: Likewise.
* elf/tst-tls14.c: Likewise.
* elf/tst-tls2.c: Likewise.
* elf/tst-tls3.c: Likewise.
* elf/tst-tls4.c: Likewise.
* elf/tst-tls5.c: Likewise.
* elf/tst-tls6.c: Likewise.
* elf/tst-tls7.c: Likewise.
* elf/tst-tls8.c: Likewise.
* elf/tst-tls9.c: Likewise.
* elf/tst-tlsmod1.c: Likewise.
* elf/tst-tlsmod13.c: Likewise.
* elf/tst-tlsmod13a.c: Likewise.
* elf/tst-tlsmod14a.c: Likewise.
* elf/tst-tlsmod2.c: Likewise.
* elf/tst-tlsmod3.c: Likewise.
* elf/tst-tlsmod4.c: Likewise.
* elf/tst-tlsmod5.c: Likewise.
* elf/tst-tlsmod6.c: Likewise.
* include/errno.h: Likewise.
* include/link.h: Likewise.
* include/tls.h: Likewise.
* locale/global-locale.c: Likewise.
* locale/localeinfo.h: Likewise.
* malloc/arena.c: Likewise.
* malloc/hooks.c: Likewise.
* malloc/malloc.c: Likewise.
* resolv/Versions: Likewise.
* sysdeps/alpha/dl-machine.h: Likewise.
* sysdeps/alpha/libc-tls.c: Likewise.
* sysdeps/generic/ldsodefs.h: Likewise.
* sysdeps/generic/tls.h: Likewise.
* sysdeps/i386/dl-machine.h: Likewise.
* sysdeps/ia64/dl-machine.h: Likewise.
* sysdeps/ia64/libc-tls.c: Likewise.
* sysdeps/mach/hurd/fork.c: Likewise.
* sysdeps/mach/hurd/i386/tls.h: Likewise.
* sysdeps/powerpc/powerpc32/dl-machine.c: Likwise.
* sysdeps/powerpc/powerpc32/dl-machine.h: Likewise.
* sysdeps/powerpc/powerpc64/dl-machine.h: Likewise.
* sysdeps/s390/libc-tls.c: Likewise.
* sysdeps/s390/s390-32/dl-machine.h: Likewise.
* sysdeps/s390/s390-64/dl-machine.h: Likewise.
* sysdeps/sh/dl-machine.h: Likewise.
* sysdeps/sparc/sparc32/dl-machine.h: Likewise.
* sysdeps/sparc/sparc64/dl-machine.h: Likewise.
* sysdeps/x86_64/dl-machine.h: Likewise.
Diffstat (limited to 'elf')
| -rw-r--r-- | elf/dl-addr.c | 4 | ||||
| -rw-r--r-- | elf/dl-cache.c | 6 | ||||
| -rw-r--r-- | elf/dl-close.c | 28 | ||||
| -rw-r--r-- | elf/dl-iteratephdr.c | 2 | ||||
| -rw-r--r-- | elf/dl-load.c | 8 | ||||
| -rw-r--r-- | elf/dl-lookup.c | 2 | ||||
| -rw-r--r-- | elf/dl-object.c | 2 | ||||
| -rw-r--r-- | elf/dl-open.c | 12 | ||||
| -rw-r--r-- | elf/dl-reloc.c | 24 | ||||
| -rw-r--r-- | elf/dl-support.c | 4 | ||||
| -rw-r--r-- | elf/dl-sym.c | 8 | ||||
| -rw-r--r-- | elf/dl-sysdep.c | 32 | ||||
| -rw-r--r-- | elf/dl-tls.c | 79 | ||||
| -rw-r--r-- | elf/ldconfig.c | 2 | ||||
| -rw-r--r-- | elf/rtld.c | 50 | ||||
| -rw-r--r-- | elf/tst-tls-dlinfo.c | 4 | ||||
| -rw-r--r-- | elf/tst-tls1.c | 8 | ||||
| -rw-r--r-- | elf/tst-tls10.h | 3 | ||||
| -rw-r--r-- | elf/tst-tls14.c | 8 | ||||
| -rw-r--r-- | elf/tst-tls2.c | 8 | ||||
| -rw-r--r-- | elf/tst-tls3.c | 8 | ||||
| -rw-r--r-- | elf/tst-tls4.c | 4 | ||||
| -rw-r--r-- | elf/tst-tls5.c | 4 | ||||
| -rw-r--r-- | elf/tst-tls6.c | 4 | ||||
| -rw-r--r-- | elf/tst-tls7.c | 4 | ||||
| -rw-r--r-- | elf/tst-tls8.c | 4 | ||||
| -rw-r--r-- | elf/tst-tls9.c | 4 | ||||
| -rw-r--r-- | elf/tst-tlsmod1.c | 4 | ||||
| -rw-r--r-- | elf/tst-tlsmod13.c | 3 | ||||
| -rw-r--r-- | elf/tst-tlsmod13a.c | 3 | ||||
| -rw-r--r-- | elf/tst-tlsmod14a.c | 10 | ||||
| -rw-r--r-- | elf/tst-tlsmod2.c | 2 | ||||
| -rw-r--r-- | elf/tst-tlsmod3.c | 4 | ||||
| -rw-r--r-- | elf/tst-tlsmod4.c | 4 | ||||
| -rw-r--r-- | elf/tst-tlsmod5.c | 2 | ||||
| -rw-r--r-- | elf/tst-tlsmod6.c | 2 |
36 files changed, 98 insertions, 262 deletions
diff --git a/elf/dl-addr.c b/elf/dl-addr.c index 720b24d04b..e55dc4b46f 100644 --- a/elf/dl-addr.c +++ b/elf/dl-addr.c @@ -93,9 +93,7 @@ _dl_addr (const void *address, Dl_info *info, so we can omit that test here. */ if ((symtab[symndx].st_shndx != SHN_UNDEF || symtab[symndx].st_value != 0) -#ifdef USE_TLS && ELFW(ST_TYPE) (symtab[symndx].st_info) != STT_TLS -#endif && DL_ADDR_SYM_MATCH (match, &symtab[symndx], matchsym, addr) && symtab[symndx].st_name < strtabsize) @@ -123,9 +121,7 @@ _dl_addr (const void *address, Dl_info *info, for (; (void *) symtab < (void *) symtabend; ++symtab) if ((ELFW(ST_BIND) (symtab->st_info) == STB_GLOBAL || ELFW(ST_BIND) (symtab->st_info) == STB_WEAK) -#ifdef USE_TLS && ELFW(ST_TYPE) (symtab->st_info) != STT_TLS -#endif && (symtab->st_shndx != SHN_UNDEF || symtab->st_value != 0) && DL_ADDR_SYM_MATCH (match, symtab, matchsym, addr) diff --git a/elf/dl-cache.c b/elf/dl-cache.c index fc7d9916c6..bbeba77e4a 100644 --- a/elf/dl-cache.c +++ b/elf/dl-cache.c @@ -256,11 +256,7 @@ _dl_load_cache_lookup (const char *name) platform = 1ULL << platform; /* Only accept hwcap if it's for the right platform. */ -#ifdef USE_TLS -# define _DL_HWCAP_TLS_MASK (1LL << 63) -#else -# define _DL_HWCAP_TLS_MASK 0 -#endif +#define _DL_HWCAP_TLS_MASK (1LL << 63) #define HWCAP_CHECK \ if (GLRO(dl_osversion) && lib->osversion > GLRO(dl_osversion)) \ continue; \ diff --git a/elf/dl-close.c b/elf/dl-close.c index fdd9fe6719..47316ec7f7 100644 --- a/elf/dl-close.c +++ b/elf/dl-close.c @@ -41,7 +41,6 @@ typedef void (*fini_t) (void); #define IDX_STILL_USED -1 -#ifdef USE_TLS /* Returns true we an non-empty was found. */ static bool remove_slotinfo (size_t idx, struct dtv_slotinfo_list *listp, size_t disp, @@ -103,7 +102,6 @@ remove_slotinfo (size_t idx, struct dtv_slotinfo_list *listp, size_t disp, /* No non-entry in this list element. */ return false; } -#endif void @@ -136,9 +134,7 @@ _dl_close_worker (struct link_map *map) retry: dl_close_state = pending; -#ifdef USE_TLS bool any_tls = false; -#endif const unsigned int nloaded = GL(dl_ns)[ns]._ns_nloaded; char used[nloaded]; char done[nloaded]; @@ -460,11 +456,9 @@ _dl_close_worker (struct link_map *map) r->r_state = RT_DELETE; _dl_debug_state (); -#ifdef USE_TLS size_t tls_free_start; size_t tls_free_end; tls_free_start = tls_free_end = NO_TLS_OFFSET; -#endif /* Check each element of the search list to see if all references to it are gone. */ @@ -495,7 +489,6 @@ _dl_close_worker (struct link_map *map) --GL(dl_ns)[ns]._ns_main_searchlist->r_nlist; } -#ifdef USE_TLS /* Remove the object from the dtv slotinfo array if it uses TLS. */ if (__builtin_expect (imap->l_tls_blocksize > 0, 0)) { @@ -514,7 +507,7 @@ _dl_close_worker (struct link_map *map) this search list, going in either direction. When the whole chunk is at the end of the used area then we can reclaim it. */ -# if TLS_TCB_AT_TP +#if TLS_TCB_AT_TP if (tls_free_start == NO_TLS_OFFSET || (size_t) imap->l_tls_offset == tls_free_start) { @@ -554,7 +547,7 @@ _dl_close_worker (struct link_map *map) = tls_free_end - imap->l_tls_blocksize; } } -# elif TLS_DTV_AT_TP +#elif TLS_DTV_AT_TP if ((size_t) imap->l_tls_offset == tls_free_end) /* Extend the contiguous chunk being reclaimed. */ tls_free_end -= imap->l_tls_blocksize; @@ -571,12 +564,11 @@ _dl_close_worker (struct link_map *map) tls_free_start = imap->l_tls_offset; tls_free_end = tls_free_start + imap->l_tls_blocksize; } -# else -# error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined" -# endif +#else +# error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined" +#endif } } -#endif /* We can unmap all the maps at once. We determined the start address and length when we loaded the object and @@ -642,7 +634,6 @@ _dl_close_worker (struct link_map *map) } } -#ifdef USE_TLS /* If we removed any object which uses TLS bump the generation counter. */ if (any_tls) { @@ -652,7 +643,6 @@ _dl_close_worker (struct link_map *map) if (tls_free_end == GL(dl_tls_static_used)) GL(dl_tls_static_used) = tls_free_start; } -#endif #ifdef SHARED /* Auditing checkpoint: we have deleted all objects. */ @@ -712,7 +702,6 @@ _dl_close (void *_map) } -#ifdef USE_TLS static bool __libc_freeres_fn_section free_slotinfo (struct dtv_slotinfo_list **elemp) { @@ -739,7 +728,6 @@ free_slotinfo (struct dtv_slotinfo_list **elemp) return true; } -#endif libc_freeres_fn (free_mem) @@ -765,22 +753,20 @@ libc_freeres_fn (free_mem) free (old); } -#ifdef USE_TLS if (USE___THREAD || GL(dl_tls_dtv_slotinfo_list) != NULL) { /* Free the memory allocated for the dtv slotinfo array. We can do this only if all modules which used this memory are unloaded. */ -# ifdef SHARED +#ifdef SHARED if (GL(dl_initial_dtv) == NULL) /* There was no initial TLS setup, it was set up later when it used the normal malloc. */ free_slotinfo (&GL(dl_tls_dtv_slotinfo_list)); else -# endif +#endif /* The first element of the list does not have to be deallocated. It was allocated in the dynamic linker (i.e., with a different malloc), and in the static library it's in .bss space. */ free_slotinfo (&GL(dl_tls_dtv_slotinfo_list)->next); } -#endif } diff --git a/elf/dl-iteratephdr.c b/elf/dl-iteratephdr.c index 52a114421d..d03d8b6daf 100644 --- a/elf/dl-iteratephdr.c +++ b/elf/dl-iteratephdr.c @@ -70,11 +70,9 @@ __dl_iterate_phdr (int (*callback) (struct dl_phdr_info *info, info.dlpi_subs = GL(dl_load_adds) - nloaded; info.dlpi_tls_modid = 0; info.dlpi_tls_data = NULL; -#ifdef USE_TLS info.dlpi_tls_modid = l->l_tls_modid; if (info.dlpi_tls_modid != 0) info.dlpi_tls_data = _dl_tls_get_addr_soft (l); -#endif ret = callback (&info, sizeof (struct dl_phdr_info), data); if (ret) break; diff --git a/elf/dl-load.c b/elf/dl-load.c index 36dc123c01..2adeb60fcd 100644 --- a/elf/dl-load.c +++ b/elf/dl-load.c @@ -1085,7 +1085,6 @@ _dl_map_object_from_fd (const char *name, int fd, struct filebuf *fbp, break; case PT_TLS: -#ifdef USE_TLS if (ph->p_memsz == 0) /* Nothing to do for an empty segment. */ break; @@ -1113,7 +1112,7 @@ _dl_map_object_from_fd (const char *name, int fd, struct filebuf *fbp, break; } -# ifdef SHARED +#ifdef SHARED if (l->l_prev == NULL || (mode & __RTLD_AUDIT) != 0) /* We are loading the executable itself when the dynamic linker was executed directly. The setup will happen later. */ @@ -1122,7 +1121,7 @@ _dl_map_object_from_fd (const char *name, int fd, struct filebuf *fbp, /* In a static binary there is no way to tell if we dynamically loaded libpthread. */ if (GL(dl_error_catch_tsd) == &_dl_initial_error_catch_tsd) -# endif +#endif { /* We have not yet loaded libpthread. We can do the TLS setup right now! */ @@ -1155,7 +1154,6 @@ cannot allocate TLS data structures for initial thread"); _dl_deallocate_tls (tcb, 1); goto call_lose; } -#endif /* Uh-oh, the binary expects TLS support but we cannot provide it. */ @@ -1431,11 +1429,9 @@ cannot enable executable stack as shared object requires"); } } -#ifdef USE_TLS /* Adjust the address of the TLS initialization image. */ if (l->l_tls_initimage != NULL) l->l_tls_initimage = (char *) l->l_tls_initimage + l->l_addr; -#endif /* We are done mapping in the file. We no longer need the descriptor. */ if (__builtin_expect (__close (fd) != 0, 0)) diff --git a/elf/dl-lookup.c b/elf/dl-lookup.c index 29a52165ce..019278c9b0 100644 --- a/elf/dl-lookup.c +++ b/elf/dl-lookup.c @@ -449,12 +449,10 @@ _dl_debug_bindings (const char *undef_name, struct link_map *undef_map, conflict = 1; } -# ifdef USE_TLS if (value->s && (__builtin_expect (ELFW(ST_TYPE) (value->s->st_info) == STT_TLS, 0))) type_class = 4; -# endif if (conflict || GLRO(dl_trace_prelink_map) == undef_map diff --git a/elf/dl-object.c b/elf/dl-object.c index 29f44bfd55..33ee860e59 100644 --- a/elf/dl-object.c +++ b/elf/dl-object.c @@ -64,7 +64,7 @@ _dl_new_object (char *realname, const char *libname, int type, new->l_name = realname; new->l_type = type; new->l_loader = loader; -#if defined USE_TLS && NO_TLS_OFFSET != 0 +#if NO_TLS_OFFSET != 0 new->l_tls_offset = NO_TLS_OFFSET; #endif new->l_ns = nsid; diff --git a/elf/dl-open.c b/elf/dl-open.c index c28b6b1e77..f2f4ae2383 100644 --- a/elf/dl-open.c +++ b/elf/dl-open.c @@ -164,9 +164,7 @@ dl_open_worker (void *a) struct link_map *new, *l; int lazy; unsigned int i; -#ifdef USE_TLS bool any_tls = false; -#endif struct link_map *call_map = NULL; /* Check whether _dl_open() has been called from a valid DSO. */ @@ -441,7 +439,6 @@ dl_open_worker (void *a) atomic_write_barrier (); imap->l_scope[cnt] = &new->l_searchlist; } -#if USE_TLS /* Only add TLS memory if this object is loaded now and therefore is not yet initialized. */ else if (! imap->l_init_called @@ -456,11 +453,11 @@ dl_open_worker (void *a) if (imap->l_need_tls_init) { imap->l_need_tls_init = 0; -# ifdef SHARED +#ifdef SHARED /* Update the slot information data for at least the generation of the DSO we are allocating data for. */ _dl_update_slotinfo (imap->l_tls_modid); -# endif +#endif GL(dl_init_static_tls) (imap); assert (imap->l_need_tls_init == 0); @@ -469,15 +466,12 @@ dl_open_worker (void *a) /* We have to bump the generation counter. */ any_tls = true; } -#endif } -#if USE_TLS /* Bump the generation number if necessary. */ if (any_tls && __builtin_expect (++GL(dl_tls_generation) == 0, 0)) _dl_fatal_printf (N_("\ TLS generation counter wrapped! Please report this.")); -#endif /* Run the initializer functions of new objects. */ _dl_init (new, args->argc, args->argv, args->env); @@ -574,7 +568,6 @@ no more namespaces available for dlmopen()")); state if relocation failed, for example. */ if (args.map) { -#ifdef USE_TLS /* Maybe some of the modules which were loaded use TLS. Since it will be removed in the following _dl_close call we have to mark the dtv array as having gaps to fill the @@ -584,7 +577,6 @@ no more namespaces available for dlmopen()")); up. */ if ((mode & __RTLD_AUDIT) == 0) GL(dl_tls_dtv_gaps) = true; -#endif _dl_close_worker (args.map); } diff --git a/elf/dl-reloc.c b/elf/dl-reloc.c index 117410e924..c315b5d972 100644 --- a/elf/dl-reloc.c +++ b/elf/dl-reloc.c @@ -1,5 +1,5 @@ /* Relocate a shared object and resolve its references to other loaded objects. - Copyright (C) 1995-2004, 2005 Free Software Foundation, Inc. + Copyright (C) 1995-2004, 2005, 2006 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -35,7 +35,6 @@ #endif -#ifdef USE_TLS /* We are trying to perform a static TLS relocation in MAP, but it was dynamically loaded. This can only work if there is enough surplus in the static TLS area already allocated for each running thread. If this @@ -56,7 +55,7 @@ _dl_allocate_static_tls (struct link_map *map) cannot allocate memory in static TLS block")); } -# if TLS_TCB_AT_TP +#if TLS_TCB_AT_TP size_t freebytes; size_t n; size_t blsize; @@ -73,7 +72,7 @@ cannot allocate memory in static TLS block")); - map->l_tls_firstbyte_offset); map->l_tls_offset = GL(dl_tls_static_used) = offset; -# elif TLS_DTV_AT_TP +#elif TLS_DTV_AT_TP size_t used; size_t check; @@ -87,9 +86,9 @@ cannot allocate memory in static TLS block")); map->l_tls_offset = offset; GL(dl_tls_static_used) = used; -# else -# error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined" -# endif +#else +# error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined" +#endif /* If the object is not yet relocated we cannot initialize the static TLS region. Delay it. */ @@ -115,13 +114,13 @@ cannot allocate memory in static TLS block")); void _dl_nothread_init_static_tls (struct link_map *map) { -# if TLS_TCB_AT_TP +#if TLS_TCB_AT_TP void *dest = (char *) THREAD_SELF - map->l_tls_offset; -# elif TLS_DTV_AT_TP +#elif TLS_DTV_AT_TP void *dest = (char *) THREAD_SELF + map->l_ |
