Author: kib
Date: Thu Mar 29 10:32:34 2012
New Revision: 233655
URL: http://svn.freebsd.org/changeset/base/233655

Log:
  Import DragonFly BSD commit
  
    From: Sascha Wildner <s...@online.de>
    Date: Fri, 2 Mar 2012 09:15:56 +0000 (+0100)
    Subject: rtld: Add a special case in do_dlsym() for TLS stored symbols.
    X-Git-Url: 
http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff_plain/1388aaafe730c85693936aaf9bc6d83fc2d981be?hp=bca4412595a8979ab9f1bf36068c806ce88a667a
  
    rtld: Add a special case in do_dlsym() for TLS stored symbols.
  
    Submitted-by: Markus Pfeiffer <markus.pfeif...@morphism.de>
  
  Discussed with:       kan
  MFC after:    1 week

Modified:
  head/libexec/rtld-elf/rtld.c

Modified: head/libexec/rtld-elf/rtld.c
==============================================================================
--- head/libexec/rtld-elf/rtld.c        Thu Mar 29 09:19:00 2012        
(r233654)
+++ head/libexec/rtld-elf/rtld.c        Thu Mar 29 10:32:34 2012        
(r233655)
@@ -2618,6 +2618,7 @@ do_dlsym(void *handle, const char *name,
     const Elf_Sym *def;
     SymLook req;
     RtldLockState lockstate;
+    tls_index ti;
     int res;
 
     def = NULL;
@@ -2732,7 +2733,11 @@ do_dlsym(void *handle, const char *name,
            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) {
+           ti.ti_module = defobj->tlsindex;
+           ti.ti_offset = def->st_value;
+           return (__tls_get_addr(&ti));
+       } else
            return (defobj->relocbase + def->st_value);
     }
 
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to