Skip site navigation (1)Skip section navigation (2)
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>