[git commit nptl] check if USE_TLS is defined before use

Hans-Christian Egtvedt hans-christian.egtvedt at atmel.com
Thu Dec 17 12:42:26 UTC 2009


commit: http://git.uclibc.org/uClibc/commit/?id=f3217f9be3225c4943677d03b274cbc0cb4ed228
branch: http://git.uclibc.org/uClibc/commit/?id=refs/heads/nptl

This patch will convert all the #ifdef USE_TLS and #if USE_TLS to
 #if defined(USE_TLS) && USE_TLS.

By checking if the USE_TLS is defined before checking its value will result in
correct behavior for architectures not defining this config symbol.

Signed-off-by: Hans-Christian Egtvedt <hans-christian.egtvedt at atmel.com>
Acked-by: Carmelo AMOROSO <carmelo.amoroso at st.com>
---
 include/link.h                                     |    2 +-
 ldso/include/dl-hash.h                             |    4 ++--
 ldso/ldso/dl-elf.c                                 |    8 ++++----
 ldso/ldso/dl-hash.c                                |    4 ++--
 ldso/ldso/dl-startup.c                             |    2 +-
 ldso/ldso/ldso.c                                   |   18 +++++++++---------
 ldso/libdl/libdl.c                                 |   20 ++++++++++----------
 libc/misc/elf/dl-support.c                         |    6 +++---
 libpthread/linuxthreads.old/pthread.c              |    6 +++---
 .../linuxthreads.old_db/td_thr_tls_get_addr.c      |    2 +-
 10 files changed, 36 insertions(+), 36 deletions(-)

diff --git a/include/link.h b/include/link.h
index ec863c9..cbef616 100644
--- a/include/link.h
+++ b/include/link.h
@@ -104,7 +104,7 @@ struct link_map
     ElfW(Dyn) *l_ld;		/* Dynamic section of the shared object.  */
     struct link_map *l_next, *l_prev; /* Chain of loaded objects.  */
 
-#ifdef USE_TLS
+#if defined(USE_TLS) && USE_TLS
     /* Thread-local storage related info.  */
 
     /* Start of the initialization image.  */
