Thread Local Storage

Doug Rabson dfr at nlsystems.com
Tue Mar 30 00:36:02 PST 2004


On Monday 29 March 2004 23:36, Daniel Eischen wrote:
> On Mon, 29 Mar 2004, Doug Rabson wrote:
> > On Monday 29 March 2004 22:56, Daniel Eischen wrote:
> > > On Mon, 29 Mar 2004, Doug Rabson wrote:
> > > > On Monday 29 March 2004 22:26, Daniel Eischen wrote:
> > > > > On Mon, 29 Mar 2004, Doug Rabson wrote:
> > > > > > Surely the GNU TLS ABI is preferable? It generates much
> > > > > > smaller code and needs many fewer relocations.
> > > > >
> > > > > No, we don't want an LDT for every thread and don't want
> > > > > to force a syscall for a thread switch.
> > > >
> > > > But the code it generates is at least twice the size for
> > > > dynamic TLS. It seems that the GNU people have done a better
> > > > job defining the TLS abi for i386.
> > >
> > > About the only thing that uses TLS that I know is nvidia's
> > > openGL.  If you design an API correctly, there's no need
> > > for TLS.  I would hope that it's usage would be limited.
> >
> > I'd quite like to see us use it for stuff like errno, _res and
> > other uglification currently in libc. Not until the 6.x timeframe
> > though.
>
> I'd like to see libc free of TLS ;-)  The _res stuff can be
> avoided by modifying the implementation to use thread-safe
> APIs.  The current _res stuff can _almost_ be eliminated
> by passing using pthread_getspecific() once and passing
> the _res around internal APIs.  That's actually a pretty
> simple change.

Unfortunately pthread_setspecific() and pthread_getspecific() don't work 
for non-threaded programs whereas 'int __thread errno' works anywhere. 
It would even work for evil cases where libpthread is loaded after 
program startup with dlopen.



More information about the freebsd-threads mailing list