From e092e7c30464555b3fb81adc8f2f479e892b0786 Mon Sep 17 00:00:00 2001 From: Hans-Christian Egtvedt Date: Wed, 16 Dec 2009 13:12:00 +0100 Subject: check if USE_TLS is defined before use 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 Acked-by: Carmelo AMOROSO --- 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 ++++++++++---------- 6 files changed, 28 insertions(+), 28 deletions(-) (limited to 'ldso') diff --git a/ldso/include/dl-hash.h b/ldso/include/dl-hash.h index 22042145e..34333f40f 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 6bf5bbd6a..a0db63750 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 6d54f37b9..0048734ba 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 91b11dc7f..a51b583a4 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 bb414b14a..1f5c87a0d 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 @@ -504,7 +504,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; @@ -531,7 +531,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. @@ -931,7 +931,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 22b622d28..05a68ddcc 100644 --- a/ldso/libdl/libdl.c +++ b/ldso/libdl/libdl.c @@ -39,14 +39,14 @@ #include #endif -#if USE_TLS +#if defined(USE_TLS) && USE_TLS #include 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 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)) { -- cgit v1.2.3