These two patches cooperate to enable TLS support. For now you much manually add "#define GlxUseThreadLocalStorage YES" to your host.def to enable TLS support. Apply the Mesa patch to the Mesa tree and the DRI patch to the DRI tree.

Right now libGL will try for a TLS driver first, and fallback to the non-TLS driver if tls/*_dri.so does not exist. I am considering adding an env variable to make libGL ignore the TLS drivers altogether. The only catch with this would be that using the env var would not disable libGL's use of TLS.

There are a couple gaps in my understanding of TLS. I hope that someone on the list can fill me in. I've seen that a few apps require 'LD_ASSUME_KERNEL=2.4.19' to disable TLS. Doing that with, for example, glxgears doesn't seem to make any difference. It still uses the TLS libGL.so and the TLS driver. What is this option /really/ supposed to do?

Index: src/mesa/glapi/gl_x86_asm.py
===================================================================
RCS file: /cvs/mesa/Mesa/src/mesa/glapi/gl_x86_asm.py,v
retrieving revision 1.4
diff -u -d -r1.4 gl_x86_asm.py
--- src/mesa/glapi/gl_x86_asm.py        2 Jul 2004 10:32:52 -0000       1.4
+++ src/mesa/glapi/gl_x86_asm.py        11 Jul 2004 18:36:50 -0000
@@ -81,7 +81,17 @@
                print '#  define THREADS'
                print '#endif'
                print ''
-               print '#if defined(PTHREADS)'
+               print '#ifdef GLX_USE_TLS'
+               print ''
+               print '#  define GL_STUB(fn,off,fn_alt)\t\t\t\\'
+               print 'ALIGNTEXT16;\t\t\t\t\t\t\\'
+               print 'GLOBL_FN(GL_PREFIX(fn, fn_alt));\t\t\t\\'
+               print 'GL_PREFIX(fn, fn_alt):\t\t\t\t\t\\'
+               print '\tCALL(get_dispatch) ;\t\t\t\t\\'
+               print '\tNOP ;\t\t\t\t\t\t\\'
+               print '\tJMP(GL_OFFSET(off))'
+               print ''
+               print '#elif defined(PTHREADS)'
                print '#  define GL_STUB(fn,off,fn_alt)\t\t\t\\'
                print 'ALIGNTEXT16;\t\t\t\t\t\t\\'
                print 'GLOBL_FN(GL_PREFIX(fn, fn_alt));\t\t\t\\'
@@ -114,7 +124,14 @@
                print ''
                print 'SEG_TEXT'
                print ''
-               print '#ifdef PTHREADS'
+               print '#ifdef GLX_USE_TLS'
+               print ''
+               print 'ALIGNTEXT16'
+               print 'GLNAME(get_dispatch):'
+               print '\tmovl\t%gs:[EMAIL PROTECTED], %eax'
+               print '\tret'
+               print ''
+               print '#elif defined(PTHREADS)'
                print 'EXTERN GLNAME(_glapi_Dispatch)'
                print 'EXTERN GLNAME(_gl_DispatchTSD)'
                print '#ifdef __PIC__'
Index: src/mesa/glapi/glapi.c
===================================================================
RCS file: /cvs/mesa/Mesa/src/mesa/glapi/glapi.c,v
retrieving revision 1.81
diff -u -d -r1.81 glapi.c
--- src/mesa/glapi/glapi.c      6 Jul 2004 00:32:03 -0000       1.81
+++ src/mesa/glapi/glapi.c      11 Jul 2004 18:36:50 -0000
@@ -136,6 +136,20 @@
 
 #if defined(THREADS)
 
+#if defined(GLX_USE_TLS)
+
+__thread struct _glapi_table * _glapi_tls_Dispatch
+    __attribute__((tls_model("initial-exec"))) 
+    = (struct _glapi_table *) __glapi_noop_table;
+
+__thread struct _glapi_table * _glapi_tls_RealDispatch
+    __attribute__((tls_model("initial-exec"))) 
+    = (struct _glapi_table *) __glapi_noop_table;
+
+__thread void * _glapi_tls_Context
+    __attribute__((tls_model("initial-exec")));
+
+#else
 /**
  * \name Multi-threaded control support variables
  *
@@ -168,6 +182,7 @@
 static _glthread_TSD RealDispatchTSD;    /**< only when using override */
 static _glthread_TSD ContextTSD;         /**< Per-thread context pointer */
 /[EMAIL PROTECTED]/
+#endif
 
 
 #define DISPATCH_TABLE_NAME __glapi_threadsafe_table
@@ -188,12 +203,21 @@
 
 
 
+#if defined(GLX_USE_TLS)
+
+struct _glapi_table *_glapi_Dispatch = (struct _glapi_table *) 
__glapi_threadsafe_table;
+struct _glapi_table *_glapi_DispatchTSD = NULL;
+struct _glapi_table *_glapi_RealDispatch = (struct _glapi_table *) 
__glapi_threadsafe_table;
+
+#else
+
 struct _glapi_table *_glapi_Dispatch = (struct _glapi_table *) __glapi_noop_table;
-#if defined( THREADS )
+# if defined( THREADS )
 struct _glapi_table *_glapi_DispatchTSD = (struct _glapi_table *) __glapi_noop_table;
-#endif
+# endif
 struct _glapi_table *_glapi_RealDispatch = (struct _glapi_table *) __glapi_noop_table;
 
+#endif /* GLX_USE_TLS */
 
 /* Used when thread safety disabled */
 void *_glapi_Context = NULL;
