Date: Thu, 30 Aug 2007 14:20:33 -0700 From: Jin Guojun <jin@george.lbl.gov> To: threads@freebsd.org Cc: hackers@freebsd.org Subject: How TLS is used in Kernel thread Message-ID: <46D734A1.2090700@george.lbl.gov> In-Reply-To: <20070803090530.GH2738@deviant.kiev.zoral.com.ua> References: <46B245D5.1050606@george.lbl.gov> <20070803090530.GH2738@deviant.kiev.zoral.com.ua>
next in thread | previous in thread | raw e-mail | index | archive | help
By looking through _pthread_create() code and find it uses a magic cookie -- TLS -- created by rtld_allocate_tls(), and passed into kernel by sysarch() via _tcb_set() / _kcb_set(). The information seems to be set by rtld (ld-elf.so.1) in digest_phdr() under tag PT_TLS. But it is very magic for where the TLS object is created and how it is passed to digest_phdr(). The whole object passed into kernel (as sd.gsbase) looks like this: TCB: ______________________________ | TLS | TCB | |______________|_______________| Can someone give some basic exaplain on following questions? 1) What TLS stand for? 2) Where TLS object is created? (below is the tls assigned, but I couls not find where ph is from) case PT_TLS: obj->tlsindex = 1; obj->tlssize = ph->p_memsz; obj->tlsalign = ph->p_align; obj->tlsinitsize = ph->p_filesz; obj->tlsinit = (void*) ph->p_vaddr; 3) Where in kernel the TLS is used for thread operation? Thanks in advance, -Jin
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?46D734A1.2090700>