diff --git a/ldso/include/dl-hash.h b/ldso/include/dl-hash.h
index 2204214..34333f4 100644
--- a/ldso/include/dl-hash.h
+++ b/ldso/include/dl-hash.h
@@ -35,7 +35,7 @@ struct elf_resolve {
   struct elf_resolve * prev;
   /* Nothing after this address is used by gdb. */
 
-#if USE_TLS
+#if defined(USE_TLS) && USE_TLS
   /* Thread-local storage related info.  */
 
   /* Start of the initialization image.  */
@@ -138,7 +138,7 @@ extern struct elf_resolve * _dl_add_elf_hash_table(const char * libname,
 	unsigned long dynamic_addr, unsigned long dynamic_size);
 
 /* Only need extra arg with some configurations */
-#if !(USE_TLS || defined __FDPIC__)
+#if !((defined(USE_TLS) && USE_TLS) || defined __FDPIC__)
 # define _dl_lookup_hash(n, r, m, c, t) _dl_lookup_hash(n, r, m, c)
 #endif
 extern char *_dl_lookup_hash(const char *name, struct dyn_elf *rpnt,
diff --git a/ldso/ldso/dl-elf.c b/ldso/ldso/dl-elf.c
index 6bf5bbd..a0db637 100644
--- a/ldso/ldso/dl-elf.c
+++ b/ldso/ldso/dl-elf.c
@@ -329,7 +329,7 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure,
 	ElfW(Dyn) *dpnt;
 	struct elf_resolve *tpnt;
 	ElfW(Phdr) *ppnt;
-#if USE_TLS
+#if defined(USE_TLS) && USE_TLS
 	ElfW(Phdr) *tlsppnt = NULL;
 #endif
 	char *status, *header;
@@ -437,7 +437,7 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure,
 			}
 		}
 		if (ppnt->p_type == PT_TLS) {
-#if USE_TLS
+#if defined(USE_TLS) && USE_TLS
 			if (ppnt->p_memsz == 0)
 				/* Nothing to do for an empty segment.  */
 				continue;
@@ -733,7 +733,7 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure,
 	tpnt->ppnt = (ElfW(Phdr) *) DL_RELOC_ADDR(tpnt->loadaddr, epnt->e_phoff);
 	tpnt->n_phent = epnt->e_phnum;
 
-#if USE_TLS
+#if defined(USE_TLS) && USE_TLS
 	if (tlsppnt) {
 		_dl_debug_early("Found TLS header for %s\n", libname);
 #if NO_TLS_OFFSET != 0
@@ -875,7 +875,7 @@ int _dl_fixup(struct dyn_elf *rpnt, int now_flag)
 #if 0
 /* _dl_add_to_slotinfo is called by init_tls() for initial DSO
    or by dlopen() for dynamically loaded DSO. */
-#if USE_TLS
+#if defined(USE_TLS) && USE_TLS
 	/* Add object to slot information data if necessasy. */
 	if (tpnt->l_tls_blocksize != 0 && tls_init_tp_called)
 		_dl_add_to_slotinfo ((struct link_map *) tpnt);
diff --git a/ldso/ldso/dl-hash.c b/ldso/ldso/dl-hash.c
index 6d54f37..0048734 100644
--- a/ldso/ldso/dl-hash.c
+++ b/ldso/ldso/dl-hash.c
@@ -158,7 +158,7 @@ static __attribute_noinline__ const ElfW(Sym) *
 check_match (const ElfW(Sym) *sym, char *strtab, const char* undef_name, int type_class)
 {
 
-#if USE_TLS
+#if defined(USE_TLS) && USE_TLS
 	if ((sym->st_value == 0 && (ELF_ST_TYPE(sym->st_info) != STT_TLS))
 		      || (type_class & (sym->st_shndx == SHN_UNDEF)))
 		/* No value or undefined symbol itself */
@@ -335,7 +335,7 @@ char *_dl_lookup_hash(const char *name, struct dyn_elf *rpnt, struct elf_resolve
 
 	if (sym) {
 		/* At this point we have found the requested symbol, do binding */
-#if USE_TLS
+#if defined(USE_TLS) && USE_TLS
 		if (ELF_ST_TYPE(sym->st_info) == STT_TLS) {
 			_dl_assert(tpntp != NULL);
 			*tpntp = tpnt;
diff --git a/ldso/ldso/dl-startup.c b/ldso/ldso/dl-startup.c
index 91b11dc..a51b583 100644
--- a/ldso/ldso/dl-startup.c
+++ b/ldso/ldso/dl-startup.c
@@ -215,7 +215,7 @@ DL_START(unsigned long args)
 	 *                 more work than what is done below for the
 	 *                 loader will have to happen.
 	 */
-#if USE_TLS
+#if defined(USE_TLS) && USE_TLS
 	/* This was done by _dl_memset above. */
 	/* tpnt->l_tls_modid = 0; */
 # if NO_TLS_OFFSET != 0
diff --git a/ldso/ldso/ldso.c b/ldso/ldso/ldso.c
index 125cf96..9903b1c 100644
--- a/ldso/ldso/ldso.c
+++ b/ldso/ldso/ldso.c
@@ -38,7 +38,7 @@
 
 #define ALLOW_ZERO_PLTGOT
 
-#if USE_TLS
+#if defined(USE_TLS) && USE_TLS
 #include "dl-tls.c"
 #endif
 
@@ -225,7 +225,7 @@ void _dl_free(void *p)
 		(*_dl_free_function) (p);
 }
 
-#if USE_TLS
+#if defined(USE_TLS) && USE_TLS
 void *_dl_memalign(size_t __boundary, size_t __size)
 {
 	void *result;
@@ -294,7 +294,7 @@ void _dl_get_ready_to_run(struct elf_resolve *tpnt, DL_LOADADDR_TYPE load_addr,
 	ElfW(Addr) relro_addr = 0;
 	size_t relro_size = 0;
 	struct stat st;
-#if USE_TLS
+#if defined(USE_TLS) && USE_TLS
 	void *tcbp = NULL;
 #endif
 
@@ -371,7 +371,7 @@ void _dl_get_ready_to_run(struct elf_resolve *tpnt, DL_LOADADDR_TYPE load_addr,
 		unlazy = RTLD_NOW;
 	}
 
-#if USE_TLS
+#if defined(USE_TLS) && USE_TLS
 	_dl_error_catch_tsd = &_dl_initial_error_catch_tsd;
 	_dl_init_static_tls = &_dl_nothread_init_static_tls;
 #endif
@@ -491,7 +491,7 @@ void _dl_get_ready_to_run(struct elf_resolve *tpnt, DL_LOADADDR_TYPE load_addr,
 
 		/* Discover any TLS sections if the target supports them. */
 		if (ppnt->p_type == PT_TLS) {
-#if USE_TLS
+#if defined(USE_TLS) && USE_TLS
 			if (ppnt->p_memsz > 0) {
 				app_tpnt->l_tls_blocksize = ppnt->p_memsz;
 				app_tpnt->l_tls_align = ppnt->p_align;
@@ -518,7 +518,7 @@ void _dl_get_ready_to_run(struct elf_resolve *tpnt, DL_LOADADDR_TYPE load_addr,
 	app_tpnt->relro_addr = relro_addr;
 	app_tpnt->relro_size = relro_size;
 
-#if USE_TLS
+#if defined(USE_TLS) && USE_TLS
 	/*
 	 * Adjust the address of the TLS initialization image in
 	 * case the executable is actually an ET_DYN object.
@@ -918,7 +918,7 @@ void _dl_get_ready_to_run(struct elf_resolve *tpnt, DL_LOADADDR_TYPE load_addr,
 	}
 #endif
 
-#if USE_TLS
+#if defined(USE_TLS) && 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
@@ -971,7 +971,7 @@ void _dl_get_ready_to_run(struct elf_resolve *tpnt, DL_LOADADDR_TYPE load_addr,
 			_dl_protect_relro (tpnt);
 	}
 
-#if USE_TLS
+#if defined(USE_TLS) && USE_TLS
 	if (!was_tls_init_tp_called && _dl_tls_max_dtv_idx > 0)
 		++_dl_tls_generation;
 
@@ -1058,7 +1058,7 @@ void _dl_get_ready_to_run(struct elf_resolve *tpnt, DL_LOADADDR_TYPE load_addr,
 	_dl_malloc_function = (void* (*)(size_t)) (intptr_t) _dl_find_hash(__C_SYMBOL_PREFIX__ "malloc",
 			_dl_symbol_tables, NULL, ELF_RTYPE_CLASS_PLT, NULL);
 
-#if USE_TLS
+#if defined(USE_TLS) && USE_TLS
 	/* Find the real functions and make ldso functions use them from now on */
 	_dl_calloc_function = (void* (*)(size_t, size_t)) (intptr_t)
 		_dl_find_hash(__C_SYMBOL_PREFIX__ "calloc", _dl_symbol_tables, NULL, ELF_RTYPE_CLASS_PLT, NULL);
diff --git a/ldso/libdl/libdl.c b/ldso/libdl/libdl.c
index 22b622d..05a68dd 100644
--- a/ldso/libdl/libdl.c
+++ b/ldso/libdl/libdl.c
@@ -39,14 +39,14 @@
 #include <tls.h>
 #endif
 
-#if USE_TLS
+#if defined(USE_TLS) && USE_TLS
 #include <ldsodefs.h>
 extern void (*_dl_init_static_tls) (struct link_map *);
 extern void _dl_add_to_slotinfo(struct link_map  *l);
 #endif
 
 #ifdef SHARED
-# if USE_TLS
+# if defined(USE_TLS) && USE_TLS
 # include <dl-tls.h>
 extern struct link_map *_dl_update_slotinfo(unsigned long int req_modid);
 # endif
@@ -112,7 +112,7 @@ struct r_debug *_dl_debug_addr = NULL;
 #include "../ldso/dl-debug.c"
 
 
-# if USE_TLS
+# if defined(USE_TLS) && USE_TLS
 /*
  * Giving this initialized value preallocates some surplus bytes in the
  * static TLS area, see __libc_setup_tls (libc-tls.c).
@@ -166,7 +166,7 @@ static const char *const dl_error_names[] = {
 };
 
 
-#if USE_TLS
+#if defined(USE_TLS) && USE_TLS
 #ifdef SHARED
 /*
  * Systems which do not have tls_index also probably have to define
@@ -284,7 +284,7 @@ void *dlopen(const char *libname, int flag)
 	unsigned int nlist, i;
 	struct elf_resolve **init_fini_list;
 	static bool _dl_init;
-#if USE_TLS
+#if defined(USE_TLS) && USE_TLS
 	bool any_tls = false;
 #endif
 
@@ -519,7 +519,7 @@ void *dlopen(const char *libname, int flag)
 	/* TODO:  Should we set the protections of all pages back to R/O now ? */
 
 
-#if USE_TLS
+#if defined(USE_TLS) && USE_TLS
 
 	for (i=0; i < nlist; i++) {
 		struct elf_resolve *tmp_tpnt = init_fini_list[i];
@@ -670,7 +670,7 @@ void *dlsym(void *vhandle, const char *name)
 		tpnt = handle->dyn; /* Only search RTLD_GLOBAL objs if global object */
 	ret = _dl_find_hash(name2, handle, NULL, 0, &tls_tpnt);
 
-#if defined USE_TLS && defined SHARED
+#if defined(USE_TLS) && USE_TLS && defined SHARED
 	if (tls_tpnt) {
 		/* The found symbol is a thread-local storage variable.
 		Return the address for to the current thread.  */
@@ -709,7 +709,7 @@ static int do_dlclose(void *vhandle, int need_fini)
 	struct dyn_elf *handle;
 	unsigned int end;
 	unsigned int i, j;
-#if USE_TLS
+#if defined(USE_TLS) && USE_TLS
 	bool any_tls = false;
 	size_t tls_free_start = NO_TLS_OFFSET;
 	size_t tls_free_end = NO_TLS_OFFSET;
@@ -771,7 +771,7 @@ static int do_dlclose(void *vhandle, int need_fini)
 					end = ppnt->p_vaddr + ppnt->p_memsz;
 			}
 
-#if USE_TLS
+#if defined(USE_TLS) && USE_TLS
 			/* Do the cast to make things easy. */
 			tls_lmap = (struct link_map *) tpnt;
 
@@ -924,7 +924,7 @@ static int do_dlclose(void *vhandle, int need_fini)
 	free(handle->init_fini.init_fini);
 	free(handle);
 
-#if USE_TLS
+#if defined(USE_TLS) && USE_TLS
 	/* If we removed any object which uses TLS bump the generation counter.  */
 	if (any_tls) {
 		if (__builtin_expect(++_dl_tls_generation == 0, 0)) {
diff --git a/libc/misc/elf/dl-support.c b/libc/misc/elf/dl-support.c
index 3f52481..665b62a 100644
--- a/libc/misc/elf/dl-support.c
+++ b/libc/misc/elf/dl-support.c
@@ -13,14 +13,14 @@
 
 #include <link.h>
 #include <elf.h>
-#if USE_TLS
+#if defined(USE_TLS) && USE_TLS
 #include <assert.h>
 #include <tls.h>
 #include <ldsodefs.h>
 #include <string.h>
 #endif
 
-#if USE_TLS
+#if defined(USE_TLS) && USE_TLS
 
 void (*_dl_init_static_tls) (struct link_map *) = &_dl_nothread_init_static_tls;
 
@@ -39,7 +39,7 @@ void internal_function _dl_aux_init (ElfW(auxv_t) *av)
    _dl_phnum = (size_t) av[AT_PHNUM].a_un.a_val;
 }
 
-#if USE_TLS
+#if defined(USE_TLS) && USE_TLS
 /* Initialize static TLS area and DTV for current (only) thread.
    libpthread implementations should provide their own hook
    to handle all threads.  */
diff --git a/libpthread/linuxthreads.old/pthread.c b/libpthread/linuxthreads.old/pthread.c
index c988131..ad392e3 100644
--- a/libpthread/linuxthreads.old/pthread.c
+++ b/libpthread/linuxthreads.old/pthread.c
@@ -537,7 +537,7 @@ int __pthread_initialize_manager(void)
   }
   /* Start the thread manager */
   pid = 0;
-#ifdef USE_TLS
+#if defined(USE_TLS) && USE_TLS
   if (__linuxthreads_initial_report_events != 0)
     THREAD_SETMEM (((pthread_descr) NULL), p_report_events,
 		   __linuxthreads_initial_report_events);
@@ -710,7 +710,7 @@ static pthread_descr thread_self_stack(void)
     if (sp >= __pthread_manager_thread_bos && sp < __pthread_manager_thread_tos)
 	return manager_thread;
     h = __pthread_handles + 2;
-# ifdef USE_TLS
+# if defined(USE_TLS) && USE_TLS
     while (h->h_descr == NULL
 	    || ! (sp <= (char *) h->h_descr->p_stackaddr && sp >= h->h_bottom))
 	h++;
@@ -845,7 +845,7 @@ static void pthread_handle_sigcancel(int sig)
     /* Main thread should accumulate times for thread manager and its
        children, so that timings for main thread account for all threads. */
     if (self == __pthread_main_thread) {
-#ifdef USE_TLS
+#if defined(USE_TLS) && USE_TLS
       waitpid(__pthread_manager_thread->p_pid, NULL, __WCLONE);
 #else
       waitpid(__pthread_manager_thread.p_pid, NULL, __WCLONE);
diff --git a/libpthread/linuxthreads.old_db/td_thr_tls_get_addr.c b/libpthread/linuxthreads.old_db/td_thr_tls_get_addr.c
index 19821d6..8e38b69 100644
--- a/libpthread/linuxthreads.old_db/td_thr_tls_get_addr.c
+++ b/libpthread/linuxthreads.old_db/td_thr_tls_get_addr.c
@@ -31,7 +31,7 @@ td_thr_tls_get_addr (const td_thrhandle_t *th __attribute__ ((unused)),
 		     size_t offset __attribute__ ((unused)),
 		     void **address __attribute__ ((unused)))
 {
-#ifdef USE_TLS
+#if defined(USE_TLS) && USE_TLS
   size_t modid;
   union dtv pdtv, *dtvp;
 
-- 
1.6.3.3



More information about the uClibc-cvs mailing list