From b52bbc1bdf3886da8dd3265fd955cafe5368d34a Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Fri, 27 Oct 2006 23:11:47 +0000 Subject: [PATCH] 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. --- ChangeLog | 71 ++++++++++++++++++++++++++++++ csu/Versions | 4 +- csu/libc-start.c | 17 ++------ csu/libc-tls.c | 58 ++++++++++--------------- csu/version.c | 3 -- dlfcn/dlinfo.c | 8 +--- elf/dl-addr.c | 4 -- elf/dl-cache.c | 6 +-- elf/dl-close.c | 28 +++--------- elf/dl-iteratephdr.c | 2 - elf/dl-load.c | 8 +--- elf/dl-lookup.c | 2 - elf/dl-object.c | 2 +- elf/dl-open.c | 12 +----- elf/dl-reloc.c | 24 +++++------ elf/dl-support.c | 4 +- elf/dl-sym.c | 8 ++-- elf/dl-sysdep.c | 32 +++----------- elf/dl-tls.c | 79 ++++++++++++++++------------------ elf/ldconfig.c | 2 - elf/rtld.c | 50 +++++---------------- elf/tst-tls-dlinfo.c | 4 -- elf/tst-tls1.c | 8 +--- elf/tst-tls10.h | 3 +- elf/tst-tls14.c | 8 ++-- elf/tst-tls2.c | 8 +--- elf/tst-tls3.c | 8 +--- elf/tst-tls4.c | 4 -- elf/tst-tls5.c | 4 -- elf/tst-tls6.c | 4 -- elf/tst-tls7.c | 4 -- elf/tst-tls8.c | 4 -- elf/tst-tls9.c | 4 -- elf/tst-tlsmod1.c | 4 -- elf/tst-tlsmod13.c | 3 +- elf/tst-tlsmod13a.c | 3 +- elf/tst-tlsmod14a.c | 10 ++--- elf/tst-tlsmod2.c | 2 - elf/tst-tlsmod3.c | 4 +- elf/tst-tlsmod4.c | 4 +- elf/tst-tlsmod5.c | 2 - elf/tst-tlsmod6.c | 2 - include/errno.h | 2 +- include/link.h | 10 ++--- include/tls.h | 3 +- locale/global-locale.c | 4 +- locale/localeinfo.h | 4 +- malloc/arena.c | 8 ++-- malloc/hooks.c | 4 +- malloc/malloc.c | 2 +- nptl/ChangeLog | 14 +++++- nptl/init.c | 2 +- nptl/sysdeps/alpha/tls.h | 5 +-- nptl/sysdeps/i386/tls.h | 5 +-- nptl/sysdeps/ia64/tls.h | 3 -- nptl/sysdeps/powerpc/tls.h | 5 +-- nptl/sysdeps/s390/tls.h | 5 +-- nptl/sysdeps/sh/tls.h | 5 +-- nptl/sysdeps/sparc/tls.h | 3 -- nptl/sysdeps/x86_64/tls.h | 3 -- nptl/tst-tls5.h | 2 +- nptl_db/ChangeLog | 4 ++ nptl_db/structs.def | 6 +-- resolv/Versions | 6 +-- sysdeps/alpha/dl-machine.h | 28 ++++++------ sysdeps/alpha/libc-tls.c | 6 +-- sysdeps/generic/ldsodefs.h | 12 +----- sysdeps/generic/tls.h | 7 +-- sysdeps/i386/dl-machine.h | 8 ++-- sysdeps/ia64/dl-machine.h | 6 +-- sysdeps/ia64/libc-tls.c | 6 +-- sysdeps/mach/hurd/fork.c | 4 +- sysdeps/mach/hurd/i386/tls.h | 5 +-- sysdeps/powerpc/powerpc32/dl-machine.c | 6 +-- sysdeps/powerpc/powerpc32/dl-machine.h | 8 ++-- sysdeps/powerpc/powerpc64/dl-machine.h | 11 +++-- sysdeps/s390/libc-tls.c | 8 +--- sysdeps/s390/s390-32/dl-machine.h | 12 ++---- sysdeps/s390/s390-64/dl-machine.h | 12 ++---- sysdeps/sh/dl-machine.h | 6 +-- sysdeps/sparc/sparc32/dl-machine.h | 4 +- sysdeps/sparc/sparc64/dl-machine.h | 4 +- sysdeps/x86_64/dl-machine.h | 8 ++-- tls.make.c | 4 -- 84 files changed, 299 insertions(+), 492 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0b264ce..2f32dfd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,76 @@ 2006-10-27 Ulrich Drepper + * 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. + * elf/dl-close.c (_dl_close_worker): Renamed from _dl_close and split out locking and parameter checking. (_dl_close): Call _dl_close_worker after locking and checking. diff --git a/csu/Versions b/csu/Versions index a1321a9..f0b4f00 100644 --- a/csu/Versions +++ b/csu/Versions @@ -5,7 +5,7 @@ libc { # helper functions __libc_init_first; __libc_start_main; -%if !(USE_TLS && HAVE___THREAD) +%if !HAVE___THREAD # global variables _errno; @@ -18,7 +18,7 @@ libc { gnu_get_libc_release; gnu_get_libc_version; } GLIBC_PRIVATE { -%if USE_TLS && HAVE___THREAD +%if HAVE___THREAD # This version is for the TLS symbol, GLIBC_2.0 is the old object symbol. errno; %endif diff --git a/csu/libc-start.c b/csu/libc-start.c index 194db6b..6348447 100644 --- a/csu/libc-start.c +++ b/csu/libc-start.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1998-2003, 2004, 2005 Free Software Foundation, Inc. +/* Copyright (C) 1998-2003, 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 @@ -30,11 +30,7 @@ extern int __libc_multiple_libcs; #include #ifndef SHARED # include -extern void __pthread_initialize_minimal (void) -# if !(USE_TLS - 0) && !defined NONTLS_INIT_TP - __attribute__ ((weak)) -# endif - ; +extern void __pthread_initialize_minimal (void); # ifndef THREAD_SET_STACK_GUARD /* Only exported for architectures that don't store the stack guard canary in thread local area. */ @@ -140,13 +136,8 @@ LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL), /* Initialize the thread library at least a bit since the libgcc functions are using thread functions if these are available and - we need to setup errno. If there is no thread library and we - handle TLS the function is defined in the libc to initialized the - TLS handling. */ -# if !(USE_TLS - 0) && !defined NONTLS_INIT_TP - if (__pthread_initialize_minimal) -# endif - __pthread_initialize_minimal (); + we need to setup errno. */ + __pthread_initialize_minimal (); #endif # ifndef SHARED diff --git a/csu/libc-tls.c b/csu/libc-tls.c index 3544e39..0d240cc 100644 --- a/csu/libc-tls.c +++ b/csu/libc-tls.c @@ -1,5 +1,5 @@ /* Initialization code for TLS in statically linked application. - Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + Copyright (C) 2002, 2003, 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 @@ -29,7 +29,6 @@ #error makefile bug, this file is for static only #endif -#ifdef USE_TLS extern ElfW(Phdr) *_dl_phdr; extern size_t _dl_phnum; @@ -143,19 +142,19 @@ __libc_setup_tls (size_t tcbsize, size_t tcbalign) The initialized value of _dl_tls_static_size is provided by dl-open.c to request some surplus that permits dynamic loading of modules with IE-model TLS. */ -# if TLS_TCB_AT_TP +#if TLS_TCB_AT_TP tcb_offset = roundup (memsz + GL(dl_tls_static_size), tcbalign); tlsblock = __sbrk (tcb_offset + tcbsize + max_align); -# elif TLS_DTV_AT_TP +#elif TLS_DTV_AT_TP tcb_offset = roundup (tcbsize, align ?: 1); tlsblock = __sbrk (tcb_offset + memsz + max_align + TLS_PRE_TCB_SIZE + GL(dl_tls_static_size)); tlsblock += TLS_PRE_TCB_SIZE; -# else +#else /* In case a model with a different layout for the TCB and DTV is defined add another #elif here and in the following #ifs. */ -# error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined" -# endif +# error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined" +#endif /* Align the TLS block. */ tlsblock = (void *) (((uintptr_t) tlsblock + max_align - 1) @@ -166,16 +165,16 @@ __libc_setup_tls (size_t tcbsize, size_t tcbalign) // static_dtv[1].counter = 0; would be needed if not already done /* Initialize the TLS block. */ -# if TLS_TCB_AT_TP +#if TLS_TCB_AT_TP static_dtv[2].pointer.val = ((char *) tlsblock + tcb_offset - roundup (memsz, align ?: 1)); static_map.l_tls_offset = roundup (memsz, align ?: 1); -# elif TLS_DTV_AT_TP +#elif TLS_DTV_AT_TP static_dtv[2].pointer.val = (char *) tlsblock + tcb_offset; static_map.l_tls_offset = tcb_offset; -# 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 static_dtv[2].pointer.is_static = true; /* sbrk gives us zero'd memory, so we don't need to clear the remainder. */ memcpy (static_dtv[2].pointer.val, initimage, filesz); @@ -183,16 +182,16 @@ __libc_setup_tls (size_t tcbsize, size_t tcbalign) /* Install the pointer to the dtv. */ /* Initialize the thread pointer. */ -# if TLS_TCB_AT_TP +#if TLS_TCB_AT_TP INSTALL_DTV ((char *) tlsblock + tcb_offset, static_dtv); const char *lossage = TLS_INIT_TP ((char *) tlsblock + tcb_offset, 0); -# elif TLS_DTV_AT_TP +#elif TLS_DTV_AT_TP INSTALL_DTV (tlsblock, static_dtv); const char *lossage = TLS_INIT_TP (tlsblock, 0); -# 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 (__builtin_expect (lossage != NULL, 0)) __libc_fatal (lossage); @@ -212,11 +211,11 @@ __libc_setup_tls (size_t tcbsize, size_t tcbalign) memsz = roundup (memsz, align ?: 1); -# if TLS_TCB_AT_TP +#if TLS_TCB_AT_TP memsz += tcbsize; -# elif TLS_DTV_AT_TP +#elif TLS_DTV_AT_TP memsz += tcb_offset; -# endif +#endif init_static_tls (memsz, MAX (TLS_TCB_ALIGN, max_align)); } @@ -230,11 +229,11 @@ _dl_tls_setup (void) { init_slotinfo (); init_static_tls ( -# if TLS_TCB_AT_TP +#if TLS_TCB_AT_TP TLS_TCB_SIZE, -# else +#else 0, -# endif +#endif TLS_TCB_ALIGN); return 0; } @@ -248,16 +247,3 @@ __pthread_initialize_minimal (void) { __libc_setup_tls (TLS_INIT_TCB_SIZE, TLS_INIT_TCB_ALIGN); } - -#elif defined NONTLS_INIT_TP - -/* This is the minimal initialization function used when libpthread is - not used. */ -void -__attribute__ ((weak)) -__pthread_initialize_minimal (void) -{ - NONTLS_INIT_TP; -} - -#endif diff --git a/csu/version.c b/csu/version.c index 2196d20..1b98c4a 100644 --- a/csu/version.c +++ b/csu/version.c @@ -34,9 +34,6 @@ Compiled by GNU CC version "__VERSION__".\n" #ifdef GLIBC_OLDEST_ABI "The oldest ABI supported: " GLIBC_OLDEST_ABI ".\n" #endif -#ifdef USE_TLS -"Thread-local storage support included.\n" -#endif "For bug reporting instructions, please see:\n\ .\n"; diff --git a/dlfcn/dlinfo.c b/dlfcn/dlinfo.c index b1e2b00..923127c 100644 --- a/dlfcn/dlinfo.c +++ b/dlfcn/dlinfo.c @@ -32,9 +32,7 @@ dlinfo (void *handle, int request, void *arg) #else -# ifdef USE_TLS -# include -# endif +# include struct dlinfo_args { @@ -97,18 +95,14 @@ RTLD_SELF used in code not dynamically loaded")); case RTLD_DI_TLS_MODID: *(size_t *) args->arg = 0; -#ifdef USE_TLS *(size_t *) args->arg = l->l_tls_modid; -#endif break; case RTLD_DI_TLS_DATA: { void *data = NULL; -#ifdef USE_TLS if (l->l_tls_modid != 0) data = _dl_tls_get_addr_soft (l); -#endif *(void **) args->arg = data; break; } diff --git a/elf/dl-addr.c b/elf/dl-addr.c index 720b24d..e55dc4b 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 fc7d991..bbeba77 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 fdd9fe6..47316ec 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 52a1144..d03d8b6 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 36dc123..2adeb60 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 29a5216..019278c 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 29f44bf..33ee860 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 c28b6b1..f2f4ae2 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 117410e..c315b5d 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_tls_offset + TLS_PRE_TCB_SIZE; -# 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 /* Fill in the DTV slot so that a later LD/GD access will find it. */ dtv_t *dtv = THREAD_DTV (); @@ -133,7 +132,6 @@ _dl_nothread_init_static_tls (struct link_map *map) memset (__mempcpy (dest, map->l_tls_initimage, map->l_tls_initimage_size), '\0', map->l_tls_blocksize - map->l_tls_initimage_size); } -#endif void diff --git a/elf/dl-support.c b/elf/dl-support.c index c3b6350..fe8c68c 100644 --- a/elf/dl-support.c +++ b/elf/dl-support.c @@ -1,5 +1,5 @@ /* Support for dynamic linking code in static libc. - Copyright (C) 1996-2002, 2003, 2004, 2005 Free Software Foundation, Inc. + Copyright (C) 1996-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 @@ -97,9 +97,7 @@ int _dl_starting_up = 1; hp_timing_t _dl_cpuclock_offset; #endif -#ifdef USE_TLS void (*_dl_init_static_tls) (struct link_map *) = &_dl_nothread_init_static_tls; -#endif size_t _dl_pagesize; diff --git a/elf/dl-sym.c b/elf/dl-sym.c index 8bb564c..2081fd5 100644 --- a/elf/dl-sym.c +++ b/elf/dl-sym.c @@ -26,12 +26,10 @@ #include #include #include -#ifdef USE_TLS -# include -#endif +#include -#if defined USE_TLS && defined SHARED +#ifdef SHARED /* Systems which do not have tls_index also probably have to define DONT_USE_TLS_INDEX. */ @@ -184,7 +182,7 @@ RTLD_NEXT used in code not dynamically loaded")); { void *value; -#if defined USE_TLS && defined SHARED +#ifdef SHARED if (ELFW(ST_TYPE) (ref->st_info) == STT_TLS) /* The found symbol is a thread-local storage variable. Return the address for to the current thread. */ diff --git a/elf/dl-sysdep.c b/elf/dl-sysdep.c index 985e2b8..d06ce17 100644 --- a/elf/dl-sysdep.c +++ b/elf/dl-sysdep.c @@ -1,5 +1,5 @@ /* Operating system support for run-time dynamic linker. Generic Unix version. - Copyright (C) 1995-1998, 2000-2003, 2004, 2005 Free Software Foundation, Inc. + Copyright (C) 1995-1998, 2000-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 @@ -405,25 +405,8 @@ _dl_important_hwcaps (const char *platform, size_t platform_len, size_t *sz, } #endif -#ifdef USE_TLS /* For TLS enabled builds always add 'tls'. */ ++cnt; -#else - if (cnt == 0) - { - /* If we no have platform name and no important capability we only - have the base directory to search. */ - result = (struct r_strlenpair *) malloc (sizeof (*result)); - if (result == NULL) - goto no_memory; - - result[0].str = (char *) result; /* Does not really matter. */ - result[0].len = 0; - - *sz = 1; - return result; - } -#endif /* Create temporary data structure to generate result table. */ temp = (struct r_strlenpair *) alloca (cnt * sizeof (*temp)); @@ -465,11 +448,11 @@ _dl_important_hwcaps (const char *platform, size_t platform_len, size_t *sz, temp[m].len = platform_len; ++m; } -#ifdef USE_TLS + temp[m].str = "tls"; temp[m].len = 3; ++m; -#endif + assert (m == cnt); /* Determine the total size of all strings together. */ @@ -487,13 +470,8 @@ _dl_important_hwcaps (const char *platform, size_t platform_len, size_t *sz, *sz = 1 << cnt; result = (struct r_strlenpair *) malloc (*sz * sizeof (*result) + total); if (result == NULL) - { -#ifndef USE_TLS - no_memory: -#endif - _dl_signal_error (ENOMEM, NULL, NULL, - N_("cannot create capability list")); - } + _dl_signal_error (ENOMEM, NULL, NULL, + N_("cannot create capability list")); if (cnt == 1) { diff --git a/elf/dl-tls.c b/elf/dl-tls.c index a0f4f77..d5865ab 100644 --- a/elf/dl-tls.c +++ b/elf/dl-tls.c @@ -26,30 +26,26 @@ #include #include - -/* We don't need any of this if TLS is not supported. */ -#ifdef USE_TLS - -# include -# include +#include +#include /* Amount of excess space to allocate in the static TLS area to allow dynamic loading of modules defining IE-model TLS data. */ -# define TLS_STATIC_SURPLUS 64 + DL_NNS * 100 +#define TLS_STATIC_SURPLUS 64 + DL_NNS * 100 /* Value used for dtv entries for which the allocation is delayed. */ -# define TLS_DTV_UNALLOCATED ((void *) -1l) +#define TLS_DTV_UNALLOCATED ((void *) -1l) /* Out-of-memory handler. */ -# ifdef SHARED +#ifdef SHARED static void __attribute__ ((__noreturn__)) oom (void) { _dl_fatal_printf ("cannot allocate memory for thread-local data: ABORT\n"); } -# endif +#endif size_t @@ -113,7 +109,7 @@ _dl_next_tls_modid (void) } -# ifdef SHARED +#ifdef SHARED void internal_function _dl_determine_tlsoffset (void) @@ -158,7 +154,7 @@ _dl_determine_tlsoffset (void) memory requirement for the next TLS block is smaller than the gap. */ -# if TLS_TCB_AT_TP +#if TLS_TCB_AT_TP /* We simply start with zero. */ size_t offset = 0; @@ -205,7 +201,7 @@ _dl_determine_tlsoffset (void) GL(dl_tls_static_used) = offset; GL(dl_tls_static_size) = (roundup (offset + TLS_STATIC_SURPLUS, max_align) + TLS_TCB_SIZE); -# elif TLS_DTV_AT_TP +#elif TLS_DTV_AT_TP /* The TLS blocks start right after the TCB. */ size_t offset = TLS_TCB_SIZE; @@ -249,9 +245,9 @@ _dl_determine_tlsoffset (void) GL(dl_tls_static_used) = offset; GL(dl_tls_static_size) = roundup (offset + TLS_STATIC_SURPLUS, TLS_TCB_ALIGN); -# 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 /* The alignment requirement for the static TLS block. */ GL(dl_tls_static_align) = max_align; @@ -288,7 +284,7 @@ _dl_tls_setup (void) return 0; } rtld_hidden_def (_dl_tls_setup) -# endif +#endif static void * internal_function @@ -337,13 +333,13 @@ _dl_allocate_tls_storage (void) void *result; size_t size = GL(dl_tls_static_size); -# if TLS_DTV_AT_TP +#if TLS_DTV_AT_TP /* Memory layout is: [ TLS_PRE_TCB_SIZE ] [ TLS_TCB_SIZE ] [ TLS blocks ] ^ This should be returned. */ size += (TLS_PRE_TCB_SIZE + GL(dl_tls_static_align) - 1) & ~(GL(dl_tls_static_align) - 1); -# endif +#endif /* Allocate a correctly aligned chunk of memory. */ result = __libc_memalign (GL(dl_tls_static_align), size); @@ -352,14 +348,14 @@ _dl_allocate_tls_storage (void) /* Allocate the DTV. */ void *allocated = result; -# if TLS_TCB_AT_TP +#if TLS_TCB_AT_TP /* The TCB follows the TLS blocks. */ result = (char *) result + size - TLS_TCB_SIZE; /* Clear the TCB data structure. We can't ask the caller (i.e. libpthread) to do it, because we will initialize the DTV et al. */ memset (result, '\0', TLS_TCB_SIZE); -# elif TLS_DTV_AT_TP +#elif TLS_DTV_AT_TP result = (char *) result + size - GL(dl_tls_static_size); /* Clear the TCB data structure and TLS_PRE_TCB_SIZE bytes before it. @@ -367,7 +363,7 @@ _dl_allocate_tls_storage (void) initialize the DTV et al. */ memset ((char *) result - TLS_PRE_TCB_SIZE, '\0', TLS_PRE_TCB_SIZE + TLS_TCB_SIZE); -# endif +#endif result = allocate_dtv (result); if (result == NULL) @@ -428,14 +424,14 @@ _dl_allocate_tls_init (void *result) assert (map->l_tls_modid == cnt); assert (map->l_tls_blocksize >= map->l_tls_initimage_size); -# if TLS_TCB_AT_TP +#if TLS_TCB_AT_TP assert ((size_t) map->l_tls_offset >= map->l_tls_blocksize); dest = (char *) result - map->l_tls_offset; -# elif TLS_DTV_AT_TP +#elif TLS_DTV_AT_TP dest = (char *) result + map->l_tls_offset; -# 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 /* Copy the initialization image and clear the BSS part. */ dtv[map->l_tls_modid].pointer.val = dest; @@ -491,21 +487,21 @@ _dl_deallocate_tls (void *tcb, bool dealloc_tcb) if (dealloc_tcb) { -# if TLS_TCB_AT_TP +#if TLS_TCB_AT_TP /* The TCB follows the TLS blocks. Back up to free the whole block. */ tcb -= GL(dl_tls_static_size) - TLS_TCB_SIZE; -# elif TLS_DTV_AT_TP +#elif TLS_DTV_AT_TP /* Back up the TLS_PRE_TCB_SIZE bytes. */ tcb -= (TLS_PRE_TCB_SIZE + GL(dl_tls_static_align) - 1) & ~(GL(dl_tls_static_align) - 1); -# endif +#endif free (tcb); } } rtld_hidden_def (_dl_deallocate_tls) -# ifdef SHARED +#ifdef SHARED /* The __tls_get_addr function has two basic forms which differ in the arguments. The IA-64 form takes two parameters, the module ID and offset. The form used, among others, on IA-32 takes a reference to @@ -513,15 +509,15 @@ rtld_hidden_def (_dl_deallocate_tls) form seems to be more often used (in the moment) so we default to it. Users of the IA-64 form have to provide adequate definitions of the following macros. */ -# ifndef GET_ADDR_ARGS -# define GET_ADDR_ARGS tls_index *ti -# endif -# ifndef GET_ADDR_MODULE -# define GET_ADDR_MODULE ti->ti_module -# endif -# ifndef GET_ADDR_OFFSET -# define GET_ADDR_OFFSET ti->ti_offset -# endif +# ifndef GET_ADDR_ARGS +# define GET_ADDR_ARGS tls_index *ti +# endif +# ifndef GET_ADDR_MODULE +# define GET_ADDR_MODULE ti->ti_module +# endif +# ifndef GET_ADDR_OFFSET +# define GET_ADDR_OFFSET ti->ti_offset +# endif static void * @@ -732,7 +728,7 @@ __tls_get_addr (GET_ADDR_ARGS) return (char *) p + GET_ADDR_OFFSET; } -# endif +#endif /* Look up the module's TLS block as for __tls_get_addr, @@ -840,4 +836,3 @@ cannot create TLS data structures")); listp->slotinfo[idx].map = l; listp->slotinfo[idx].gen = GL(dl_tls_generation) + 1; } -#endif /* use TLS */ diff --git a/elf/ldconfig.c b/elf/ldconfig.c index 5b9a5b1..b14696d 100644 --- a/elf/ldconfig.c +++ b/elf/ldconfig.c @@ -1185,9 +1185,7 @@ main (int argc, char **argv) add_dir (argv[i]); } -#ifdef USE_TLS hwcap_extra[63 - _DL_FIRST_EXTRA] = "tls"; -#endif set_hwcap (); diff --git a/elf/rtld.c b/elf/rtld.c index 8f0b070..edcc1f7 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -1,5 +1,5 @@ /* Run time dynamic linker. - Copyright (C) 1995-2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. + Copyright (C) 1995-2002,2003,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 @@ -292,7 +292,7 @@ _dl_start_final (void *arg, struct dl_start_final_info *info) GL(dl_rtld_map).l_map_end = (ElfW(Addr)) _end; GL(dl_rtld_map).l_text_end = (ElfW(Addr)) _etext; /* Copy the TLS related data if necessary. */ -#if USE_TLS && !defined DONT_USE_BOOTSTRAP_MAP +#ifndef DONT_USE_BOOTSTRAP_MAP # if USE___THREAD assert (info->l.l_tls_modid != 0); GL(dl_rtld_map).l_tls_blocksize = info->l.l_tls_blocksize; @@ -400,7 +400,7 @@ _dl_start (void *arg) bootstrap_map.l_ld = (void *) bootstrap_map.l_addr + elf_machine_dynamic (); elf_get_dynamic_info (&bootstrap_map, NULL); -#if defined USE_TLS && NO_TLS_OFFSET != 0 +#if NO_TLS_OFFSET != 0 bootstrap_map.l_tls_offset = NO_TLS_OFFSET; #endif @@ -701,7 +701,6 @@ match_version (const char *string, struct link_map *map) return 0; } -#ifdef USE_TLS static bool tls_init_tp_called; static void * @@ -773,7 +772,6 @@ cannot allocate TLS data structures for initial thread"); return tcbp; } -#endif #ifdef _LIBC_REENTRANT /* _dl_error_catch_tsd points to this for the single-threaded case. @@ -861,18 +859,14 @@ dl_main (const ElfW(Phdr) *phdr, hp_timing_t stop; hp_timing_t diff; #endif -#ifdef USE_TLS void *tcbp = NULL; -#endif #ifdef _LIBC_REENTRANT /* Explicit initialization since the reloc would just be more work. */ GL(dl_error_catch_tsd) = &_dl_initial_error_catch_tsd; #endif -#ifdef USE_TLS GL(dl_init_static_tls) = &_dl_nothread_init_static_tls; -#endif #if defined SHARED && defined _LIBC_REENTRANT \ && defined __rtld_lock_default_lock_recursive @@ -1157,7 +1151,6 @@ of this helper program; chances are you did not intend to run this program.\n\ break; case PT_TLS: -#ifdef USE_TLS if (ph->p_memsz > 0) { /* Note that in the case the dynamic linker we duplicate work @@ -1177,10 +1170,6 @@ of this helper program; chances are you did not intend to run this program.\n\ /* This image gets the ID one. */ GL(dl_tls_max_dtv_idx) = main_map->l_tls_modid = 1; } -#else - _dl_fatal_printf ("\ -ld.so does not support TLS, but program uses it!\n"); -#endif break; case PT_GNU_STACK: @@ -1192,13 +1181,12 @@ ld.so does not support TLS, but program uses it!\n"); main_map->l_relro_size = ph->p_memsz; break; } -#ifdef USE_TLS - /* Adjust the address of the TLS initialization image in case - the executable is actually an ET_DYN object. */ - if (main_map->l_tls_initimage != NULL) - main_map->l_tls_initimage - = (char *) main_map->l_tls_initimage + main_map->l_addr; -#endif + + /* Adjust the address of the TLS initialization image in case + the executable is actually an ET_DYN object. */ + if (main_map->l_tls_initimage != NULL) + main_map->l_tls_initimage + = (char *) main_map->l_tls_initimage + main_map->l_addr; if (! main_map->l_map_end) main_map->l_map_end = ~0; if (! main_map->l_text_end) @@ -1401,12 +1389,10 @@ ld.so does not support TLS, but program uses it!\n"); break; } -#ifdef USE_TLS /* Add the dynamic linker to the TLS list if it also uses TLS. */ if (GL(dl_rtld_map).l_tls_blocksize != 0) /* Assign a module ID. Do this before loading any audit modules. */ GL(dl_rtld_map).l_tls_modid = _dl_next_tls_modid (); -#endif /* If we have auditing DSOs to load, do it now. */ if (__builtin_expect (audit_list != NULL, 0)) @@ -1416,7 +1402,6 @@ ld.so does not support TLS, but program uses it!\n"); struct audit_list *al = audit_list->next; do { -#ifdef USE_TLS int tls_idx = GL(dl_tls_max_dtv_idx); /* Now it is time to determine the layout of the static TLS @@ -1428,7 +1413,7 @@ ld.so does not support TLS, but program uses it!\n"); /* Since we start using the auditing DSOs right away we need to initialize the data structures now. */ tcbp = init_tls (); -#endif + struct dlmopen_args dlmargs; dlmargs.fname = al->name; dlmargs.map = NULL; @@ -1543,9 +1528,7 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n", assert (GL(dl_ns)[ns]._ns_loaded == NULL); assert (GL(dl_ns)[ns]._ns_nloaded == 0); -#ifdef USE_TLS GL(dl_tls_max_dtv_idx) = tls_idx; -#endif goto not_loaded; } } @@ -1821,7 +1804,6 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n", _dl_receive_error (print_missing_version, version_check_doit, &args); } -#ifdef USE_TLS /* We do not initialize any of the TLS functionality unless any of the initial modules uses TLS. This makes dynamic loading of modules with TLS impossible, but to support it requires either eagerly doing setup @@ -1832,7 +1814,6 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n", bool was_tls_init_tp_called = tls_init_tp_called; if (tcbp == NULL) tcbp = init_tls (); -#endif /* Set up the stack checker's canary. */ uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard (); @@ -1889,13 +1870,12 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n", (size_t) l->l_map_start, (int) sizeof l->l_addr * 2, (size_t) l->l_addr); -#ifdef USE_TLS + if (l->l_tls_modid) _dl_printf (" TLS(0x%Zx, 0x%0*Zx)\n", l->l_tls_modid, (int) sizeof l->l_tls_offset * 2, (size_t) l->l_tls_offset); else -#endif _dl_printf ("\n"); } } @@ -2178,11 +2158,9 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n", if (l->l_relro_size) _dl_protect_relro (l); -#ifdef USE_TLS /* Add object to slot information data if necessasy. */ if (l->l_tls_blocksize != 0 && tls_init_tp_called) _dl_add_to_slotinfo (l); -#endif } _dl_sysdep_start_cleanup (); @@ -2229,11 +2207,9 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n", _dl_relocate_object (l, l->l_scope, GLRO(dl_lazy), consider_profiling); -#ifdef USE_TLS /* Add object to slot information data if necessasy. */ if (l->l_tls_blocksize != 0 && tls_init_tp_called) _dl_add_to_slotinfo (l); -#endif l = l->l_prev; } @@ -2262,7 +2238,6 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n", # define NONTLS_INIT_TP do { } while (0) #endif -#ifdef USE_TLS if (!was_tls_init_tp_called && GL(dl_tls_max_dtv_idx) > 0) ++GL(dl_tls_generation); @@ -2280,9 +2255,6 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n", _dl_fatal_printf ("cannot set up thread-local storage: %s\n", lossage); } -#else - NONTLS_INIT_TP; -#endif if (! prelinked && rtld_multiple_ref) { diff --git a/elf/tst-tls-dlinfo.c b/elf/tst-tls-dlinfo.c index e97b508..26c2811 100644 --- a/elf/tst-tls-dlinfo.c +++ b/elf/tst-tls-dlinfo.c @@ -9,7 +9,6 @@ static int do_test (void) { -#ifdef USE_TLS static const char modname[] = "tst-tlsmod2.so"; int result = 0; int *foop; @@ -83,9 +82,6 @@ do_test (void) dlclose (h); return result; -#else - return 0; -#endif } diff --git a/elf/tst-tls1.c b/elf/tst-tls1.c index 478f5bb..3b9b10f 100644 --- a/elf/tst-tls1.c +++ b/elf/tst-tls1.c @@ -3,21 +3,18 @@ #include -#ifdef USE_TLS -# include "tls-macros.h" +#include "tls-macros.h" /* Two common 'int' variables in TLS. */ COMMON_INT_DEF(foo); COMMON_INT_DEF(bar); -#endif #define TEST_FUNCTION do_test () static int do_test (void) { -#ifdef USE_TLS int result = 0; int *ap, *bp; @@ -82,9 +79,6 @@ do_test (void) } return result; -#else - return 0; -#endif } diff --git a/elf/tst-tls10.h b/elf/tst-tls10.h index 1be6adc..bffc332 100644 --- a/elf/tst-tls10.h +++ b/elf/tst-tls10.h @@ -1,8 +1,7 @@ #include #include -#if defined USE_TLS && defined HAVE___THREAD \ - && defined HAVE_TLS_MODEL_ATTRIBUTE +#if defined HAVE___THREAD && defined HAVE_TLS_MODEL_ATTRIBUTE # define USE_TLS__THREAD struct A diff --git a/elf/tst-tls14.c b/elf/tst-tls14.c index 428fd52..c1e6ba7 100644 --- a/elf/tst-tls14.c +++ b/elf/tst-tls14.c @@ -6,9 +6,9 @@ #include -#if USE_TLS && HAVE___THREAD +#if HAVE___THREAD -#define AL 4096 +# define AL 4096 struct foo { int i; @@ -55,11 +55,11 @@ do_test (void) return result; } -#define TEST_FUNCTION do_test () +# define TEST_FUNCTION do_test () #else -#define TEST_FUNCTION 0 +# define TEST_FUNCTION 0 #endif diff --git a/elf/tst-tls2.c b/elf/tst-tls2.c index 4174899..3d13272 100644 --- a/elf/tst-tls2.c +++ b/elf/tst-tls2.c @@ -3,21 +3,18 @@ #include -#ifdef USE_TLS -# include "tls-macros.h" +#include "tls-macros.h" /* Two 'int' variables in TLS. */ VAR_INT_DEF(foo); VAR_INT_DEF(bar); -#endif #define TEST_FUNCTION do_test () static int do_test (void) { -#ifdef USE_TLS int result = 0; int *ap, *bp; @@ -82,9 +79,6 @@ do_test (void) } return result; -#else - return 0; -#endif } diff --git a/elf/tst-tls3.c b/elf/tst-tls3.c index 84be435..c5e501e 100644 --- a/elf/tst-tls3.c +++ b/elf/tst-tls3.c @@ -3,15 +3,13 @@ #include -#ifdef USE_TLS -# include "tls-macros.h" +#include "tls-macros.h" /* One define int variable, two externs. */ COMMON_INT_DECL(foo); VAR_INT_DECL(bar); VAR_INT_DEF(baz); -#endif extern int in_dso (void); @@ -21,7 +19,6 @@ extern int in_dso (void); static int do_test (void) { -#ifdef USE_TLS int result = 0; int *ap, *bp, *cp; @@ -67,9 +64,6 @@ do_test (void) result |= in_dso (); return result; -#else - return 0; -#endif } diff --git a/elf/tst-tls4.c b/elf/tst-tls4.c index f92ee53..4ae33db 100644 --- a/elf/tst-tls4.c +++ b/elf/tst-tls4.c @@ -9,7 +9,6 @@ static int do_test (void) { -#ifdef USE_TLS static const char modname[] = "tst-tlsmod2.so"; int result = 0; int *foop; @@ -47,9 +46,6 @@ do_test (void) dlclose (h); return result; -#else - return 0; -#endif } diff --git a/elf/tst-tls5.c b/elf/tst-tls5.c index a571d2c..27b1829 100644 --- a/elf/tst-tls5.c +++ b/elf/tst-tls5.c @@ -9,7 +9,6 @@ static int do_test (void) { -#ifdef USE_TLS static const char modname[] = "tst-tlsmod2.so"; int result = 0; int *foop; @@ -63,9 +62,6 @@ do_test (void) dlclose (h); return result; -#else - return 0; -#endif } diff --git a/elf/tst-tls6.c b/elf/tst-tls6.c index 68d7065..021622d 100644 --- a/elf/tst-tls6.c +++ b/elf/tst-tls6.c @@ -10,7 +10,6 @@ static int do_test (void) { -#ifdef USE_TLS static const char modname[] = "tst-tlsmod2.so"; int result = 0; int *foop; @@ -81,9 +80,6 @@ do_test (void) } return result; -#else - return 0; -#endif } diff --git a/elf/tst-tls7.c b/elf/tst-tls7.c index 37f1a63..1edc2b6 100644 --- a/elf/tst-tls7.c +++ b/elf/tst-tls7.c @@ -10,7 +10,6 @@ static int do_test (void) { -#ifdef USE_TLS static const char modname[] = "tst-tlsmod3.so"; int result = 0; int (*fp) (void); @@ -52,9 +51,6 @@ do_test (void) } return result; -#else - return 0; -#endif } diff --git a/elf/tst-tls8.c b/elf/tst-tls8.c index ccc4e9f..36b1bac 100644 --- a/elf/tst-tls8.c +++ b/elf/tst-tls8.c @@ -10,7 +10,6 @@ static int do_test (void) { -#ifdef USE_TLS static const char modname1[] = "$ORIGIN/tst-tlsmod3.so"; static const char modname2[] = "$ORIGIN/tst-tlsmod4.so"; int result = 0; @@ -165,9 +164,6 @@ do_test (void) } return result; -#else - return 0; -#endif } diff --git a/elf/tst-tls9.c b/elf/tst-tls9.c index e317696..1207851 100644 --- a/elf/tst-tls9.c +++ b/elf/tst-tls9.c @@ -9,7 +9,6 @@ static int do_test (void) { -#ifdef USE_TLS static const char modname1[] = "tst-tlsmod5.so"; static const char modname2[] = "tst-tlsmod6.so"; int result = 0; @@ -33,9 +32,6 @@ do_test (void) dlclose (h2); return result; -#else - return 0; -#endif } diff --git a/elf/tst-tlsmod1.c b/elf/tst-tlsmod1.c index c74a617..4d966c9 100644 --- a/elf/tst-tlsmod1.c +++ b/elf/tst-tlsmod1.c @@ -2,7 +2,6 @@ #include -#ifdef USE_TLS #include "tls-macros.h" @@ -10,7 +9,6 @@ COMMON_INT_DEF(foo); VAR_INT_DEF(bar); VAR_INT_DECL(baz); -#endif extern int in_dso (void); @@ -18,7 +16,6 @@ int in_dso (void) { int result = 0; -#ifdef USE_TLS int *ap, *bp, *cp; /* Get variables using initial exec model. */ @@ -62,7 +59,6 @@ in_dso (void) printf ("baz = %d\n", *cp); result = 1; } -#endif return result; } diff --git a/elf/tst-tlsmod13.c b/elf/tst-tlsmod13.c index beca89f..e4e23af 100644 --- a/elf/tst-tlsmod13.c +++ b/elf/tst-tlsmod13.c @@ -1,7 +1,6 @@ #include -#if defined USE_TLS && defined HAVE___THREAD \ - && defined HAVE_TLS_MODEL_ATTRIBUTE +#if defined HAVE___THREAD && defined HAVE_TLS_MODEL_ATTRIBUTE __thread int a[2] __attribute__ ((tls_model ("initial-exec"))); #else int a[2]; diff --git a/elf/tst-tlsmod13a.c b/elf/tst-tlsmod13a.c index 14b12b0..70a0213 100644 --- a/elf/tst-tlsmod13a.c +++ b/elf/tst-tlsmod13a.c @@ -1,7 +1,6 @@ #include -#if defined USE_TLS && defined HAVE___THREAD \ - && defined HAVE_TLS_MODEL_ATTRIBUTE +#if defined HAVE___THREAD && defined HAVE_TLS_MODEL_ATTRIBUTE __thread int b[2] __attribute__ ((tls_model ("initial-exec"))); #else int b[2]; diff --git a/elf/tst-tlsmod14a.c b/elf/tst-tlsmod14a.c index 0bb393d..ad1d179 100644 --- a/elf/tst-tlsmod14a.c +++ b/elf/tst-tlsmod14a.c @@ -3,9 +3,9 @@ #include -#if USE_TLS && HAVE___THREAD +#if HAVE___THREAD -#define AL 4096 +# define AL 4096 struct foo { int i; @@ -15,9 +15,9 @@ static __thread struct foo f; static struct foo g; -#ifndef FCT -# define FCT in_dso1 -#endif +# ifndef FCT +# define FCT in_dso1 +# endif int diff --git a/elf/tst-tlsmod2.c b/elf/tst-tlsmod2.c index 98d9d3e..9819233 100644 --- a/elf/tst-tlsmod2.c +++ b/elf/tst-tlsmod2.c @@ -2,7 +2,6 @@ #include -#ifdef USE_TLS #include "tls-macros.h" @@ -35,4 +34,3 @@ in_dso (int n, int *caller_foop) return result; } -#endif diff --git a/elf/tst-tlsmod3.c b/elf/tst-tlsmod3.c index 4a8aad6..5c456ee 100644 --- a/elf/tst-tlsmod3.c +++ b/elf/tst-tlsmod3.c @@ -2,8 +2,7 @@ #include -#ifdef USE_TLS -# include "tls-macros.h" +#include "tls-macros.h" extern int in_dso (int n, int *caller_foop); @@ -38,4 +37,3 @@ in_dso2 (void) return result; } -#endif diff --git a/elf/tst-tlsmod4.c b/elf/tst-tlsmod4.c index 5285e82..dd95486 100644 --- a/elf/tst-tlsmod4.c +++ b/elf/tst-tlsmod4.c @@ -2,8 +2,7 @@ #include -#ifdef USE_TLS -# include "tls-macros.h" +#include "tls-macros.h" COMMON_INT_DEF(baz); @@ -35,4 +34,3 @@ in_dso (int n, int *caller_bazp) return result; } -#endif diff --git a/elf/tst-tlsmod5.c b/elf/tst-tlsmod5.c index 2ec69e1..00d3a9d 100644 --- a/elf/tst-tlsmod5.c +++ b/elf/tst-tlsmod5.c @@ -1,7 +1,5 @@ #include -#ifdef USE_TLS #include "tls-macros.h" COMMON_INT_DEF(foo); -#endif diff --git a/elf/tst-tlsmod6.c b/elf/tst-tlsmod6.c index 0fda51b..244d9ae 100644 --- a/elf/tst-tlsmod6.c +++ b/elf/tst-tlsmod6.c @@ -1,7 +1,5 @@ #include -#ifdef USE_TLS #include "tls-macros.h" COMMON_INT_DEF(bar); -#endif diff --git a/include/errno.h b/include/errno.h index fe8bca4..80c7b6e 100644 --- a/include/errno.h +++ b/include/errno.h @@ -19,7 +19,7 @@ extern int rtld_errno attribute_hidden; # else -# include /* Defines USE_TLS. */ +# include # if USE___THREAD # undef errno diff --git a/include/link.h b/include/link.h index 80eff3a..b45deab 100644 --- a/include/link.h +++ b/include/link.h @@ -42,7 +42,7 @@ extern unsigned int la_objopen (struct link_map *__map, Lmid_t __lmid, #include #include #include -#include /* Defines USE_TLS. */ +#include #include #include @@ -261,7 +261,6 @@ struct link_map const ElfW(Sym) *ret; } l_lookup_cache; -#ifdef USE_TLS /* Thread-local storage related info. */ /* Start of the initialization image. */ @@ -274,14 +273,13 @@ struct link_map size_t l_tls_align; /* Offset of first byte module alignment. */ size_t l_tls_firstbyte_offset; -# ifndef NO_TLS_OFFSET -# define NO_TLS_OFFSET 0 -# endif +#ifndef NO_TLS_OFFSET +# define NO_TLS_OFFSET 0 +#endif /* For objects present at startup time: offset in the static TLS block. */ ptrdiff_t l_tls_offset; /* Index of the module in the dtv array. */ size_t l_tls_modid; -#endif /* Information used to change permission after the relocations are done. */ diff --git a/include/tls.h b/include/tls.h index ffd3e4e..1642456 100644 --- a/include/tls.h +++ b/include/tls.h @@ -5,8 +5,7 @@ #include_next -#if USE_TLS && HAVE___THREAD \ - && (!defined NOT_IN_libc || defined IS_IN_libpthread) +#if HAVE___THREAD && (!defined NOT_IN_libc || defined IS_IN_libpthread) # define USE___THREAD 1 diff --git a/locale/global-locale.c b/locale/global-locale.c index a5cae3c..2280f68 100644 --- a/locale/global-locale.c +++ b/locale/global-locale.c @@ -1,5 +1,5 @@ /* Locale object representing the global locale controlled by setlocale. - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2002, 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 @@ -60,7 +60,7 @@ struct __locale_struct _nl_global_locale attribute_hidden = }; #include -#if USE_TLS && HAVE___THREAD +#if HAVE___THREAD /* The tsd macros don't permit an initializer. */ __thread void *__libc_tsd_LOCALE = &_nl_global_locale; #else diff --git a/locale/localeinfo.h b/locale/localeinfo.h index 4f746a2..5c1f27f 100644 --- a/locale/localeinfo.h +++ b/locale/localeinfo.h @@ -215,9 +215,7 @@ __libc_tsd_define (extern, LOCALE) we can use __thread variables. So only in that case do we attempt this. */ #if !defined SHARED && defined HAVE___THREAD && defined HAVE_WEAK_SYMBOLS # include -# if USE_TLS -# define NL_CURRENT_INDIRECT 1 -# endif +# define NL_CURRENT_INDIRECT 1 #endif #ifdef NL_CURRENT_INDIRECT diff --git a/malloc/arena.c b/malloc/arena.c index 2179174..1d9f952 100644 --- a/malloc/arena.c +++ b/malloc/arena.c @@ -149,7 +149,7 @@ int __malloc_initialized = -1; static __malloc_ptr_t (*save_malloc_hook) (size_t __size, __const __malloc_ptr_t); -# if !defined _LIBC || !defined USE_TLS || (defined SHARED && !USE___THREAD) +# if !defined _LIBC || (defined SHARED && !USE___THREAD) static __malloc_ptr_t (*save_memalign_hook) (size_t __align, size_t __size, __const __malloc_ptr_t); # endif @@ -385,7 +385,7 @@ extern struct dl_open_hook *_dl_open_hook; libc_hidden_proto (_dl_open_hook); # endif -# if defined SHARED && defined USE_TLS && !USE___THREAD +# if defined SHARED && !USE___THREAD /* This is called by __pthread_initialize_minimal when it needs to use malloc to set up the TLS state. We cannot do the full work of ptmalloc_init (below) until __pthread_initialize_minimal has finished, @@ -428,7 +428,7 @@ ptmalloc_init (void) __malloc_initialized = 0; #ifdef _LIBC -# if defined SHARED && defined USE_TLS && !USE___THREAD +# if defined SHARED && !USE___THREAD /* ptmalloc_init_minimal may already have been called via __libc_malloc_pthread_startup, above. */ if (mp_.pagesize == 0) @@ -437,7 +437,7 @@ ptmalloc_init (void) ptmalloc_init_minimal(); #ifndef NO_THREADS -# if defined _LIBC && defined USE_TLS +# if defined _LIBC /* We know __pthread_initialize_minimal has already been called, and that is enough. */ # define NO_STARTER diff --git a/malloc/hooks.c b/malloc/hooks.c index 708f0fa..8346e73 100644 --- a/malloc/hooks.c +++ b/malloc/hooks.c @@ -1,5 +1,5 @@ /* Malloc implementation for multiple threads without lock contention. - Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + Copyright (C) 2001,2002,2003,2004,2005,2006 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Wolfram Gloger , 2001. @@ -414,7 +414,7 @@ memalign_check(alignment, bytes, caller) #ifndef NO_THREADS # ifdef _LIBC -# if USE___THREAD || (defined USE_TLS && !defined SHARED) +# if USE___THREAD || !defined SHARED /* These routines are never needed in this configuration. */ # define NO_STARTER # endif diff --git a/malloc/malloc.c b/malloc/malloc.c index 4cbce04..d15ed57 100644 --- a/malloc/malloc.c +++ b/malloc/malloc.c @@ -1618,7 +1618,7 @@ static Void_t* memalign_check(size_t alignment, size_t bytes, const Void_t *caller); #ifndef NO_THREADS # ifdef _LIBC -# if USE___THREAD || (defined USE_TLS && !defined SHARED) +# if USE___THREAD || !defined SHARED /* These routines are never needed in this configuration. */ # define NO_STARTER # endif diff --git a/nptl/ChangeLog b/nptl/ChangeLog index 7921488..2edd634 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,4 +1,16 @@ -2006-10-27 Jakub Jelinek +2006-10-27 Ulrich Drepper + + * init.c: USE_TLS support is now default. + * tst-tls5.h: Likewise. + * sysdeps/alpha/tls.h: Likewise. + * sysdeps/i386/tls.h: Likewise. + * sysdeps/ia64/tls.h: Likewise. + * sysdeps/powerpc/tls.h: Likewise. + * sysdeps/s390/tls.h: Likewise. + * sysdeps/sh/tls.h: Likewise. + * sysdeps/sparc/tls.h: Likewise. + * nptl/sysdeps/x86_64/tls.h: Likewise. + 2006-10-27 Jakub Jelinek * sysdeps/unix/sysv/linux/rtld-lowlevel.h (__rtld_mrlock_lock, __rtld_mrlock_change): Update oldval if atomic compare and exchange diff --git a/nptl/init.c b/nptl/init.c index 1444115..dddc975 100644 --- a/nptl/init.c +++ b/nptl/init.c @@ -73,7 +73,7 @@ int __set_robust_list_avail; static const char nptl_version[] __attribute_used__ = VERSION; -#if defined USE_TLS && !defined SHARED +#ifndef SHARED extern void __libc_setup_tls (size_t tcbsize, size_t tcbalign); #endif diff --git a/nptl/sysdeps/alpha/tls.h b/nptl/sysdeps/alpha/tls.h index 20f780c..be2430f 100644 --- a/nptl/sysdeps/alpha/tls.h +++ b/nptl/sysdeps/alpha/tls.h @@ -1,5 +1,5 @@ /* Definition for thread-local data handling. NPTL/Alpha version. - Copyright (C) 2003, 2005 Free Software Foundation, Inc. + Copyright (C) 2003, 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 @@ -48,9 +48,6 @@ typedef union dtv # error "TLS support is required." #endif -/* Signal that TLS support is available. */ -# define USE_TLS 1 - #ifndef __ASSEMBLER__ /* Get system call information. */ diff --git a/nptl/sysdeps/i386/tls.h b/nptl/sysdeps/i386/tls.h index a870a84..d5b3797 100644 --- a/nptl/sysdeps/i386/tls.h +++ b/nptl/sysdeps/i386/tls.h @@ -1,5 +1,5 @@ /* Definition for thread-local data handling. nptl/i386 version. - Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + Copyright (C) 2002, 2003, 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 @@ -65,9 +65,6 @@ typedef struct # error "TLS support is required." #endif -/* Signal that TLS support is available. */ -#define USE_TLS 1 - /* Alignment requirement for the stack. For IA-32 this is governed by the SSE memory functions. */ #define STACK_ALIGN 16 diff --git a/nptl/sysdeps/ia64/tls.h b/nptl/sysdeps/ia64/tls.h index 69101ad..22a8b08 100644 --- a/nptl/sysdeps/ia64/tls.h +++ b/nptl/sysdeps/ia64/tls.h @@ -61,9 +61,6 @@ register struct pthread *__thread_self __asm__("r13"); # error "TLS support is required." #endif -/* Signal that TLS support is available. */ -#define USE_TLS 1 - /* Alignment requirement for the stack. */ #define STACK_ALIGN 16 diff --git a/nptl/sysdeps/powerpc/tls.h b/nptl/sysdeps/powerpc/tls.h index 976a271..ddaafe2 100644 --- a/nptl/sysdeps/powerpc/tls.h +++ b/nptl/sysdeps/powerpc/tls.h @@ -1,5 +1,5 @@ /* Definition for thread-local data handling. NPTL/PowerPC version. - Copyright (C) 2003, 2005 Free Software Foundation, Inc. + Copyright (C) 2003, 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 @@ -48,9 +48,6 @@ typedef union dtv # error "TLS support is required." #endif -/* Signal that TLS support is available. */ -# define USE_TLS 1 - #ifndef __ASSEMBLER__ /* Get system call information. */ diff --git a/nptl/sysdeps/s390/tls.h b/nptl/sysdeps/s390/tls.h index 89ff095..6f6f17b 100644 --- a/nptl/sysdeps/s390/tls.h +++ b/nptl/sysdeps/s390/tls.h @@ -1,5 +1,5 @@ /* Definition for thread-local data handling. NPTL/s390 version. - Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. + Copyright (C) 2003, 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 @@ -66,9 +66,6 @@ typedef struct # error "TLS support is required." #endif -/* Signal that TLS support is available. */ -#define USE_TLS 1 - /* Alignment requirement for the stack. For IA-32 this is governed by the SSE memory functions. */ #define STACK_ALIGN 16 diff --git a/nptl/sysdeps/sh/tls.h b/nptl/sysdeps/sh/tls.h index 49d1055..d9aa107 100644 --- a/nptl/sysdeps/sh/tls.h +++ b/nptl/sysdeps/sh/tls.h @@ -1,5 +1,5 @@ /* Definition for thread-local data handling. NPTL/SH version. - Copyright (C) 2003, 2005 Free Software Foundation, Inc. + Copyright (C) 2003, 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 @@ -56,9 +56,6 @@ typedef struct # error "TLS support is required." #endif -/* Signal that TLS support is available. */ -# define USE_TLS 1 - #ifndef __ASSEMBLER__ /* Get system call information. */ diff --git a/nptl/sysdeps/sparc/tls.h b/nptl/sysdeps/sparc/tls.h index 127bbf6..4fbe426 100644 --- a/nptl/sysdeps/sparc/tls.h +++ b/nptl/sysdeps/sparc/tls.h @@ -60,9 +60,6 @@ typedef struct # error "TLS support is required." #endif -/* Signal that TLS support is available. */ -#define USE_TLS 1 - #ifndef __ASSEMBLER__ /* Get system call information. */ # include diff --git a/nptl/sysdeps/x86_64/tls.h b/nptl/sysdeps/x86_64/tls.h index 65ff063..7618573 100644 --- a/nptl/sysdeps/x86_64/tls.h +++ b/nptl/sysdeps/x86_64/tls.h @@ -62,9 +62,6 @@ typedef struct # error "TLS support is required." #endif -/* Signal that TLS support is available. */ -#define USE_TLS 1 - /* Alignment requirement for the stack. */ #define STACK_ALIGN 16 diff --git a/nptl/tst-tls5.h b/nptl/tst-tls5.h index b7c14eb..9a76ab7 100644 --- a/nptl/tst-tls5.h +++ b/nptl/tst-tls5.h @@ -2,7 +2,7 @@ #include #include -#if USE_TLS && HAVE___THREAD +#if HAVE___THREAD struct tls_obj { diff --git a/nptl_db/ChangeLog b/nptl_db/ChangeLog index 2bb82f4..f96ab04 100644 --- a/nptl_db/ChangeLog +++ b/nptl_db/ChangeLog @@ -1,3 +1,7 @@ +2006-10-27 Ulrich Drepper + + * structs.def: USE_TLS support is now default. + 2006-02-03 Roland McGrath * structs.def: Add a descriptor for pointer.val field of dtv_t. diff --git a/nptl_db/structs.def b/nptl_db/structs.def index 823af5c..20fa014 100644 --- a/nptl_db/structs.def +++ b/nptl_db/structs.def @@ -68,15 +68,11 @@ DB_STRUCT_FIELD (pthread_key_data, data) DB_STRUCT (pthread_key_data_level2) DB_STRUCT_ARRAY_FIELD (pthread_key_data_level2, data) -#if USE_TLS DB_STRUCT_FIELD (link_map, l_tls_modid) -#endif -#if !defined IS_IN_libpthread || USE_TLS DB_STRUCT_ARRAY_FIELD (dtv, dtv) -# define pointer_val pointer.val /* Field of anonymous struct in dtv_t. */ +#define pointer_val pointer.val /* Field of anonymous struct in dtv_t. */ DB_STRUCT_FIELD (dtv_t, pointer_val) -#endif #if !defined IS_IN_libpthread || TLS_TCB_AT_TP DB_STRUCT_FIELD (pthread, dtvp) #endif diff --git a/resolv/Versions b/resolv/Versions index 7016365..5a350ca 100644 --- a/resolv/Versions +++ b/resolv/Versions @@ -2,7 +2,7 @@ libc { GLIBC_2.0 { -%if !(USE_TLS && HAVE___THREAD) +%if !HAVE___THREAD # global variables _h_errno; %endif @@ -17,7 +17,7 @@ libc { # variables in normal name space h_errlist; h_nerr; -%if !(USE_TLS && HAVE___THREAD) +%if !HAVE___THREAD h_errno; %endif @@ -34,7 +34,7 @@ libc { GLIBC_PRIVATE { __gai_sigqueue; -%if USE_TLS && HAVE___THREAD +%if HAVE___THREAD # This version is for the TLS symbol, GLIBC_2.0 is the old object symbol. h_errno; __resp; %endif diff --git a/sysdeps/alpha/dl-machine.h b/sysdeps/alpha/dl-machine.h index 88c357e..29f500b 100644 --- a/sysdeps/alpha/dl-machine.h +++ b/sysdeps/alpha/dl-machine.h @@ -1,5 +1,5 @@ /* Machine-dependent ELF dynamic relocation inline functions. Alpha version. - Copyright (C) 1996-2002, 2003, 2004, 2005 Free Software Foundation, Inc. + Copyright (C) 1996-2005, 2006 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Richard Henderson . @@ -232,14 +232,14 @@ $fixup_stack: \n\ to one of the main executable's symbols, as for a COPY reloc. This is unused on Alpha. */ -#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD) -#define elf_machine_type_class(type) \ +#if !defined RTLD_BOOTSTRAP || USE___THREAD +# define elf_machine_type_class(type) \ (((type) == R_ALPHA_JMP_SLOT \ || (type) == R_ALPHA_DTPMOD64 \ || (type) == R_ALPHA_DTPREL64 \ || (type) == R_ALPHA_TPREL64) * ELF_RTYPE_CLASS_PLT) #else -#define elf_machine_type_class(type) \ +# define elf_machine_type_class(type) \ (((type) == R_ALPHA_JMP_SLOT) * ELF_RTYPE_CLASS_PLT) #endif @@ -439,40 +439,40 @@ elf_machine_rela (struct link_map *map, memcpy (reloc_addr_arg, &sym_value, 8); } #endif -#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD) +#if !defined RTLD_BOOTSTRAP || USE___THREAD else if (r_type == R_ALPHA_DTPMOD64) { -#ifdef RTLD_BOOTSTRAP +# ifdef RTLD_BOOTSTRAP /* During startup the dynamic linker is always index 1. */ *reloc_addr = 1; -#else +# else /* Get the information from the link map returned by the resolv function. */ if (sym_map != NULL) *reloc_addr = sym_map->l_tls_modid; -#endif +# endif } else if (r_type == R_ALPHA_DTPREL64) { -#ifndef RTLD_BOOTSTRAP +# ifndef RTLD_BOOTSTRAP /* During relocation all TLS symbols are defined and used. Therefore the offset is already correct. */ *reloc_addr = sym_raw_value; -#endif +# endif } else if (r_type == R_ALPHA_TPREL64) { -#ifdef RTLD_BOOTSTRAP +# ifdef RTLD_BOOTSTRAP *reloc_addr = sym_raw_value + map->l_tls_offset; -#else +# else if (sym_map) { CHECK_STATIC_TLS (map, sym_map); *reloc_addr = sym_raw_value + sym_map->l_tls_offset; } -#endif +# endif } -#endif /* USE_TLS */ +#endif else _dl_reloc_bad_type (map, r_type, 0); } diff --git a/sysdeps/alpha/libc-tls.c b/sysdeps/alpha/libc-tls.c index 24629e9..7e02769 100644 --- a/sysdeps/alpha/libc-tls.c +++ b/sysdeps/alpha/libc-tls.c @@ -1,5 +1,5 @@ /* Thread-local storage handling in the ELF dynamic linker. Alpha version. - Copyright (C) 2003, 2005 Free Software Foundation, Inc. + Copyright (C) 2003, 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 @@ -20,8 +20,6 @@ #include #include -#if USE_TLS - /* On Alpha, linker optimizations are not required, so __tls_get_addr can be called even in statically linked binaries. In this case module must be always 1 and PT_TLS segment exist in the binary, otherwise it @@ -33,5 +31,3 @@ __tls_get_addr (tls_index *ti) dtv_t *dtv = THREAD_DTV (); return (char *) dtv[1].pointer.val + ti->ti_offset; } - -#endif diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h index 4fa3c01..98ba7d5 100644 --- a/sysdeps/generic/ldsodefs.h +++ b/sysdeps/generic/ldsodefs.h @@ -447,11 +447,6 @@ struct rtld_global It returns an errno code or zero on success. */ EXTERN int (*_dl_make_stack_executable_hook) (void **) internal_function; - /* Keep the conditional TLS members at the end so the layout of the - structure used by !USE_TLS code matches the prefix of the layout in - the USE_TLS rtld. Note that `struct link_map' is conditionally - defined as well, so _dl_rtld_map needs to be last before this. */ -#ifdef USE_TLS /* Highest dtv index currently needed. */ EXTERN size_t _dl_tls_max_dtv_idx; /* Flag signalling whether there are gaps in the module ID allocation. */ @@ -479,10 +474,10 @@ struct rtld_global /* Number of additional entries in the slotinfo array of each slotinfo list element. A large number makes it almost certain take we never have to iterate beyond the first element in the slotinfo list. */ -# define TLS_SLOTINFO_SURPLUS (62) +#define TLS_SLOTINFO_SURPLUS (62) /* Number of additional slots in the dtv allocated. */ -# define DTV_SURPLUS (14) +#define DTV_SURPLUS (14) /* Initial dtv of the main thread, not allocated with normal malloc. */ EXTERN void *_dl_initial_dtv; @@ -490,7 +485,6 @@ struct rtld_global EXTERN size_t _dl_tls_generation; EXTERN void (*_dl_init_static_tls) (struct link_map *); -#endif #ifdef SHARED }; @@ -1037,9 +1031,7 @@ rtld_hidden_proto (_dl_allocate_tls_init) extern void _dl_deallocate_tls (void *tcb, bool dealloc_tcb) internal_function; rtld_hidden_proto (_dl_deallocate_tls) -#if defined USE_TLS extern void _dl_nothread_init_static_tls (struct link_map *) attribute_hidden; -#endif /* Find origin of the executable. */ extern const char *_dl_get_origin (void) attribute_hidden; diff --git a/sysdeps/generic/tls.h b/sysdeps/generic/tls.h index 6a23ec0..06e41ad 100644 --- a/sysdeps/generic/tls.h +++ b/sysdeps/generic/tls.h @@ -1,5 +1,5 @@ /* Definition for thread-local data handling. Generic version. - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2002, 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 @@ -17,11 +17,6 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -/* By default no TLS support is available. This is signaled by the - absence of the symbol USE_TLS. */ -#undef USE_TLS - - /* An architecture-specific version of this file has to defined a number of symbols: diff --git a/sysdeps/i386/dl-machine.h b/sysdeps/i386/dl-machine.h index df3edf5..6b8502c 100644 --- a/sysdeps/i386/dl-machine.h +++ b/sysdeps/i386/dl-machine.h @@ -1,5 +1,5 @@ /* Machine-dependent ELF dynamic relocation inline functions. i386 version. - Copyright (C) 1995-2002, 2003, 2004, 2005 Free Software Foundation, Inc. + Copyright (C) 1995-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 @@ -244,7 +244,7 @@ _dl_start_user:\n\ define the value. ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one of the main executable's symbols, as for a COPY reloc. */ -#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD) +#if !defined RTLD_BOOTSTRAP || USE___THREAD # define elf_machine_type_class(type) \ ((((type) == R_386_JMP_SLOT || (type) == R_386_TLS_DTPMOD32 \ || (type) == R_386_TLS_DTPOFF32 || (type) == R_386_TLS_TPOFF32 \ @@ -352,7 +352,7 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc, *reloc_addr = value; break; -#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD) +#if !defined RTLD_BOOTSTRAP || USE___THREAD case R_386_TLS_DTPMOD32: # ifdef RTLD_BOOTSTRAP /* During startup the dynamic linker is always the module @@ -476,7 +476,6 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, *reloc_addr = (value + reloc->r_addend - (Elf32_Addr) reloc_addr); break; -# ifdef USE_TLS case R_386_TLS_DTPMOD32: /* Get the information from the link map returned by the resolv function. */ @@ -513,7 +512,6 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, + reloc->r_addend; } break; -# endif /* use TLS */ case R_386_COPY: if (sym == NULL) /* This can happen in trace mode if an object could not be diff --git a/sysdeps/ia64/dl-machine.h b/sysdeps/ia64/dl-machine.h index 5534969..61b4ea9 100644 --- a/sysdeps/ia64/dl-machine.h +++ b/sysdeps/ia64/dl-machine.h @@ -1,5 +1,5 @@ /* Machine-dependent ELF dynamic relocation inline functions. IA-64 version. - Copyright (C) 1995-1997, 2000-2004, 2005 Free Software Foundation, Inc. + Copyright (C) 1995-1997, 2000-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 @@ -311,7 +311,7 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) of the main executable's symbols, as for a COPY reloc, which we don't use. */ /* ??? Ignore *MSB for now. */ -#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD) +#if !defined RTLD_BOOTSTRAP || USE___THREAD #define elf_machine_type_class(type) \ (((type) == R_IA64_IPLTLSB || (type) == R_IA64_DTPMOD64LSB \ || (type) == R_IA64_DTPREL64LSB || (type) == R_IA64_TPREL64LSB) \ @@ -432,7 +432,7 @@ elf_machine_rela (struct link_map *map, value = _dl_make_fptr (sym_map, sym, value); else if (R_IA64_TYPE (r_type) == R_IA64_TYPE (R_IA64_PCREL64LSB)) value -= (Elf64_Addr) reloc_addr & -16; -#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || defined USE___THREAD) +#if !defined RTLD_BOOTSTRAP || defined USE___THREAD else if (R_IA64_TYPE (r_type) == R_IA64_TYPE (R_IA64_DTPMOD64LSB)) # ifdef RTLD_BOOTSTRAP /* During startup the dynamic linker is always index 1. */ diff --git a/sysdeps/ia64/libc-tls.c b/sysdeps/ia64/libc-tls.c index 2c0eeae..9751284 100644 --- a/sysdeps/ia64/libc-tls.c +++ b/sysdeps/ia64/libc-tls.c @@ -1,5 +1,5 @@ /* Thread-local storage handling in the ELF dynamic linker. IA-64 version. - Copyright (C) 2003, 2005 Free Software Foundation, Inc. + Copyright (C) 2003, 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 @@ -19,8 +19,6 @@ #include -#if USE_TLS - /* On IA-64, as it lacks linker optimizations, __tls_get_addr can be called even in statically linked binaries. In this case module must be always 1 and PT_TLS segment @@ -32,5 +30,3 @@ __tls_get_addr (size_t m, size_t offset) dtv_t *dtv = THREAD_DTV (); return (char *) dtv[1].pointer.val + offset; } - -#endif diff --git a/sysdeps/mach/hurd/fork.c b/sysdeps/mach/hurd/fork.c index fa7da60..3288f18 100644 --- a/sysdeps/mach/hurd/fork.c +++ b/sysdeps/mach/hurd/fork.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1994,1995,1996,1997,1999,2001,2002,2004,2005 +/* Copyright (C) 1994,1995,1996,1997,1999,2001,2002,2004,2005,2006 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -532,11 +532,9 @@ __fork (void) /* Set the child user thread up to return 1 from the setjmp above. */ _hurd_longjmp_thread_state (&state, env, 1); -#if USE_TLS /* Do special thread setup for TLS if needed. */ if (err = _hurd_tls_fork (thread, &state)) LOSE; -#endif if (err = __thread_set_state (thread, MACHINE_THREAD_STATE_FLAVOR, (natural_t *) &state, statecount)) diff --git a/sysdeps/mach/hurd/i386/tls.h b/sysdeps/mach/hurd/i386/tls.h index 223a47d..972cac5 100644 --- a/sysdeps/mach/hurd/i386/tls.h +++ b/sysdeps/mach/hurd/i386/tls.h @@ -1,5 +1,5 @@ /* Definitions for thread-local data handling. Hurd/i386 version. - Copyright (C) 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 2003, 2004, 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 @@ -25,9 +25,6 @@ /* Some things really need not be machine-dependent. */ # include -/* Indiciate that TLS support is available. */ -# define USE_TLS 1 - /* The TCB can have any size and the memory following the address the thread pointer points to is unspecified. Allocate the TCB there. */ # define TLS_TCB_AT_TP 1 diff --git a/sysdeps/powerpc/powerpc32/dl-machine.c b/sysdeps/powerpc/powerpc32/dl-machine.c index 4120a02..fc46099 100644 --- a/sysdeps/powerpc/powerpc32/dl-machine.c +++ b/sysdeps/powerpc/powerpc32/dl-machine.c @@ -1,5 +1,5 @@ /* Machine-dependent ELF dynamic relocation functions. PowerPC version. - Copyright (C) 1995-2003, 2004, 2005 Free Software Foundation, Inc. + Copyright (C) 1995-2003, 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 @@ -564,13 +564,12 @@ __process_machine_rela (struct link_map *map, } break; -#ifdef USE_TLS #define CHECK_STATIC_TLS(map, sym_map) \ do { \ if (__builtin_expect ((sym_map)->l_tls_offset == NO_TLS_OFFSET, 0)) \ _dl_allocate_static_tls (sym_map); \ } while (0) -# define DO_TLS_RELOC(suffix) \ +#define DO_TLS_RELOC(suffix) \ case R_PPC_DTPREL##suffix: \ /* During relocation all TLS symbols are defined and used. \ Therefore the offset is already correct. */ \ @@ -609,7 +608,6 @@ __process_machine_rela (struct link_map *map, DO_TLS_RELOC (16_LO) DO_TLS_RELOC (16_HI) DO_TLS_RELOC (16_HA) -#endif default: _dl_reloc_bad_type (map, rinfo, 0); diff --git a/sysdeps/powerpc/powerpc32/dl-machine.h b/sysdeps/powerpc/powerpc32/dl-machine.h index 496fa71..a50ffdd 100644 --- a/sysdeps/powerpc/powerpc32/dl-machine.h +++ b/sysdeps/powerpc/powerpc32/dl-machine.h @@ -1,5 +1,5 @@ /* Machine-dependent ELF dynamic relocation inline functions. PowerPC version. - Copyright (C) 1995-2002, 2003, 2005 Free Software Foundation, Inc. + Copyright (C) 1995-2002, 2003, 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 @@ -138,7 +138,7 @@ __elf_preferred_address(struct link_map *loader, size_t maplength, /* We never want to use a PLT entry as the destination of a reloc, when what is being relocated is a branch. This is partly for efficiency, but mostly so we avoid loops. */ -#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD) +#if !defined RTLD_BOOTSTRAP || USE___THREAD #define elf_machine_type_class(type) \ ((((type) == R_PPC_JMP_SLOT \ || (type) == R_PPC_REL24 \ @@ -330,7 +330,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, *reloc_addr = value; break; -#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD) \ +#if (!defined RTLD_BOOTSTRAP || USE___THREAD) \ && !defined RESOLVE_CONFLICT_FIND_MAP # ifdef RTLD_BOOTSTRAP # define NOT_BOOTSTRAP 0 @@ -361,7 +361,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, *reloc_addr = TLS_TPREL_VALUE (sym_map, sym, reloc); } break; -#endif /* USE_TLS etc. */ +#endif case R_PPC_JMP_SLOT: #ifdef RESOLVE_CONFLICT_FIND_MAP diff --git a/sysdeps/powerpc/powerpc64/dl-machine.h b/sysdeps/powerpc/powerpc64/dl-machine.h index cec271b..89a69e1 100644 --- a/sysdeps/powerpc/powerpc64/dl-machine.h +++ b/sysdeps/powerpc/powerpc64/dl-machine.h @@ -1,7 +1,6 @@ /* Machine-dependent ELF dynamic relocation inline functions. PowerPC64 version. - Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 - Free Software Foundation, Inc. + Copyright 1995-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 @@ -260,7 +259,7 @@ BODY_PREFIX "_dl_start_user:\n" \ ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one of the main executable's symbols, as for a COPY reloc. */ -#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD) +#if !defined RTLD_BOOTSTRAP || USE___THREAD #define elf_machine_type_class(type) \ /* This covers all the TLS relocs, though most won't appear. */ \ (((((type) >= R_PPC64_DTPMOD64 && (type) <= R_PPC64_TPREL16_HIGHESTA) \ @@ -495,7 +494,7 @@ elf_machine_rela_relative (Elf64_Addr l_addr, const Elf64_Rela *reloc, *reloc_addr = l_addr + reloc->r_addend; } -#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD) +#if !defined RTLD_BOOTSTRAP || USE___THREAD /* This computes the value used by TPREL* relocs. */ auto inline Elf64_Addr __attribute__ ((always_inline, const)) elf_machine_tprel (struct link_map *map, @@ -562,7 +561,7 @@ elf_machine_rela (struct link_map *map, #endif return; -#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD) +#if !defined RTLD_BOOTSTRAP || USE___THREAD case R_PPC64_DTPMOD64: # ifdef RTLD_BOOTSTRAP /* During startup the dynamic linker is always index 1. */ @@ -645,7 +644,7 @@ elf_machine_rela (struct link_map *map, value = elf_machine_tprel (map, sym_map, sym, reloc); *(Elf64_Half *) reloc_addr = PPC_HIGHESTA (value); break; -#endif /* USE_TLS etc. */ +#endif #ifndef RTLD_BOOTSTRAP /* None of the following appear in ld.so */ case R_PPC64_ADDR16_LO_DS: diff --git a/sysdeps/s390/libc-tls.c b/sysdeps/s390/libc-tls.c index f177f43..766d565 100644 --- a/sysdeps/s390/libc-tls.c +++ b/sysdeps/s390/libc-tls.c @@ -1,5 +1,5 @@ /* Thread-local storage handling in the ELF dynamic linker. S390 version. - Copyright (C) 2003, 2005 Free Software Foundation, Inc. + Copyright (C) 2003, 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 @@ -20,11 +20,9 @@ #include #include -#if USE_TLS - /* On s390, the literal pool entry that refers to __tls_get_offset is not removed, even if all branches that use the literal pool - entry gets removed by TLS optimizations. To get binaries + entry gets removed by TLS optimizations. To get binaries statically linked __tls_get_offset is defined here but aborts if it is used. */ @@ -33,5 +31,3 @@ __tls_get_offset (size_t m, size_t offset) { abort (); } - -#endif diff --git a/sysdeps/s390/s390-32/dl-machine.h b/sysdeps/s390/s390-32/dl-machine.h index 8bbf858..64bf342 100644 --- a/sysdeps/s390/s390-32/dl-machine.h +++ b/sysdeps/s390/s390-32/dl-machine.h @@ -1,5 +1,5 @@ /* Machine-dependent ELF dynamic relocation inline functions. S390 Version. - Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 + Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. Contributed by Carl Pederson & Martin Schwidefsky. This file is part of the GNU C Library. @@ -209,17 +209,11 @@ _dl_start_user:\n\ define the value. ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one of the main executable's symbols, as for a COPY reloc. */ -#ifdef USE_TLS -# define elf_machine_type_class(type) \ +#define elf_machine_type_class(type) \ ((((type) == R_390_JMP_SLOT || (type) == R_390_TLS_DTPMOD \ || (type) == R_390_TLS_DTPOFF || (type) == R_390_TLS_TPOFF) \ * ELF_RTYPE_CLASS_PLT) \ | (((type) == R_390_COPY) * ELF_RTYPE_CLASS_COPY)) -#else -# define elf_machine_type_class(type) \ - ((((type) == R_390_JMP_SLOT) * ELF_RTYPE_CLASS_PLT) \ - | (((type) == R_390_COPY) * ELF_RTYPE_CLASS_COPY)) -#endif /* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */ #define ELF_MACHINE_JMP_SLOT R_390_JMP_SLOT @@ -315,7 +309,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, *reloc_addr = value + reloc->r_addend; break; -#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD) \ +#if (!defined RTLD_BOOTSTRAP || USE___THREAD) \ && !defined RESOLVE_CONFLICT_FIND_MAP case R_390_TLS_DTPMOD: # ifdef RTLD_BOOTSTRAP diff --git a/sysdeps/s390/s390-64/dl-machine.h b/sysdeps/s390/s390-64/dl-machine.h index 5026a2e..fa893be 100644 --- a/sysdeps/s390/s390-64/dl-machine.h +++ b/sysdeps/s390/s390-64/dl-machine.h @@ -1,6 +1,6 @@ /* Machine-dependent ELF dynamic relocation inline functions. 64 bit S/390 Version. - Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + Copyright (C) 2001-2005, 2006 Free Software Foundation, Inc. Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). This file is part of the GNU C Library. @@ -192,17 +192,11 @@ _dl_start_user:\n\ define the value. ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one of the main executable's symbols, as for a COPY reloc. */ -#ifdef USE_TLS -# define elf_machine_type_class(type) \ +#define elf_machine_type_class(type) \ ((((type) == R_390_JMP_SLOT || (type) == R_390_TLS_DTPMOD \ || (type) == R_390_TLS_DTPOFF || (type) == R_390_TLS_TPOFF) \ * ELF_RTYPE_CLASS_PLT) \ | (((type) == R_390_COPY) * ELF_RTYPE_CLASS_COPY)) -#else -# define elf_machine_type_class(type) \ - ((((type) == R_390_JMP_SLOT) * ELF_RTYPE_CLASS_PLT) \ - | (((type) == R_390_COPY) * ELF_RTYPE_CLASS_COPY)) -#endif /* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */ #define ELF_MACHINE_JMP_SLOT R_390_JMP_SLOT @@ -294,7 +288,7 @@ elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc, *reloc_addr = value + reloc->r_addend; break; -#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD) \ +#if (!defined RTLD_BOOTSTRAP || USE___THREAD) \ && !defined RESOLVE_CONFLICT_FIND_MAP case R_390_TLS_DTPMOD: # ifdef RTLD_BOOTSTRAP diff --git a/sysdeps/sh/dl-machine.h b/sysdeps/sh/dl-machine.h index e73c6d7..78f70e3 100644 --- a/sysdeps/sh/dl-machine.h +++ b/sysdeps/sh/dl-machine.h @@ -1,5 +1,5 @@ /* Machine-dependent ELF dynamic relocation inline functions. SH version. - Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 + Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -208,7 +208,7 @@ __fpscr_values:\n\ define the value. ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one of the main executable's symbols, as for a COPY reloc. */ -#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD) +#if !defined RTLD_BOOTSTRAP || USE___THREAD # define elf_machine_type_class(type) \ ((((type) == R_SH_JMP_SLOT || (type) == R_SH_TLS_DTPMOD32 \ || (type) == R_SH_TLS_DTPOFF32 || (type) == R_SH_TLS_TPOFF32) \ @@ -354,7 +354,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, /* These addresses are always aligned. */ *reloc_addr = value; break; -#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD) +#if !defined RTLD_BOOTSTRAP || USE___THREAD /* XXX Remove TLS relocations which are not needed. */ case R_SH_TLS_DTPMOD32: # ifdef RTLD_BOOTSTRAP diff --git a/sysdeps/sparc/sparc32/dl-machine.h b/sysdeps/sparc/sparc32/dl-machine.h index 02dabaa..19aac6a 100644 --- a/sysdeps/sparc/sparc32/dl-machine.h +++ b/sysdeps/sparc/sparc32/dl-machine.h @@ -188,7 +188,7 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) PLT entries should not be allowed to define the value. ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one of the main executable's symbols, as for a COPY reloc. */ -#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD) +#if !defined RTLD_BOOTSTRAP || USE___THREAD # define elf_machine_type_class(type) \ ((((type) == R_SPARC_JMP_SLOT \ || ((type) >= R_SPARC_TLS_GD_HI22 && (type) <= R_SPARC_TLS_TPOFF64)) \ @@ -459,7 +459,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, so we can optimize the first instruction of .plt out. */ sparc_fixup_plt (reloc, reloc_addr, value, 0); break; -#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD) \ +#if (!defined RTLD_BOOTSTRAP || USE___THREAD) \ && !defined RESOLVE_CONFLICT_FIND_MAP case R_SPARC_TLS_DTPMOD32: /* Get the information from the link map returned by the diff --git a/sysdeps/sparc/sparc64/dl-machine.h b/sysdeps/sparc/sparc64/dl-machine.h index 314a784..3eee672 100644 --- a/sysdeps/sparc/sparc64/dl-machine.h +++ b/sysdeps/sparc/sparc64/dl-machine.h @@ -240,7 +240,7 @@ elf_machine_plt_value (struct link_map *map, const Elf64_Rela *reloc, PLT entries should not be allowed to define the value. ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one of the main executable's symbols, as for a COPY reloc. */ -#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD) +#if !defined RTLD_BOOTSTRAP || USE___THREAD # define elf_machine_type_class(type) \ ((((type) == R_SPARC_JMP_SLOT \ || ((type) >= R_SPARC_TLS_GD_HI22 && (type) <= R_SPARC_TLS_TPOFF64)) \ @@ -589,7 +589,7 @@ elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc, sparc64_fixup_plt (map, reloc, reloc_addr, value, reloc->r_addend, 0); #endif break; -#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD) \ +#if (!defined RTLD_BOOTSTRAP || USE___THREAD) \ && !defined RESOLVE_CONFLICT_FIND_MAP case R_SPARC_TLS_DTPMOD64: /* Get the information from the link map returned by the diff --git a/sysdeps/x86_64/dl-machine.h b/sysdeps/x86_64/dl-machine.h index 73e2717..31a7013 100644 --- a/sysdeps/x86_64/dl-machine.h +++ b/sysdeps/x86_64/dl-machine.h @@ -1,5 +1,5 @@ /* Machine-dependent ELF dynamic relocation inline functions. x86-64 version. - Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + Copyright (C) 2001-2005, 2006 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Andreas Jaeger . @@ -190,7 +190,7 @@ _dl_start_user:\n\ define the value. ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one of the main executable's symbols, as for a COPY reloc. */ -#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD) +#if !defined RTLD_BOOTSTRAP || USE___THREAD # define elf_machine_type_class(type) \ ((((type) == R_X86_64_JUMP_SLOT \ || (type) == R_X86_64_DTPMOD64 \ @@ -300,7 +300,7 @@ elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc, *reloc_addr = value + reloc->r_addend; break; -#if defined USE_TLS && !defined RESOLVE_CONFLICT_FIND_MAP +#ifndef RESOLVE_CONFLICT_FIND_MAP case R_X86_64_DTPMOD64: # ifdef RTLD_BOOTSTRAP /* During startup the dynamic linker is always the module @@ -339,7 +339,7 @@ elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc, - sym_map->l_tls_offset); } break; -#endif /* use TLS */ +#endif #ifndef RTLD_BOOTSTRAP case R_X86_64_64: diff --git a/tls.make.c b/tls.make.c index 778d8ef..d19e2e1 100644 --- a/tls.make.c +++ b/tls.make.c @@ -2,11 +2,7 @@ #include -#if USE_TLS @@@ use-tls = yes @@@ -#else -@@@ use-tls = no @@@ -#endif #if USE___THREAD @@@ use-thread = yes @@@ -- 2.7.4