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
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to