From c0e02109219a857fc94a26a9eb07d60527730073 Mon Sep 17 00:00:00 2001 From: Filippo Arcidiacono Date: Tue, 25 Jan 2011 10:49:27 +0100 Subject: libdl: fix tls symbol lookup in dlsym Due to merge with prelink, the sym_ref.tpnt is always set when the symbol is found, so it needs to call the _dl_tls_symaddr only for tls symbols. Signed-off-by: Filippo Arcidiacono Signed-off-by: Carmelo Amoroso --- ldso/libdl/libdl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ldso/libdl') diff --git a/ldso/libdl/libdl.c b/ldso/libdl/libdl.c index f95341be7..5007a7e65 100644 --- a/ldso/libdl/libdl.c +++ b/ldso/libdl/libdl.c @@ -710,7 +710,7 @@ void *dlsym(void *vhandle, const char *name) ret = _dl_find_hash(name2, &handle->dyn->symbol_scope, tpnt, 0, &sym_ref); #if defined(USE_TLS) && USE_TLS && defined SHARED - if (sym_ref.tpnt) { + if (sym_ref.sym && (ELF_ST_TYPE(sym_ref.sym->st_info) == STT_TLS) && (sym_ref.tpnt)) { /* The found symbol is a thread-local storage variable. Return the address for to the current thread. */ ret = _dl_tls_symaddr ((struct link_map *)sym_ref.tpnt, (Elf32_Addr)ret); -- cgit v1.2.3