commit 79bcf028ae9f5b6053dcb6c6682a3d70905efde7 Author: Markus Pfeiffer Date: Wed Feb 29 15:14:54 2012 +0000 rtld: add special case in do_dlsym for tls stored symbols diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c index 0d4f2b0..c742274 100644 --- a/libexec/rtld-elf/rtld.c +++ b/libexec/rtld-elf/rtld.c @@ -2717,7 +2717,12 @@ do_dlsym(void *handle, const char *name, void *retaddr, const Ver_Entry *ve, return (make_function_pointer(def, defobj)); else if (ELF_ST_TYPE(def->st_info) == STT_GNU_IFUNC) return (rtld_resolve_ifunc(defobj, def)); - else + else if (ELF_ST_TYPE(def->st_info) == STT_TLS) { + tls_index ti; + ti.ti_module = defobj->tlsindex; + ti.ti_offset = def->st_value; + return (__tls_get_addr(&ti)); + } else return (defobj->relocbase + def->st_value); }