[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

mesa: Changes to 'ubuntu'



 debian/changelog                          |   13 
 debian/patches/113_partially_fix_tls.diff |12961 ++++++++++++++++++++++++++++++
 debian/patches/series                     |    1 
 debian/rules                              |    5 
 4 files changed, 12980 insertions(+)

New commits:
commit 3503c21a4ab764b776af79538c364a86aec82142
Author: Christopher James Halse Rogers <christopher.halse.rogers@canonical.com>
Date:   Tue Mar 15 10:37:29 2011 +1100

    Partially fix TLS madness, breaking IA32 asm in the process

diff --git a/debian/changelog b/debian/changelog
index 91e5407..2616748 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,16 @@
+mesa (7.10.1-0ubuntu2) natty; urgency=low
+
+  * The “stop SIGSEGVing unrelated code” upload.
+  * debian/patches/113_partially_fix_tls.diff:
+    - Fix TLS usage: initial-exec is not appropriate for a library that
+      can be dynamically loaded with dlopen. (LP: #259219)
+    - Partial patch: missing IA32 assembler dispatch code.
+  * debian/rules:
+    - Build without optimised assembler on i386, as we haven't fixed that
+      yet.  Opens LP #735188.
+
+ -- Christopher James Halse Rogers <raof@ubuntu.com>  Tue, 15 Mar 2011 10:24:52 +1100
+
 mesa (7.10.1-0ubuntu1) natty; urgency=low
 
   * New upstream bugfix release.
diff --git a/debian/patches/113_partially_fix_tls.diff b/debian/patches/113_partially_fix_tls.diff
new file mode 100644
index 0000000..14ca915
--- /dev/null
+++ b/debian/patches/113_partially_fix_tls.diff
@@ -0,0 +1,12961 @@
+commit 7354b4a95976915f4496f24944cbe9df93d1f8af
+Author: Christopher James Halse Rogers <christopher.halse.rogers@canonical.com>
+Date:   Tue Mar 15 09:56:23 2011 +1100
+
+    Stage changes to extract interesting ones
+
+Index: mesa/src/egl/main/eglcurrent.c
+===================================================================
+--- mesa.orig/src/egl/main/eglcurrent.c	2011-03-15 09:56:31.000000000 +1100
++++ mesa/src/egl/main/eglcurrent.c	2011-03-15 10:29:33.819054325 +1100
+@@ -24,7 +24,7 @@
+ 
+ #ifdef GLX_USE_TLS
+ static __thread const _EGLThreadInfo *_egl_TLS
+-   __attribute__ ((tls_model("initial-exec")));
++   __attribute__ ((tls_model("global-dynamic")));
+ #endif
+ 
+ static INLINE void _eglSetTSD(const _EGLThreadInfo *t)
+Index: mesa/src/glx/glxclient.h
+===================================================================
+--- mesa.orig/src/glx/glxclient.h	2011-03-15 10:29:26.000000000 +1100
++++ mesa/src/glx/glxclient.h	2011-03-15 10:29:33.819054325 +1100
+@@ -619,7 +619,7 @@
+ # if defined( GLX_USE_TLS )
+ 
+ extern __thread void *__glX_tls_Context
+-   __attribute__ ((tls_model("initial-exec")));
++   __attribute__ ((tls_model("global-dynamic")));
+ 
+ #  define __glXGetCurrentContext() __glX_tls_Context
+ 
+Index: mesa/src/glx/glxcurrent.c
+===================================================================
+--- mesa.orig/src/glx/glxcurrent.c	2011-03-15 09:56:31.000000000 +1100
++++ mesa/src/glx/glxcurrent.c	2011-03-15 10:29:33.819054325 +1100
+@@ -86,7 +86,7 @@
+  * \b never be \c NULL.  This is important!  Because of this
+  * \c __glXGetCurrentContext can be implemented as trivial macro.
+  */
+-__thread void *__glX_tls_Context __attribute__ ((tls_model("initial-exec")))
++__thread void *__glX_tls_Context __attribute__ ((tls_model("global-dynamic")))
+    = &dummyContext;
+ 
+ _X_HIDDEN void
+Index: mesa/src/mapi/glapi/gen/gl_x86-64_asm.py
+===================================================================
+--- mesa.orig/src/mapi/glapi/gen/gl_x86-64_asm.py	2011-03-15 09:56:31.000000000 +1100
++++ mesa/src/mapi/glapi/gen/gl_x86-64_asm.py	2011-03-15 10:29:33.819054325 +1100
+@@ -153,8 +153,16 @@
+ 		print ''
+ 		print '\t.p2align\t4,,15'
+ 		print '_x86_64_get_dispatch:'
+-		print '\tmovq\t_glapi_tls_Dispatch@GOTTPOFF(%rip), %rax'
+-		print '\tmovq\t%fs:(%rax), %rax'
++#		print '\tpush\t%rdi'
++		# print '\tmovq\t_glapi_tls_Dispatch@GOTTPOFF(%rip), %rax'
++		# print '\tmovq\t%fs:(%rax), %rax'
++		print '\t.byte\t0x66'
++		print '\tleaq\t_glapi_tls_Dispatch@tlsgd(%rip), %rdi'
++		print '\t.word\t0x6666'
++		print '\trex64'
++		print '\tcall\t__tls_get_addr@plt'
++		print '\tmovq\t(%rax), %rax'
++#		print '\tpop\t%rdi'
+ 		print '\tret'
+ 		print '\t.size\t_x86_64_get_dispatch, .-_x86_64_get_dispatch'
+ 		print ''
+@@ -248,7 +256,9 @@
+ 			print '\tHIDDEN(GL_PREFIX(%s))' % (name)
+ 		print 'GL_PREFIX(%s):' % (name)
+ 		print '#if defined(GLX_USE_TLS)'
++		save_all_regs(registers)
+ 		print '\tcall\t_x86_64_get_dispatch@PLT'
++		restore_all_regs(registers)
+ 		print '\tmovq\t%u(%%rax), %%r11' % (f.offset * 8)
+ 		print '\tjmp\t*%r11'
+ 		print '#elif defined(PTHREADS)'
+Index: mesa/src/mapi/glapi/glapi.h
+===================================================================
+--- mesa.orig/src/mapi/glapi/glapi.h	2011-03-15 09:56:31.000000000 +1100
++++ mesa/src/mapi/glapi/glapi.h	2011-03-15 10:29:33.819054325 +1100
+@@ -86,10 +86,10 @@
+ #if defined (GLX_USE_TLS)
+ 
+ _GLAPI_EXPORT extern __thread struct _glapi_table * _glapi_tls_Dispatch
+-    __attribute__((tls_model("initial-exec")));
++    __attribute__((tls_model("global-dynamic")));
+ 
+ _GLAPI_EXPORT extern __thread void * _glapi_tls_Context
+-    __attribute__((tls_model("initial-exec")));
++    __attribute__((tls_model("global-dynamic")));
+ 
+ _GLAPI_EXPORT extern const struct _glapi_table *_glapi_Dispatch;
+ _GLAPI_EXPORT extern const void *_glapi_Context;
+Index: mesa/src/mapi/mapi/u_current.c
+===================================================================
+--- mesa.orig/src/mapi/mapi/u_current.c	2011-03-15 09:56:31.000000000 +1100
++++ mesa/src/mapi/mapi/u_current.c	2011-03-15 10:30:39.391465724 +1100
+@@ -100,11 +100,11 @@
+ #if defined(GLX_USE_TLS)
+ 
+ __thread struct mapi_table *u_current_table_tls
+-    __attribute__((tls_model("initial-exec")))
++    __attribute__((tls_model("global-dynamic")))
+     = (struct mapi_table *) table_noop_array;
+ 
+ __thread void *u_current_user_tls
+-    __attribute__((tls_model("initial-exec")));
++    __attribute__((tls_model("global-dynamic")));
+ 
+ const struct mapi_table *u_current_table;
+ const void *u_current_user;
+Index: mesa/src/mapi/mapi/u_current.h
+===================================================================
+--- mesa.orig/src/mapi/mapi/u_current.h	2011-03-15 09:56:31.000000000 +1100
++++ mesa/src/mapi/mapi/u_current.h	2011-03-15 10:31:25.813168981 +1100
+@@ -31,10 +31,10 @@
+ #ifdef GLX_USE_TLS
+ 
+ extern __thread struct mapi_table *u_current_table_tls
+-    __attribute__((tls_model("initial-exec")));
++    __attribute__((tls_model("global-dynamic")));
+ 
+ extern __thread void *u_current_user_tls
+-    __attribute__((tls_model("initial-exec")));
++    __attribute__((tls_model("global-dynamic")));
+ 
+ extern const struct mapi_table *u_current_table;
+ extern const void *u_current_user;
+Index: mesa/src/mesa/drivers/x11/glxapi.c
+===================================================================
+--- mesa.orig/src/mesa/drivers/x11/glxapi.c	2011-03-15 09:56:32.000000000 +1100
++++ mesa/src/mesa/drivers/x11/glxapi.c	2011-03-15 10:29:33.819054325 +1100
+@@ -160,7 +160,7 @@
+  */
+ #if defined(GLX_USE_TLS)
+ PUBLIC __thread void * CurrentContext
+-    __attribute__((tls_model("initial-exec")));
++    __attribute__((tls_model("global-dynamic")));
+ #elif defined(THREADS)
+ static _glthread_TSD ContextTSD;         /**< Per-thread context pointer */
+ #else
+Index: mesa/src/mapi/glapi/glapi_x86-64.S
+===================================================================
+--- mesa.orig/src/mapi/glapi/glapi_x86-64.S	2011-03-15 10:29:48.579597730 +1100
++++ mesa/src/mapi/glapi/glapi_x86-64.S	2011-03-15 10:31:47.573966382 +1100
+@@ -60,8 +60,12 @@
+ 
+ 	.p2align	4,,15
+ _x86_64_get_dispatch:
+-	movq	_glapi_tls_Dispatch@GOTTPOFF(%rip), %rax
+-	movq	%fs:(%rax), %rax
++	.byte	0x66
++	leaq	_glapi_tls_Dispatch@tlsgd(%rip), %rdi
++	.word	0x6666
++	rex64
++	call	__tls_get_addr@plt
++	movq	(%rax), %rax
+ 	ret
+ 	.size	_x86_64_get_dispatch, .-_x86_64_get_dispatch
+ 
+@@ -88,7 +92,13 @@
+ 	.type	GL_PREFIX(NewList), @function
+ GL_PREFIX(NewList):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
++	pushq	%rsi
++	pushq	%rbp
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rbp
++	popq	%rsi
++	popq	%rdi
+ 	movq	0(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -125,7 +135,9 @@
+ 	.type	GL_PREFIX(EndList), @function
+ GL_PREFIX(EndList):
+ #if defined(GLX_USE_TLS)
++	pushq	%rbp
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rbp
+ 	movq	8(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -154,7 +166,9 @@
+ 	.type	GL_PREFIX(CallList), @function
+ GL_PREFIX(CallList):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdi
+ 	movq	16(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -183,7 +197,13 @@
+ 	.type	GL_PREFIX(CallLists), @function
+ GL_PREFIX(CallLists):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
++	pushq	%rsi
++	pushq	%rdx
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdx
++	popq	%rsi
++	popq	%rdi
+ 	movq	24(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -220,7 +240,13 @@
+ 	.type	GL_PREFIX(DeleteLists), @function
+ GL_PREFIX(DeleteLists):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
++	pushq	%rsi
++	pushq	%rbp
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rbp
++	popq	%rsi
++	popq	%rdi
+ 	movq	32(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -257,7 +283,9 @@
+ 	.type	GL_PREFIX(GenLists), @function
+ GL_PREFIX(GenLists):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdi
+ 	movq	40(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -286,7 +314,9 @@
+ 	.type	GL_PREFIX(ListBase), @function
+ GL_PREFIX(ListBase):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdi
+ 	movq	48(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -315,7 +345,9 @@
+ 	.type	GL_PREFIX(Begin), @function
+ GL_PREFIX(Begin):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdi
+ 	movq	56(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -344,7 +376,23 @@
+ 	.type	GL_PREFIX(Bitmap), @function
+ GL_PREFIX(Bitmap):
+ #if defined(GLX_USE_TLS)
++	subq	$56, %rsp
++	movq	%rdi, (%rsp)
++	movq	%rsi, 8(%rsp)
++	movq	%xmm0, 16(%rsp)
++	movq	%xmm1, 24(%rsp)
++	movq	%xmm2, 32(%rsp)
++	movq	%xmm3, 40(%rsp)
++	movq	%rdx, 48(%rsp)
+ 	call	_x86_64_get_dispatch@PLT
++	movq	48(%rsp), %rdx
++	movq	40(%rsp), %xmm3
++	movq	32(%rsp), %xmm2
++	movq	24(%rsp), %xmm1
++	movq	16(%rsp), %xmm0
++	movq	8(%rsp), %rsi
++	movq	(%rsp), %rdi
++	addq	$56, %rsp
+ 	movq	64(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -401,7 +449,13 @@
+ 	.type	GL_PREFIX(Color3b), @function
+ GL_PREFIX(Color3b):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
++	pushq	%rsi
++	pushq	%rdx
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdx
++	popq	%rsi
++	popq	%rdi
+ 	movq	72(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -438,7 +492,9 @@
+ 	.type	GL_PREFIX(Color3bv), @function
+ GL_PREFIX(Color3bv):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdi
+ 	movq	80(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -467,7 +523,15 @@
+ 	.type	GL_PREFIX(Color3d), @function
+ GL_PREFIX(Color3d):
+ #if defined(GLX_USE_TLS)
++	subq	$24, %rsp
++	movq	%xmm0, (%rsp)
++	movq	%xmm1, 8(%rsp)
++	movq	%xmm2, 16(%rsp)
+ 	call	_x86_64_get_dispatch@PLT
++	movq	16(%rsp), %xmm2
++	movq	8(%rsp), %xmm1
++	movq	(%rsp), %xmm0
++	addq	$24, %rsp
+ 	movq	88(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -508,7 +572,9 @@
+ 	.type	GL_PREFIX(Color3dv), @function
+ GL_PREFIX(Color3dv):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdi
+ 	movq	96(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -537,7 +603,15 @@
+ 	.type	GL_PREFIX(Color3f), @function
+ GL_PREFIX(Color3f):
+ #if defined(GLX_USE_TLS)
++	subq	$24, %rsp
++	movq	%xmm0, (%rsp)
++	movq	%xmm1, 8(%rsp)
++	movq	%xmm2, 16(%rsp)
+ 	call	_x86_64_get_dispatch@PLT
++	movq	16(%rsp), %xmm2
++	movq	8(%rsp), %xmm1
++	movq	(%rsp), %xmm0
++	addq	$24, %rsp
+ 	movq	104(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -578,7 +652,9 @@
+ 	.type	GL_PREFIX(Color3fv), @function
+ GL_PREFIX(Color3fv):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdi
+ 	movq	112(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -607,7 +683,13 @@
+ 	.type	GL_PREFIX(Color3i), @function
+ GL_PREFIX(Color3i):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
++	pushq	%rsi
++	pushq	%rdx
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdx
++	popq	%rsi
++	popq	%rdi
+ 	movq	120(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -644,7 +726,9 @@
+ 	.type	GL_PREFIX(Color3iv), @function
+ GL_PREFIX(Color3iv):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdi
+ 	movq	128(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -673,7 +757,13 @@
+ 	.type	GL_PREFIX(Color3s), @function
+ GL_PREFIX(Color3s):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
++	pushq	%rsi
++	pushq	%rdx
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdx
++	popq	%rsi
++	popq	%rdi
+ 	movq	136(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -710,7 +800,9 @@
+ 	.type	GL_PREFIX(Color3sv), @function
+ GL_PREFIX(Color3sv):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdi
+ 	movq	144(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -739,7 +831,13 @@
+ 	.type	GL_PREFIX(Color3ub), @function
+ GL_PREFIX(Color3ub):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
++	pushq	%rsi
++	pushq	%rdx
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdx
++	popq	%rsi
++	popq	%rdi
+ 	movq	152(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -776,7 +874,9 @@
+ 	.type	GL_PREFIX(Color3ubv), @function
+ GL_PREFIX(Color3ubv):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdi
+ 	movq	160(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -805,7 +905,13 @@
+ 	.type	GL_PREFIX(Color3ui), @function
+ GL_PREFIX(Color3ui):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
++	pushq	%rsi
++	pushq	%rdx
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdx
++	popq	%rsi
++	popq	%rdi
+ 	movq	168(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -842,7 +948,9 @@
+ 	.type	GL_PREFIX(Color3uiv), @function
+ GL_PREFIX(Color3uiv):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdi
+ 	movq	176(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -871,7 +979,13 @@
+ 	.type	GL_PREFIX(Color3us), @function
+ GL_PREFIX(Color3us):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
++	pushq	%rsi
++	pushq	%rdx
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdx
++	popq	%rsi
++	popq	%rdi
+ 	movq	184(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -908,7 +1022,9 @@
+ 	.type	GL_PREFIX(Color3usv), @function
+ GL_PREFIX(Color3usv):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdi
+ 	movq	192(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -937,7 +1053,17 @@
+ 	.type	GL_PREFIX(Color4b), @function
+ GL_PREFIX(Color4b):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
++	pushq	%rsi
++	pushq	%rdx
++	pushq	%rcx
++	pushq	%rbp
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rbp
++	popq	%rcx
++	popq	%rdx
++	popq	%rsi
++	popq	%rdi
+ 	movq	200(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -982,7 +1108,9 @@
+ 	.type	GL_PREFIX(Color4bv), @function
+ GL_PREFIX(Color4bv):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdi
+ 	movq	208(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -1011,7 +1139,17 @@
+ 	.type	GL_PREFIX(Color4d), @function
+ GL_PREFIX(Color4d):
+ #if defined(GLX_USE_TLS)
++	subq	$40, %rsp
++	movq	%xmm0, (%rsp)
++	movq	%xmm1, 8(%rsp)
++	movq	%xmm2, 16(%rsp)
++	movq	%xmm3, 24(%rsp)
+ 	call	_x86_64_get_dispatch@PLT
++	movq	24(%rsp), %xmm3
++	movq	16(%rsp), %xmm2
++	movq	8(%rsp), %xmm1
++	movq	(%rsp), %xmm0
++	addq	$40, %rsp
+ 	movq	216(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -1056,7 +1194,9 @@
+ 	.type	GL_PREFIX(Color4dv), @function
+ GL_PREFIX(Color4dv):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdi
+ 	movq	224(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -1085,7 +1225,17 @@
+ 	.type	GL_PREFIX(Color4f), @function
+ GL_PREFIX(Color4f):
+ #if defined(GLX_USE_TLS)
++	subq	$40, %rsp
++	movq	%xmm0, (%rsp)
++	movq	%xmm1, 8(%rsp)
++	movq	%xmm2, 16(%rsp)
++	movq	%xmm3, 24(%rsp)
+ 	call	_x86_64_get_dispatch@PLT
++	movq	24(%rsp), %xmm3
++	movq	16(%rsp), %xmm2
++	movq	8(%rsp), %xmm1
++	movq	(%rsp), %xmm0
++	addq	$40, %rsp
+ 	movq	232(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -1130,7 +1280,9 @@
+ 	.type	GL_PREFIX(Color4fv), @function
+ GL_PREFIX(Color4fv):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdi
+ 	movq	240(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -1159,7 +1311,17 @@
+ 	.type	GL_PREFIX(Color4i), @function
+ GL_PREFIX(Color4i):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
++	pushq	%rsi
++	pushq	%rdx
++	pushq	%rcx
++	pushq	%rbp
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rbp
++	popq	%rcx
++	popq	%rdx
++	popq	%rsi
++	popq	%rdi
+ 	movq	248(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -1204,7 +1366,9 @@
+ 	.type	GL_PREFIX(Color4iv), @function
+ GL_PREFIX(Color4iv):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdi
+ 	movq	256(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -1233,7 +1397,17 @@
+ 	.type	GL_PREFIX(Color4s), @function
+ GL_PREFIX(Color4s):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
++	pushq	%rsi
++	pushq	%rdx
++	pushq	%rcx
++	pushq	%rbp
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rbp
++	popq	%rcx
++	popq	%rdx
++	popq	%rsi
++	popq	%rdi
+ 	movq	264(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -1278,7 +1452,9 @@
+ 	.type	GL_PREFIX(Color4sv), @function
+ GL_PREFIX(Color4sv):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdi
+ 	movq	272(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -1307,7 +1483,17 @@
+ 	.type	GL_PREFIX(Color4ub), @function
+ GL_PREFIX(Color4ub):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
++	pushq	%rsi
++	pushq	%rdx
++	pushq	%rcx
++	pushq	%rbp
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rbp
++	popq	%rcx
++	popq	%rdx
++	popq	%rsi
++	popq	%rdi
+ 	movq	280(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -1352,7 +1538,9 @@
+ 	.type	GL_PREFIX(Color4ubv), @function
+ GL_PREFIX(Color4ubv):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdi
+ 	movq	288(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -1381,7 +1569,17 @@
+ 	.type	GL_PREFIX(Color4ui), @function
+ GL_PREFIX(Color4ui):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
++	pushq	%rsi
++	pushq	%rdx
++	pushq	%rcx
++	pushq	%rbp
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rbp
++	popq	%rcx
++	popq	%rdx
++	popq	%rsi
++	popq	%rdi
+ 	movq	296(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -1426,7 +1624,9 @@
+ 	.type	GL_PREFIX(Color4uiv), @function
+ GL_PREFIX(Color4uiv):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdi
+ 	movq	304(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -1455,7 +1655,17 @@
+ 	.type	GL_PREFIX(Color4us), @function
+ GL_PREFIX(Color4us):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
++	pushq	%rsi
++	pushq	%rdx
++	pushq	%rcx
++	pushq	%rbp
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rbp
++	popq	%rcx
++	popq	%rdx
++	popq	%rsi
++	popq	%rdi
+ 	movq	312(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -1500,7 +1710,9 @@
+ 	.type	GL_PREFIX(Color4usv), @function
+ GL_PREFIX(Color4usv):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdi
+ 	movq	320(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -1529,7 +1741,9 @@
+ 	.type	GL_PREFIX(EdgeFlag), @function
+ GL_PREFIX(EdgeFlag):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdi
+ 	movq	328(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -1558,7 +1772,9 @@
+ 	.type	GL_PREFIX(EdgeFlagv), @function
+ GL_PREFIX(EdgeFlagv):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdi
+ 	movq	336(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -1587,7 +1803,9 @@
+ 	.type	GL_PREFIX(End), @function
+ GL_PREFIX(End):
+ #if defined(GLX_USE_TLS)
++	pushq	%rbp
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rbp
+ 	movq	344(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -1616,7 +1834,11 @@
+ 	.type	GL_PREFIX(Indexd), @function
+ GL_PREFIX(Indexd):
+ #if defined(GLX_USE_TLS)
++	subq	$8, %rsp
++	movq	%xmm0, (%rsp)
+ 	call	_x86_64_get_dispatch@PLT
++	movq	(%rsp), %xmm0
++	addq	$8, %rsp
+ 	movq	352(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -1649,7 +1871,9 @@
+ 	.type	GL_PREFIX(Indexdv), @function
+ GL_PREFIX(Indexdv):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdi
+ 	movq	360(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -1678,7 +1902,11 @@
+ 	.type	GL_PREFIX(Indexf), @function
+ GL_PREFIX(Indexf):
+ #if defined(GLX_USE_TLS)
++	subq	$8, %rsp
++	movq	%xmm0, (%rsp)
+ 	call	_x86_64_get_dispatch@PLT
++	movq	(%rsp), %xmm0
++	addq	$8, %rsp
+ 	movq	368(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -1711,7 +1939,9 @@
+ 	.type	GL_PREFIX(Indexfv), @function
+ GL_PREFIX(Indexfv):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdi
+ 	movq	376(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -1740,7 +1970,9 @@
+ 	.type	GL_PREFIX(Indexi), @function
+ GL_PREFIX(Indexi):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdi
+ 	movq	384(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -1769,7 +2001,9 @@
+ 	.type	GL_PREFIX(Indexiv), @function
+ GL_PREFIX(Indexiv):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdi
+ 	movq	392(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -1798,7 +2032,9 @@
+ 	.type	GL_PREFIX(Indexs), @function
+ GL_PREFIX(Indexs):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdi
+ 	movq	400(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -1827,7 +2063,9 @@
+ 	.type	GL_PREFIX(Indexsv), @function
+ GL_PREFIX(Indexsv):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdi
+ 	movq	408(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -1856,7 +2094,13 @@
+ 	.type	GL_PREFIX(Normal3b), @function
+ GL_PREFIX(Normal3b):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
++	pushq	%rsi
++	pushq	%rdx
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdx
++	popq	%rsi
++	popq	%rdi
+ 	movq	416(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -1893,7 +2137,9 @@
+ 	.type	GL_PREFIX(Normal3bv), @function
+ GL_PREFIX(Normal3bv):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdi
+ 	movq	424(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -1922,7 +2168,15 @@
+ 	.type	GL_PREFIX(Normal3d), @function
+ GL_PREFIX(Normal3d):
+ #if defined(GLX_USE_TLS)
++	subq	$24, %rsp
++	movq	%xmm0, (%rsp)
++	movq	%xmm1, 8(%rsp)
++	movq	%xmm2, 16(%rsp)
+ 	call	_x86_64_get_dispatch@PLT
++	movq	16(%rsp), %xmm2
++	movq	8(%rsp), %xmm1
++	movq	(%rsp), %xmm0
++	addq	$24, %rsp
+ 	movq	432(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -1963,7 +2217,9 @@
+ 	.type	GL_PREFIX(Normal3dv), @function
+ GL_PREFIX(Normal3dv):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdi
+ 	movq	440(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -1992,7 +2248,15 @@
+ 	.type	GL_PREFIX(Normal3f), @function
+ GL_PREFIX(Normal3f):
+ #if defined(GLX_USE_TLS)
++	subq	$24, %rsp
++	movq	%xmm0, (%rsp)
++	movq	%xmm1, 8(%rsp)
++	movq	%xmm2, 16(%rsp)
+ 	call	_x86_64_get_dispatch@PLT
++	movq	16(%rsp), %xmm2
++	movq	8(%rsp), %xmm1
++	movq	(%rsp), %xmm0
++	addq	$24, %rsp
+ 	movq	448(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -2033,7 +2297,9 @@
+ 	.type	GL_PREFIX(Normal3fv), @function
+ GL_PREFIX(Normal3fv):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdi
+ 	movq	456(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -2062,7 +2328,13 @@
+ 	.type	GL_PREFIX(Normal3i), @function
+ GL_PREFIX(Normal3i):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
++	pushq	%rsi
++	pushq	%rdx
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdx
++	popq	%rsi
++	popq	%rdi
+ 	movq	464(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -2099,7 +2371,9 @@
+ 	.type	GL_PREFIX(Normal3iv), @function
+ GL_PREFIX(Normal3iv):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdi
+ 	movq	472(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -2128,7 +2402,13 @@
+ 	.type	GL_PREFIX(Normal3s), @function
+ GL_PREFIX(Normal3s):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
++	pushq	%rsi
++	pushq	%rdx
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdx
++	popq	%rsi
++	popq	%rdi
+ 	movq	480(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -2165,7 +2445,9 @@
+ 	.type	GL_PREFIX(Normal3sv), @function
+ GL_PREFIX(Normal3sv):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdi
+ 	movq	488(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -2194,7 +2476,13 @@
+ 	.type	GL_PREFIX(RasterPos2d), @function
+ GL_PREFIX(RasterPos2d):
+ #if defined(GLX_USE_TLS)
++	subq	$24, %rsp
++	movq	%xmm0, (%rsp)
++	movq	%xmm1, 8(%rsp)
+ 	call	_x86_64_get_dispatch@PLT
++	movq	8(%rsp), %xmm1
++	movq	(%rsp), %xmm0
++	addq	$24, %rsp
+ 	movq	496(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)
+@@ -2231,7 +2519,9 @@
+ 	.type	GL_PREFIX(RasterPos2dv), @function
+ GL_PREFIX(RasterPos2dv):
+ #if defined(GLX_USE_TLS)
++	pushq	%rdi
+ 	call	_x86_64_get_dispatch@PLT
++	popq	%rdi
+ 	movq	504(%rax), %r11
+ 	jmp	*%r11
+ #elif defined(PTHREADS)


Reply to: