Fast thread-local storage for OpenGL drivers

Jakub Jelinek jakub at redhat.com
Mon Feb 24 05:11:09 CST 2003


On Sun, Feb 23, 2003 at 06:44:10PM -0800, Gareth Hughes wrote:
> > In fact, we put this feature there with GL in mind...
> 
> Did you inform the OpenGL vendors who were interested in this issue of this
> fact?  Have you documented it anywhere, particularly in Ulrich Drepper's
> "ELF Handling For Thread-Local Storage" document?  The current version of
> this document clearly states that the Local Exec TLS model "can only be used
> for code in the executable itself and to access variables in the executable
> itself".  Perhaps you can see why I was still under the impression that it
> would not work for a dynamically loadable shared library.

I believe all this was said during the huge OpenGL thread in May 2002.
Certainly the idea to support dlopening of limited number of IE/LE model
using libs came at that time.

For the dispatch tables I even remember suggesting to:
a) do the normal "awx" section entries with LE model, ie.
.section openGL_wtext, "awx"
.globl Foo
Foo:
   movl %gs:__gl_dispatch at ntpoff, %eax
   jmpl *offset_Foo(%eax)
b) in addition to that, you can build an .a library with the above 5 lines
   per .o file's source plus .hidden Foo which would make apps/libraries
   using openGL even faster (as they wouldn't hop through PLT, which is
   one memory load and indirect jump through the loaded value) at the expense
   of making offset_Foo part of the openGL ABI (which as far as I understood
   already is anyway because of the binary modules).
c) or you could inline the calls

In the May thread, I'm pretty sure you mentioned __indirect* routines
which are the biggest part of libGL.so are rarely used, which means the
definitely should be compiled with -fpic, the rest if it is really
performance critical can be put into awx sections using
__attribute__((section("..."))).

	Jakub



More information about the wine-devel mailing list