commit:     33f9ed07de27dc089a336b3bffbb80dd86e61615
Author:     Jory Pratt <anarchy <AT> gentoo <DOT> org>
AuthorDate: Sat Jan 29 01:54:24 2022 +0000
Commit:     Jory Pratt <anarchy <AT> gentoo <DOT> org>
CommitDate: Sat Jan 29 01:54:24 2022 +0000
URL:        https://gitweb.gentoo.org/proj/musl.git/commit/?id=33f9ed07

media-libs/mesa: Fix build for x86 users

Package-Manager: Portage-3.0.30, Repoman-3.0.3
Signed-off-by: Jory Pratt <anarchy <AT> gentoo.org>

 .../files/mesa-tls-3-fix-non-initial-exec.patch    | 122 +++++++++++++++++++++
 media-libs/mesa/mesa-21.3.4.ebuild                 |   1 +
 2 files changed, 123 insertions(+)

diff --git a/media-libs/mesa/files/mesa-tls-3-fix-non-initial-exec.patch 
b/media-libs/mesa/files/mesa-tls-3-fix-non-initial-exec.patch
new file mode 100644
index 00000000..4ae45ca0
--- /dev/null
+++ b/media-libs/mesa/files/mesa-tls-3-fix-non-initial-exec.patch
@@ -0,0 +1,122 @@
+From 3aab34171d464f907ed4488ab87c48270381ecde Mon Sep 17 00:00:00 2001
+From: "Alex Xu (Hello71)" <[email protected]>
+Date: Tue, 23 Nov 2021 15:24:38 -0500
+Subject: [PATCH] Fix TSD stubs for non-initial-exec case (fixes #5667).
+
+ppc64le TSD disabled for now since I am insufficiently familiar with ppc
+asm. x86 pthread stubs deleted because adding USE_ELF_TLS to the #if is
+isn't worth the effort since it only saves a single function call on
+initial entry (TSD stubs are not used for read-only text now). also
+potentially fix non-pthread TSD builds (_glapi_Dispatch was undefined),
+but untested (could still be broken).
+
+Tested-by: Jesse Natalie <[email protected]>
+Tested-by: Jan Beich <[email protected]>
+Signed-off-by: Alex Xu (Hello71) <[email protected]>
+Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13935>
+---
+ src/mapi/entry.c                 |  5 ++---
+ src/mapi/entry_x86_tsd.h         |  2 +-
+ src/mapi/glapi/gen/gl_x86_asm.py | 28 +++-------------------------
+ 3 files changed, 6 insertions(+), 29 deletions(-)
+
+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('')
+-- 
+GitLab
+

diff --git a/media-libs/mesa/mesa-21.3.4.ebuild 
b/media-libs/mesa/mesa-21.3.4.ebuild
index ec0dad18..f9fd08f6 100644
--- a/media-libs/mesa/mesa-21.3.4.ebuild
+++ b/media-libs/mesa/mesa-21.3.4.ebuild
@@ -240,6 +240,7 @@ x86? (
 PATCHES=(
        "${FILESDIR}"/mesa-tls.patch
        "${FILESDIR}"/mesa-tls-2.patch
+       "${FILESDIR}"/mesa-tls-3-fix-non-initial-exec.patch
 )
 
 llvm_check_deps() {

Reply via email to