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