diff --git a/src/mapi/entry.c b/src/mapi/entry.c index b120eae31a1..5ebd85011c6 100644 --- a/src/mapi/entry.c +++ b/src/mapi/entry.c @@ -47,8 +47,6 @@ #endif /* REALLY_INITIAL_EXEC implies USE_ELF_TLS and __GNUC__ */ -/* Use TSD stubs for non-IE ELF TLS even though first access is slower because - * future accesses will be patched */ #if defined(USE_X86_ASM) && defined(REALLY_INITIAL_EXEC) #include "entry_x86_tls.h" #elif defined(USE_X86_ASM) && !defined(GLX_X86_READONLY_TEXT) && defined(__GNUC__) @@ -57,7 +55,8 @@ #include "entry_x86-64_tls.h" #elif defined(USE_PPC64LE_ASM) && UTIL_ARCH_LITTLE_ENDIAN && defined(REALLY_INITIAL_EXEC) #include "entry_ppc64le_tls.h" -#elif defined(USE_PPC64LE_ASM) && UTIL_ARCH_LITTLE_ENDIAN && defined(__GNUC__) +/* ppc64le non-IE TSD stubs are possible but not currently implemented */ +#elif defined(USE_PPC64LE_ASM) && UTIL_ARCH_LITTLE_ENDIAN && !defined(USE_ELF_TLS) && defined(__GNUC__) #include "entry_ppc64le_tsd.h" #else diff --git a/src/mapi/entry_x86_tsd.h b/src/mapi/entry_x86_tsd.h index f5d9c41253f..2aa724a70f3 100644 --- a/src/mapi/entry_x86_tsd.h +++ b/src/mapi/entry_x86_tsd.h @@ -69,7 +69,7 @@ __asm__(".balign 32\n" "popl %ecx\n\t" \ "addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ecx\n\t" \ LOC_END_SET_ECX \ - "movl " ENTRY_CURRENT_TABLE "@GOT(%ecx), %eax\n\t" \ + "movl _glapi_Dispatch@GOT(%ecx), %eax\n\t" \ "mov (%eax), %eax\n\t" \ "testl %eax, %eax\n\t" \ "jne 1f\n\t" \ diff --git a/src/mapi/glapi/gen/gl_x86_asm.py b/src/mapi/glapi/gen/gl_x86_asm.py index 4b10db37d7f..057aa54ba3f 100644 --- a/src/mapi/glapi/gen/gl_x86_asm.py +++ b/src/mapi/glapi/gen/gl_x86_asm.py @@ -70,7 +70,7 @@ class PrintGenericStubs(gl_XML.gl_print_base): print('#endif') print('') print('') - print('#ifdef USE_ELF_TLS') + print('#ifdef REALLY_INITIAL_EXEC') print('') print('#ifdef GLX_X86_READONLY_TEXT') print('# define CTX_INSNS MOV_L(GS:(EAX), EAX)') @@ -86,17 +86,6 @@ class PrintGenericStubs(gl_XML.gl_print_base): print('\tCTX_INSNS ; \\') print('\tJMP(GL_OFFSET(off))') print('') - print('#elif defined(HAVE_PTHREAD)') - 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('\tMOV_L(CONTENT(GLNAME(_glapi_Dispatch)), EAX) ;\t\\') - print('\tTEST_L(EAX, EAX) ;\t\t\t\t\\') - print('\tJE(1f) ;\t\t\t\t\t\\') - print('\tJMP(GL_OFFSET(off)) ;\t\t\t\t\\') - print('1:\tCALL(_x86_get_dispatch) ;\t\t\t\\') - print('\tJMP(GL_OFFSET(off))') print('#else') print('# define GL_STUB(fn,off,fn_alt)\t\t\t\\') print('ALIGNTEXT16;\t\t\t\t\t\t\\') @@ -121,7 +110,7 @@ class PrintGenericStubs(gl_XML.gl_print_base): print('') print('SEG_TEXT') print('') - print('#ifdef USE_ELF_TLS') + print('#ifdef REALLY_INITIAL_EXEC') print('') print('\tGLOBL\tGLNAME(_x86_get_dispatch)') print('\tHIDDEN(GLNAME(_x86_get_dispatch))') @@ -133,19 +122,8 @@ class PrintGenericStubs(gl_XML.gl_print_base): print('\tmovl _glapi_tls_Dispatch@GOTNTPOFF(%eax), %eax') print('\tret') print('') - print('#elif defined(HAVE_PTHREAD)') - print('EXTERN GLNAME(_glapi_Dispatch)') - print('EXTERN GLNAME(_gl_DispatchTSD)') - print('EXTERN GLNAME(pthread_getspecific)') - print('') - print('ALIGNTEXT16') - print('GLNAME(_x86_get_dispatch):') - print('\tSUB_L(CONST(24), ESP)') - print('\tPUSH_L(GLNAME(_gl_DispatchTSD))') - print('\tCALL(GLNAME(pthread_getspecific))') - print('\tADD_L(CONST(28), ESP)') - print('\tRET') print('#else') + print('EXTERN GLNAME(_glapi_Dispatch)') print('EXTERN GLNAME(_glapi_get_dispatch)') print('#endif') print('')