@@ -226,7 +250,7 @@
 void
 _glapi_check_multithread(void)
 {
-#if defined(THREADS)
+#if defined(THREADS) && !defined(GLX_USE_TLS)
    if (!ThreadSafe) {
       static unsigned long knownID;
       static GLboolean firstCall = GL_TRUE;
@@ -256,7 +280,10 @@
 void
 _glapi_set_context(void *context)
 {
-#if defined(THREADS)
+#if defined(GLX_USE_TLS)
+   _glapi_tls_Context = context;
+   _glapi_Context = NULL;
+#elif defined(THREADS)
    _glthread_SetTSD(&ContextTSD, context);
    _glapi_Context = (ThreadSafe) ? NULL : context;
 #else
@@ -274,7 +301,9 @@
 void *
 _glapi_get_context(void)
 {
-#if defined(THREADS)
+#if defined(GLX_USE_TLS)
+   return _glapi_tls_Context;
+#elif defined(THREADS)
    if (ThreadSafe) {
       return _glthread_GetTSD(&ContextTSD);
    }
@@ -304,7 +333,14 @@
    }
 #endif
 
-#if defined(THREADS)
+#if defined(GLX_USE_TLS)
+   if (DispatchOverride) {
+      _glapi_tls_RealDispatch = dispatch;
+   }
+   else {
+      _glapi_tls_Dispatch = dispatch;
+   }
+#elif defined(THREADS)
    if (DispatchOverride) {
       _glthread_SetTSD(&RealDispatchTSD, (void *) dispatch);
       if (ThreadSafe)
@@ -342,7 +378,13 @@
 struct _glapi_table *
 _glapi_get_dispatch(void)
 {
-#if defined(THREADS)
+#if defined(GLX_USE_TLS)
+   struct _glapi_table * const api = (__builtin_expect(DispatchOverride, 0))
+     ? _glapi_tls_RealDispatch : _glapi_tls_Dispatch;
+
+   assert(api != NULL);
+   return api;
+#elif defined(THREADS)
    if (ThreadSafe) {
       if (DispatchOverride) {
          return (struct _glapi_table *) _glthread_GetTSD(&RealDispatchTSD);
@@ -399,7 +441,9 @@
 
    _glapi_set_dispatch(real);
 
-#if defined(THREADS)
+#if defined(GLX_USE_TLS)
+   _glapi_tls_Dispatch = override;
+#elif defined(THREADS)
    _glthread_SetTSD(&_gl_DispatchTSD, (void *) override);
    if ( ThreadSafe ) {
       _glapi_Dispatch = (struct _glapi_table *) __glapi_threadsafe_table;
@@ -424,7 +468,9 @@
    DispatchOverride = GL_FALSE;
    _glapi_set_dispatch(real);
    /* the rest of this isn't needed, just play it safe */
-#if defined(THREADS)
+#if defined(GLX_USE_TLS)
+   _glapi_tls_RealDispatch = NULL;
+#elif defined(THREADS) 
    _glthread_SetTSD(&RealDispatchTSD, NULL);
 #endif
    _glapi_RealDispatch = NULL;
@@ -439,7 +485,9 @@
    }
    else {
       if (DispatchOverride) {
-#if defined(THREADS)
+#if defined(GLX_USE_TLS)
+        return _glapi_tls_Dispatch;
+#elif defined(THREADS)
          return (struct _glapi_table *) _glthread_GetTSD(&_gl_DispatchTSD);
 #else
          return _glapi_Dispatch;
@@ -502,7 +550,7 @@
 #ifdef USE_X86_ASM
 extern const GLubyte gl_dispatch_functions_start[];
 
-# if defined(THREADS)
+# if defined(THREADS) && !defined(GLX_USE_TLS)
 #  define X86_DISPATCH_FUNCTION_SIZE  32
 # else
 #  define X86_DISPATCH_FUNCTION_SIZE  16
@@ -585,10 +633,14 @@
 extern void __glapi_sparc_icache_flush(unsigned int *);
 #endif
 
-/*
+/**
  * Generate a dispatch function (entrypoint) which jumps through
  * the given slot number (offset) in the current dispatch table.
  * We need assembly language in order to accomplish this.
+ * 
+ * \todo
+ * A TLS version of this is needed.  The code right now will work on x86 in
+ * TLS mode, but it will be inefficient.
  */
 static void *
 generate_entrypoint(GLuint functionOffset)
Index: src/mesa/glapi/glthread.h
===================================================================
RCS file: /cvs/mesa/Mesa/src/mesa/glapi/glthread.h,v
retrieving revision 1.15
diff -u -d -r1.15 glthread.h
--- src/mesa/glapi/glthread.h   29 Jun 2004 19:08:20 -0000      1.15
+++ src/mesa/glapi/glthread.h   11 Jul 2004 18:36:50 -0000
@@ -304,7 +304,14 @@
 extern void
 _glthread_SetTSD(_glthread_TSD *, void *);
 
-#ifndef GL_CALL
+#if defined(GLX_USE_TLS)
+
+extern __thread struct _glapi_table * _glapi_tls_Dispatch
+    __attribute__((tls_model("initial-exec")));
+
+# define GL_CALL(name) (*(_glapi_tls_Dispatch-> name))
+
+#elif !defined(GL_CALL)
 # if defined(THREADS)
 extern struct _glapi_table * _glapi_DispatchTSD;
 #  define GL_CALL(name) \
Index: src/mesa/x86/glapi_x86.S
===================================================================
RCS file: /cvs/mesa/Mesa/src/mesa/x86/glapi_x86.S,v
retrieving revision 1.39
diff -u -d -r1.39 glapi_x86.S
--- src/mesa/x86/glapi_x86.S    2 Jul 2004 10:32:52 -0000       1.39
+++ src/mesa/x86/glapi_x86.S    11 Jul 2004 18:36:50 -0000
@@ -51,7 +51,17 @@
 #  define THREADS
 #endif
 
-#if defined(PTHREADS)
+#ifdef GLX_USE_TLS
+
+#  define GL_STUB(fn,off,fn_alt)                       \
+ALIGNTEXT16;                                           \
+GLOBL_FN(GL_PREFIX(fn, fn_alt));                       \
+GL_PREFIX(fn, fn_alt):                                 \
+       CALL(get_dispatch) ;                            \
+       NOP ;                                           \
+       JMP(GL_OFFSET(off))
+
+#elif defined(PTHREADS)
 #  define GL_STUB(fn,off,fn_alt)                       \
 ALIGNTEXT16;                                           \
 GLOBL_FN(GL_PREFIX(fn, fn_alt));                       \
@@ -84,7 +94,14 @@
 
 SEG_TEXT
 
-#ifdef PTHREADS
+#ifdef GLX_USE_TLS
+
+ALIGNTEXT16
+GLNAME(get_dispatch):
+       movl    %gs:[EMAIL PROTECTED], %eax
+       ret
+
+#elif defined(PTHREADS)
 EXTERN GLNAME(_glapi_Dispatch)
 EXTERN GLNAME(_gl_DispatchTSD)
 #ifdef __PIC__
Index: config/cf/X11.tmpl
===================================================================
RCS file: /cvs/dri/xc/xc/config/cf/X11.tmpl,v
retrieving revision 1.34
diff -u -d -r1.34 X11.tmpl
--- config/cf/X11.tmpl  9 Apr 2004 00:18:44 -0000       1.34
+++ config/cf/X11.tmpl  11 Jul 2004 19:02:31 -0000
@@ -502,6 +502,9 @@
 #ifndef BuildOSMesaLib
 #define BuildOSMesaLib         BuildGlxExt
 #endif
+#ifndef GlxUseThreadLocalStorage
+#define GlxUseThreadLocalStorage NO
+#endif
 #ifndef BuildGLULibrary
 #define BuildGLULibrary                (BuildGLXLibrary && BuildLibraries && \
                                 HasCplusplus)
@@ -784,8 +787,13 @@
 #ifndef ExtraConnectionDefs
 #define ExtraConnectionDefs $(STICKY_DEFINES) $(FCHOWN_DEFINES) IPv6Flags
 #endif
+#if GlxUseThreadLocalStorage
+#define GlxTLSDefines -DGLX_USE_TLS
+#else
+#define GlxTLSDefines /**/
+#endif
 #ifndef ProjectThreadsDefines
-#define ProjectThreadsDefines -DXTHREADS
+#define ProjectThreadsDefines -DXTHREADS GlxTLSDefines
 #endif
 #ifndef FontOSDefines
 #define FontOSDefines /**/
@@ -2149,6 +2157,9 @@
 #ifndef BuildLibGlxWithoutPIC
 #define BuildLibGlxWithoutPIC  NO
 #endif
+#ifndef GlxUseThreadLocalStorage
+#define GlxUseThreadLocalStorage NO
+#endif
 #if BuildLibGlxWithoutPIC && SharedLibGlx
 #define SharedLibGlxWithoutPIC YES
 #else
Index: lib/GL/GL/Imakefile
===================================================================
RCS file: /cvs/dri/xc/xc/lib/GL/GL/Imakefile,v
retrieving revision 1.10
diff -u -d -r1.10 Imakefile
--- lib/GL/GL/Imakefile 28 May 2004 18:41:41 -0000      1.10
+++ lib/GL/GL/Imakefile 11 Jul 2004 19:02:31 -0000
@@ -214,30 +214,35 @@
 #undef _LinkBuildLibrary
 #define _LinkBuildLibrary(lib) LinkBuildLibrary(lib)
 
+#if GlxUseThreadLocalStorage
+ LIBSUBDIR = /tls
+#else
+ LIBSUBDIR =
+#endif
 
 #if NormalLibGlx
 NormalLibraryTarget($(LIBNAME),$(UOBJS))
-InstallLibrary($(LIBNAME),$(USRLIBDIR))
+InstallLibrary($(LIBNAME),$(USRLIBDIR)$(LIBSUBDIR))
 #endif
 #if SharedLibGlx
 SharedDepLibraryTarget($(LIBNAME),$(SOREV),$(OBJS),$(OBJS) $(THREADOBJS),.,.)
-InstallSharedLibrary($(LIBNAME),$(SOREV),$(SHLIBDIR))
+InstallSharedLibrary($(LIBNAME),$(SOREV),$(SHLIBDIR)$(LIBSUBDIR))
 #if LinkGLToUsrLib && AlternateUsrLibDir
 install::
-       MakeDir($(DESTDIR)$(SYSTEMUSRLIBDIR))
-       $(RM) $(DESTDIR)$(SYSTEMUSRLIBDIR)/lib$(LIBNAME).so
-       $(LN) $(SHLIBDIR)/lib$(LIBNAME).so 
$(DESTDIR)$(SYSTEMUSRLIBDIR)/lib$(LIBNAME).so || true
-       $(RM) $(DESTDIR)$(SYSTEMUSRLIBDIR)/lib$(LIBNAME).so.1
-       $(LN) $(SHLIBDIR)/lib$(LIBNAME).so.1 
$(DESTDIR)$(SYSTEMUSRLIBDIR)/lib$(LIBNAME).so.1 || true
+       MakeDir($(DESTDIR)$(SYSTEMUSRLIBDIR)$(LIBSUBDIR))
+       $(RM) $(DESTDIR)$(SYSTEMUSRLIBDIR)$(LIBSUBDIR)/lib$(LIBNAME).so
+       $(LN) $(SHLIBDIR)$(LIBSUBDIR)/lib$(LIBNAME).so 
$(DESTDIR)$(SYSTEMUSRLIBDIR)$(LIBSUBDIR)/lib$(LIBNAME).so || true
+       $(RM) $(DESTDIR)$(SYSTEMUSRLIBDIR)$(LIBSUBDIR)/lib$(LIBNAME).so.1
+       $(LN) $(SHLIBDIR)$(LIBSUBDIR)/lib$(LIBNAME).so.1 
$(DESTDIR)$(SYSTEMUSRLIBDIR)$(LIBSUBDIR)/lib$(LIBNAME).so.1 || true
 #endif
 #endif
 #if DebugLibGlx
 DebuggedLibraryTarget($(LIBNAME),$(DOBJS))
-InstallLibrary($(LIBNAME)_d,$(USRLIBDIR))
+InstallLibrary($(LIBNAME)_d,$(USRLIBDIR)$(LIBSUBDIR))
 #endif
 #if ProfileLibGlx
 ProfiledLibraryTarget($(LIBNAME),$(POBJS))
-InstallLibrary($(LIBNAME)_p,$(USRLIBDIR))
+InstallLibrary($(LIBNAME)_p,$(USRLIBDIR)$(LIBSUBDIR))
 #endif
 
 
Index: lib/GL/glx/dri_glx.c
===================================================================
RCS file: /cvs/dri/xc/xc/lib/GL/glx/dri_glx.c,v
retrieving revision 1.1
diff -u -d -r1.1 dri_glx.c
--- lib/GL/glx/dri_glx.c        28 May 2004 18:41:41 -0000      1.1
+++ lib/GL/glx/dri_glx.c        11 Jul 2004 19:02:31 -0000
@@ -119,18 +119,26 @@
 
 
 
-/*
- * Extract the ith directory path out of a colon-separated list of
- * paths.
- * Input:
- *   index - index of path to extract (starting at zero)
- *   paths - the colon-separated list of paths
- *   dirLen - max length of result to store in <dir>
- * Output:
- *   dir - the extracted directory path, dir[0] will be zero when
- *         extraction fails.
+/**
+ * Extract the ith directory path out of a colon-separated list of paths.  No
+ * more than \c dirLen characters, including the terminating \c NUL, will be
+ * written to \c dir.
+ *
+ * \param index  Index of path to extract (starting at zero)
+ * \param paths  The colon-separated list of paths
+ * \param dirLen Maximum length of result to store in \c dir
+ * \param dir    Buffer to hold the extracted directory path
+ *
+ * \returns
+ * The number of characters that would have been written to \c dir had there
+ * been enough room.  This does not include the terminating \c NUL.  When
+ * extraction fails, zero will be returned.
+ * 
+ * \todo
+ * It seems like this function could be rewritten to use \c strchr.
  */
-static void ExtractDir(int index, const char *paths, int dirLen, char *dir)
+static size_t
+ExtractDir(int index, const char *paths, int dirLen, char *dir)
 {
    int i, len;
    const char *start, *end;
@@ -146,7 +154,7 @@
       else if (*start == 0) {
          /* end of string and couldn't find ith colon */
          dir[0] = 0;
-         return;
+         return 0;
       }
       else {
          start++;
@@ -168,22 +176,27 @@
       len = dirLen - 1;
    strncpy(dir, start, len);
    dir[len] = 0;
+
+   return( end - start );
 }
 
 
-/*
- * Try to dlopen() the named driver.  This function adds the
- * "_dri.so" suffix to the driver name and searches the
- * directories specified by the LIBGL_DRIVERS_PATH env var
- * in order to find the driver.
- * Input:
- *   driverName - a name like "tdfx", "i810", "mga", etc.
- * Return:
- *   handle from dlopen, or NULL if driver file not found.
+/**
+ * Try to \c dlopen the named driver.
+ *
+ * This function adds the "_dri.so" suffix to the driver name and searches the
+ * directories specified by the \c LIBGL_DRIVERS_PATH environment variable in
+ * order to find the driver.
+ *
+ * \param driverName - a name like "tdfx", "i810", "mga", etc.
+ *
+ * \returns
+ * A handle from \c dlopen, or \c NULL if driver file not found.
  */
 static __DRIdriver *OpenDriver(const char *driverName)
 {
    char *libPaths = NULL;
+   char libDir[1000];
    int i;
    __DRIdriver *driver;
 
@@ -204,16 +217,27 @@
    if (!libPaths)
       libPaths = DEFAULT_DRIVER_DIR;
 
-   for (i = 0; ; i++) {
-      char libDir[1000], realDriverName[200];
-      void *handle;
-      ExtractDir(i, libPaths, 1000, libDir);
-      if (!libDir[0])
-         break; /* ran out of paths to search */
-      snprintf(realDriverName, 200, "%s/%s_dri.so", libDir, driverName);
+   for ( i = 0 ; ExtractDir(i, libPaths, 1000, libDir) != 0 ; i++ ) {
+      char realDriverName[200];
+      void *handle = NULL;
+
+      
+      /* If TLS support is enabled, try to open the TLS version of the driver
+       * binary first.  If that fails, try the non-TLS version.
+       */
+#ifdef GLX_USE_TLS
+      snprintf(realDriverName, 200, "%s/tls/%s_dri.so", libDir, driverName);
       InfoMessageF("OpenDriver: trying %s\n", realDriverName);
       handle = dlopen(realDriverName, RTLD_NOW | RTLD_GLOBAL);
-      if (handle) {
+#endif
+
+      if ( handle == NULL ) {
+        snprintf(realDriverName, 200, "%s/%s_dri.so", libDir, driverName);
+        InfoMessageF("OpenDriver: trying %s\n", realDriverName);
+        handle = dlopen(realDriverName, RTLD_NOW | RTLD_GLOBAL);
+      }
+
+      if ( handle != NULL ) {
          /* allocate __DRIdriver struct */
          driver = (__DRIdriver *) Xmalloc(sizeof(__DRIdriver));
          if (!driver)
Index: lib/GL/mesa/drivers/dri/ffb/Imakefile
===================================================================
RCS file: /cvs/dri/xc/xc/lib/GL/mesa/drivers/dri/ffb/Imakefile,v
retrieving revision 1.6
diff -u -d -r1.6 Imakefile
--- lib/GL/mesa/drivers/dri/ffb/Imakefile       27 May 2004 22:50:15 -0000      1.6
+++ lib/GL/mesa/drivers/dri/ffb/Imakefile       11 Jul 2004 19:02:31 -0000
@@ -58,15 +58,21 @@
 SubdirLibraryRule($(FFBOBJS))
 NormalLintTarget($(SRCS))
 
+#if GlxUseThreadLocalStorage
+ MODULESUBDIR = dri/tls
+#else
+ MODULESUBDIR = dri
+#endif
+
 #if !GlxUseBuiltInDRIDriver
 LIBNAME = ffb_dri.so
 SharedDriModuleTarget($(LIBNAME),DONE $(OBJS),$(OBJS))
-InstallDynamicModule($(LIBNAME),$(MODULEDIR),dri)
+InstallDynamicModule($(LIBNAME),$(MODULEDIR),$(MODULESUBDIR))
 
 #ifdef GlxSoProf
 SOPROF_LIBNAME = _ffb_dri_p
 NormalDepLibraryTarget($(SOPROF_LIBNAME),DONE $(OBJS),$(OBJS))
-InstallLibrary($(SOPROF_LIBNAME),$(MODULEDIR)/dri)
+InstallLibrary($(SOPROF_LIBNAME),$(MODULEDIR)/$(MODULESUBDIR))
 #endif
 #endif
 
Index: lib/GL/mesa/drivers/dri/gamma/Imakefile
===================================================================
RCS file: /cvs/dri/xc/xc/lib/GL/mesa/drivers/dri/gamma/Imakefile,v
retrieving revision 1.6
diff -u -d -r1.6 Imakefile
--- lib/GL/mesa/drivers/dri/gamma/Imakefile     27 May 2004 22:50:16 -0000      1.6
+++ lib/GL/mesa/drivers/dri/gamma/Imakefile     11 Jul 2004 19:02:31 -0000
@@ -58,15 +58,21 @@
 SubdirLibraryRule($(GAMMAOBJS))
 NormalLintTarget($(SRCS))
 
+#if GlxUseThreadLocalStorage
+ MODULESUBDIR = dri/tls
+#else
+ MODULESUBDIR = dri
+#endif
+
 #if !GlxUseBuiltInDRIDriver
 LIBNAME = gamma_dri.so
 SharedDriModuleTarget($(LIBNAME),DONE $(OBJS),$(OBJS))
-InstallDynamicModule($(LIBNAME),$(MODULEDIR),dri)
+InstallDynamicModule($(LIBNAME),$(MODULEDIR),$(MODULESUBDIR))
 
 #ifdef GlxSoProf
 SOPROF_LIBNAME = _gamma_dri_p
 NormalDepLibraryTarget($(SOPROF_LIBNAME),DONE $(OBJS),$(OBJS))
-InstallLibrary($(SOPROF_LIBNAME),$(MODULEDIR)/dri)
+InstallLibrary($(SOPROF_LIBNAME),$(MODULEDIR)/$(MODULESUBDIR))
 #endif
 #endif
 
Index: lib/GL/mesa/drivers/dri/i810/Imakefile
===================================================================
RCS file: /cvs/dri/xc/xc/lib/GL/mesa/drivers/dri/i810/Imakefile,v
retrieving revision 1.6
diff -u -d -r1.6 Imakefile
--- lib/GL/mesa/drivers/dri/i810/Imakefile      27 May 2004 22:50:16 -0000      1.6
+++ lib/GL/mesa/drivers/dri/i810/Imakefile      11 Jul 2004 19:02:31 -0000
@@ -58,15 +58,21 @@
 SubdirLibraryRule($(I810OBJS))
 NormalLintTarget($(SRCS))
 
+#if GlxUseThreadLocalStorage
+ MODULESUBDIR = dri/tls
+#else
+ MODULESUBDIR = dri
+#endif
+
 #if !GlxUseBuiltInDRIDriver
 LIBNAME = i810_dri.so
 SharedDriModuleTarget($(LIBNAME),DONE $(OBJS),$(OBJS))
-InstallDynamicModule($(LIBNAME),$(MODULEDIR),dri)
+InstallDynamicModule($(LIBNAME),$(MODULEDIR),$(MODULESUBDIR))
 
 #ifdef GlxSoProf
 SOPROF_LIBNAME = _i810_dri_p
 NormalDepLibraryTarget($(SOPROF_LIBNAME),DONE $(OBJS),$(OBJS))
-InstallLibrary($(SOPROF_LIBNAME),$(MODULEDIR)/dri)
+InstallLibrary($(SOPROF_LIBNAME),$(MODULEDIR)/$(MODULESUBDIR))
 #endif
 #endif
 
Index: lib/GL/mesa/drivers/dri/i830/Imakefile
===================================================================
RCS file: /cvs/dri/xc/xc/lib/GL/mesa/drivers/dri/i830/Imakefile,v
retrieving revision 1.6
diff -u -d -r1.6 Imakefile
--- lib/GL/mesa/drivers/dri/i830/Imakefile      27 May 2004 22:50:16 -0000      1.6
+++ lib/GL/mesa/drivers/dri/i830/Imakefile      11 Jul 2004 19:02:31 -0000
@@ -55,15 +55,21 @@
 SubdirLibraryRule($(I830OBJS))
 NormalLintTarget($(SRCS))
 
+#if GlxUseThreadLocalStorage
+ MODULESUBDIR = dri/tls
+#else
+ MODULESUBDIR = dri
+#endif
+
 #if !GlxUseBuiltInDRIDriver
 LIBNAME = i830_dri.so
 SharedDriModuleTarget($(LIBNAME),DONE $(OBJS),$(OBJS))
-InstallDynamicModule($(LIBNAME),$(MODULEDIR),dri)
+InstallDynamicModule($(LIBNAME),$(MODULEDIR),$(MODULESUBDIR))
 
 #ifdef GlxSoProf
 SOPROF_LIBNAME = _i830_dri_p
 NormalDepLibraryTarget($(SOPROF_LIBNAME),DONE $(OBJS),$(OBJS))
-InstallLibrary($(SOPROF_LIBNAME),$(MODULEDIR)/dri)
+InstallLibrary($(SOPROF_LIBNAME),$(MODULEDIR)/$(MODULESUBDIR))
 #endif
 #endif
 
Index: lib/GL/mesa/drivers/dri/mach64/Imakefile
===================================================================
RCS file: /cvs/dri/xc/xc/lib/GL/mesa/drivers/dri/mach64/Imakefile,v
retrieving revision 1.4
diff -u -d -r1.4 Imakefile
--- lib/GL/mesa/drivers/dri/mach64/Imakefile    27 May 2004 22:50:16 -0000      1.4
+++ lib/GL/mesa/drivers/dri/mach64/Imakefile    11 Jul 2004 19:02:31 -0000
@@ -58,15 +58,21 @@
 SubdirLibraryRule($(Mach64OBJS))
 NormalLintTarget($(SRCS))
 
+#if GlxUseThreadLocalStorage
+ MODULESUBDIR = dri/tls
+#else
+ MODULESUBDIR = dri
+#endif
+
 #if !GlxUseBuiltInDRIDriver
 LIBNAME = mach64_dri.so
 SharedDriModuleTarget($(LIBNAME),DONE $(OBJS),$(OBJS))
-InstallDynamicModule($(LIBNAME),$(MODULEDIR),dri)
+InstallDynamicModule($(LIBNAME),$(MODULEDIR),$(MODULESUBDIR))
 
 #ifdef GlxSoProf
 SOPROF_LIBNAME = _mach64_dri_p
 NormalDepLibraryTarget($(SOPROF_LIBNAME),DONE $(OBJS),$(OBJS))
-InstallLibrary($(SOPROF_LIBNAME),$(MODULEDIR)/dri)
+InstallLibrary($(SOPROF_LIBNAME),$(MODULEDIR)/$(MODULESUBDIR))
 #endif
 #endif
 
Index: lib/GL/mesa/drivers/dri/mga/Imakefile
===================================================================
RCS file: /cvs/dri/xc/xc/lib/GL/mesa/drivers/dri/mga/Imakefile,v
retrieving revision 1.6
diff -u -d -r1.6 Imakefile
--- lib/GL/mesa/drivers/dri/mga/Imakefile       27 May 2004 22:50:16 -0000      1.6
+++ lib/GL/mesa/drivers/dri/mga/Imakefile       11 Jul 2004 19:02:31 -0000
@@ -59,15 +59,21 @@
 SubdirLibraryRule($(MGAOBJS))
 NormalLintTarget($(SRCS))
 
+#if GlxUseThreadLocalStorage
+ MODULESUBDIR = dri/tls
+#else
+ MODULESUBDIR = dri
+#endif
+
 #if !GlxUseBuiltInDRIDriver
 LIBNAME = mga_dri.so
 SharedDriModuleTarget($(LIBNAME),DONE $(OBJS),$(OBJS))
-InstallDynamicModule($(LIBNAME),$(MODULEDIR),dri)
+InstallDynamicModule($(LIBNAME),$(MODULEDIR),$(MODULESUBDIR))
 
 #ifdef GlxSoProf
 SOPROF_LIBNAME = _mga_dri_p
 NormalDepLibraryTarget($(SOPROF_LIBNAME),DONE $(OBJS),$(OBJS))
-InstallLibrary($(SOPROF_LIBNAME),$(MODULEDIR)/dri)
+InstallLibrary($(SOPROF_LIBNAME),$(MODULEDIR)/$(MODULESUBDIR))
 #endif
 #endif
 
Index: lib/GL/mesa/drivers/dri/r128/Imakefile
===================================================================
RCS file: /cvs/dri/xc/xc/lib/GL/mesa/drivers/dri/r128/Imakefile,v
retrieving revision 1.6
diff -u -d -r1.6 Imakefile
--- lib/GL/mesa/drivers/dri/r128/Imakefile      27 May 2004 22:50:16 -0000      1.6
+++ lib/GL/mesa/drivers/dri/r128/Imakefile      11 Jul 2004 19:02:31 -0000
@@ -58,15 +58,21 @@
 SubdirLibraryRule($(R128OBJS))
 NormalLintTarget($(SRCS))
 
+#if GlxUseThreadLocalStorage
+ MODULESUBDIR = dri/tls
+#else
+ MODULESUBDIR = dri
+#endif
+
 #if !GlxUseBuiltInDRIDriver
 LIBNAME = r128_dri.so
 SharedDriModuleTarget($(LIBNAME),DONE $(OBJS),$(OBJS))
-InstallDynamicModule($(LIBNAME),$(MODULEDIR),dri)
+InstallDynamicModule($(LIBNAME),$(MODULEDIR),$(MODULESUBDIR))
 
 #ifdef GlxSoProf
 SOPROF_LIBNAME = _r128_dri_p
 NormalDepLibraryTarget($(SOPROF_LIBNAME),DONE $(OBJS),$(OBJS))
-InstallLibrary($(SOPROF_LIBNAME),$(MODULEDIR)/dri)
+InstallLibrary($(SOPROF_LIBNAME),$(MODULEDIR)/$(MODULESUBDIR))
 #endif
 #endif
 
Index: lib/GL/mesa/drivers/dri/r200/Imakefile
===================================================================
RCS file: /cvs/dri/xc/xc/lib/GL/mesa/drivers/dri/r200/Imakefile,v
retrieving revision 1.7
diff -u -d -r1.7 Imakefile
--- lib/GL/mesa/drivers/dri/r200/Imakefile      27 May 2004 22:50:16 -0000      1.7
+++ lib/GL/mesa/drivers/dri/r200/Imakefile      11 Jul 2004 19:02:31 -0000
@@ -59,15 +59,21 @@
 
 ObjectFromAsmSource(r200_vtxtmp_x86, NullParameter)
 
+#if GlxUseThreadLocalStorage
+ MODULESUBDIR = dri/tls
+#else
+ MODULESUBDIR = dri
+#endif
+
 #if !GlxUseBuiltInDRIDriver
 LIBNAME = r200_dri.so
 SharedDriModuleTarget($(LIBNAME),DONE $(OBJS),$(OBJS))
-InstallDynamicModule($(LIBNAME),$(MODULEDIR),dri)
+InstallDynamicModule($(LIBNAME),$(MODULEDIR),$(MODULESUBDIR))
 
 #ifdef GlxSoProf
 SOPROF_LIBNAME = _r200_dri_p
 NormalDepLibraryTarget($(SOPROF_LIBNAME),DONE $(OBJS),$(OBJS))
-InstallLibrary($(SOPROF_LIBNAME),$(MODULEDIR)/dri)
+InstallLibrary($(SOPROF_LIBNAME),$(MODULEDIR)/$(MODULESUBDIR))
 #endif
 #endif
 
Index: lib/GL/mesa/drivers/dri/radeon/Imakefile
===================================================================
RCS file: /cvs/dri/xc/xc/lib/GL/mesa/drivers/dri/radeon/Imakefile,v
retrieving revision 1.7
diff -u -d -r1.7 Imakefile
--- lib/GL/mesa/drivers/dri/radeon/Imakefile    27 May 2004 22:50:16 -0000      1.7
+++ lib/GL/mesa/drivers/dri/radeon/Imakefile    11 Jul 2004 19:02:31 -0000
@@ -59,15 +59,21 @@
 
 ObjectFromAsmSource(radeon_vtxtmp_x86, NullParameter)
 
+#if GlxUseThreadLocalStorage
+ MODULESUBDIR = dri/tls
+#else
+ MODULESUBDIR = dri
+#endif
+
 #if !GlxUseBuiltInDRIDriver
 LIBNAME = radeon_dri.so
 SharedDriModuleTarget($(LIBNAME),DONE $(OBJS),$(OBJS))
-InstallDynamicModule($(LIBNAME),$(MODULEDIR),dri)
+InstallDynamicModule($(LIBNAME),$(MODULEDIR),$(MODULESUBDIR))
 
 #ifdef GlxSoProf
 SOPROF_LIBNAME = _radeon_dri_p
 NormalDepLibraryTarget($(SOPROF_LIBNAME),DONE $(OBJS),$(OBJS))
-InstallLibrary($(SOPROF_LIBNAME),$(MODULEDIR)/dri)
+InstallLibrary($(SOPROF_LIBNAME),$(MODULEDIR)/$(MODULESUBDIR))
 #endif
 #endif
 
Index: lib/GL/mesa/drivers/dri/savage/Imakefile
===================================================================
RCS file: /cvs/dri/xc/xc/lib/GL/mesa/drivers/dri/savage/Imakefile,v
retrieving revision 1.3
diff -u -d -r1.3 Imakefile
--- lib/GL/mesa/drivers/dri/savage/Imakefile    27 May 2004 22:50:16 -0000      1.3
+++ lib/GL/mesa/drivers/dri/savage/Imakefile    11 Jul 2004 19:02:31 -0000
@@ -59,15 +59,21 @@
 SubdirLibraryRule($(SAVAGEOBJS))
 NormalLintTarget($(SRCS))
 
+#if GlxUseThreadLocalStorage
+ MODULESUBDIR = dri/tls
+#else
+ MODULESUBDIR = dri
+#endif
+
 #if !GlxUseBuiltInDRIDriver
 LIBNAME = savage_dri.so
 SharedDriModuleTarget($(LIBNAME),DONE $(OBJS),$(OBJS))
-InstallDynamicModule($(LIBNAME),$(MODULEDIR),dri)
+InstallDynamicModule($(LIBNAME),$(MODULEDIR),$(MODULESUBDIR))
 
 #ifdef GlxSoProf
 SOPROF_LIBNAME = _savage_dri_p
 NormalDepLibraryTarget($(SOPROF_LIBNAME),DONE $(OBJS),$(OBJS))
-InstallLibrary($(SOPROF_LIBNAME),$(MODULEDIR)/dri)
+InstallLibrary($(SOPROF_LIBNAME),$(MODULEDIR)/$(MODULESUBDIR))
 #endif
 #endif
 
Index: lib/GL/mesa/drivers/dri/sis/Imakefile
===================================================================
RCS file: /cvs/dri/xc/xc/lib/GL/mesa/drivers/dri/sis/Imakefile,v
retrieving revision 1.6
diff -u -d -r1.6 Imakefile
--- lib/GL/mesa/drivers/dri/sis/Imakefile       27 May 2004 22:50:16 -0000      1.6
+++ lib/GL/mesa/drivers/dri/sis/Imakefile       11 Jul 2004 19:02:31 -0000
@@ -61,15 +61,21 @@
 SubdirLibraryRule($(SISOBJS))
 NormalLintTarget($(SRCS))
 
+#if GlxUseThreadLocalStorage
+ MODULESUBDIR = dri/tls
+#else
+ MODULESUBDIR = dri
+#endif
+
 #if !GlxUseBuiltInDRIDriver
 LIBNAME = sis_dri.so
 SharedDriModuleTarget($(LIBNAME),DONE $(OBJS),$(OBJS))
-InstallDynamicModule($(LIBNAME),$(MODULEDIR),dri)
+InstallDynamicModule($(LIBNAME),$(MODULEDIR),$(MODULESUBDIR))
 
 #ifdef GlxSoProf
 SOPROF_LIBNAME = _sis_dri_p
 NormalDepLibraryTarget($(SOPROF_LIBNAME),DONE $(OBJS),$(OBJS))
-InstallLibrary($(SOPROF_LIBNAME),$(MODULEDIR)/dri)
+InstallLibrary($(SOPROF_LIBNAME),$(MODULEDIR)/$(MODULESUBDIR))
 #endif
 #endif
 
Index: lib/GL/mesa/drivers/dri/tdfx/Imakefile
===================================================================
RCS file: /cvs/dri/xc/xc/lib/GL/mesa/drivers/dri/tdfx/Imakefile,v
retrieving revision 1.7
diff -u -d -r1.7 Imakefile
--- lib/GL/mesa/drivers/dri/tdfx/Imakefile      27 May 2004 22:50:16 -0000      1.7
+++ lib/GL/mesa/drivers/dri/tdfx/Imakefile      11 Jul 2004 19:02:31 -0000
@@ -57,15 +57,21 @@
 SubdirLibraryRule($(TDFXOBJS))
 NormalLintTarget($(SRCS))
 
+#if GlxUseThreadLocalStorage
+ MODULESUBDIR = dri/tls
+#else
+ MODULESUBDIR = dri
+#endif
+
 #if !GlxUseBuiltInDRIDriver
 LIBNAME = tdfx_dri.so
 SharedDriModuleTarget($(LIBNAME),DONE $(OBJS),$(OBJS))
-InstallDynamicModule($(LIBNAME),$(MODULEDIR),dri)
+InstallDynamicModule($(LIBNAME),$(MODULEDIR),$(MODULESUBDIR))
 
 #ifdef GlxSoProf
 SOPROF_LIBNAME = _tdfx_dri_p
 NormalDepLibraryTarget($(SOPROF_LIBNAME),DONE $(OBJS),$(OBJS))
-InstallLibrary($(SOPROF_LIBNAME),$(MODULEDIR)/dri)
+InstallLibrary($(SOPROF_LIBNAME),$(MODULEDIR)/$(MODULESUBDIR))
 #endif
 #endif
 
Index: lib/GL/mesa/drivers/dri/unichrome/Imakefile
===================================================================
RCS file: /cvs/dri/xc/xc/lib/GL/mesa/drivers/dri/unichrome/Imakefile,v
retrieving revision 1.1
diff -u -d -r1.1 Imakefile
--- lib/GL/mesa/drivers/dri/unichrome/Imakefile 16 Jun 2004 15:10:04 -0000      1.1
+++ lib/GL/mesa/drivers/dri/unichrome/Imakefile 11 Jul 2004 19:02:31 -0000
@@ -61,15 +61,21 @@
 SubdirLibraryRule($(VIAOBJS))
 NormalLintTarget($(SRCS))
 
+#if GlxUseThreadLocalStorage
+ MODULESUBDIR = dri/tls
+#else
+ MODULESUBDIR = dri
+#endif
+
 #if !GlxUseBuiltInDRIDriver
 LIBNAME = unichrome_dri.so
 SharedDriModuleTarget($(LIBNAME),DONE $(OBJS),$(OBJS))
-InstallDynamicModule($(LIBNAME),$(MODULEDIR),dri)
+InstallDynamicModule($(LIBNAME),$(MODULEDIR),$(MODULESUBDIR))
 
 #ifdef GlxSoProf
 SOPROF_LIBNAME = _unichrome_dri_p
 NormalDepLibraryTarget($(SOPROF_LIBNAME),DONE $(OBJS),$(OBJS))
-InstallLibrary($(SOPROF_LIBNAME),$(MODULEDIR)/dri)
+InstallLibrary($(SOPROF_LIBNAME),$(MODULEDIR)/$(MODULESUBDIR))
 #endif
 #endif
 

Reply via email to