Implementing TLS: step 1
Marcel Moolenaar
marcel at xcllnt.net
Thu Jun 19 13:20:14 PDT 2003
Ok,
Step 1: static TLS in libthr.
I have gcc33 installed and looked at the access sequences for TLS
on both i386 and ia64. Then I looked at libthr to see what was
needed and the first and obvious orbservation is that we need a
way to figure out if the binary has a TLS template and use it if
it does. If not, we probably need some minimal glue to have the
TLS pointer point to something meaningful. Note again, we don't
have RTLD involved. We're talking staticly linking now.
What about the following:
1. The kernel already iterates over the program headers and can
pass the address and size of the TLS template to the process
(or RTLD) by means of the auxargs (ie have AT_TLS_ADDR and
AT_TLS_SIZE). If no template exists AT_TLS_* will be zero.
This prevents coding object file dependencies on thread and
allows the RTLD to modify the args even in the event that the
program itself does not have TLS, but libraries in the startup
set do.
2. On thread creation we allocate the TLS space according to the
template (or some MD specific placebo) and put a pointer to it
in struct thread. For static TLS we don't have a means to
lazily allocate the TLS.
3. The MD _get_curthread() and _set_curthread() will be adjusted
according to the RT spec. if not currently compliant.
Question:
1. What's the best way to expose the auxargs to the thread library?
Alternatives?
--
Marcel Moolenaar USPA: A-39004 marcel at xcllnt.net
More information about the freebsd-threads
mailing list