diff options
author | Jory Pratt <anarchy@gentoo.org> | 2022-01-28 19:54:24 -0600 |
---|---|---|
committer | Jory Pratt <anarchy@gentoo.org> | 2022-01-28 19:54:24 -0600 |
commit | 33f9ed07de27dc089a336b3bffbb80dd86e61615 (patch) | |
tree | 77712850e90f76d16bdd5208bc6b66b45308b8d7 | |
parent | sys-auth/polkit: meson fix, security bump (diff) | |
download | musl-33f9ed07.tar.gz musl-33f9ed07.tar.bz2 musl-33f9ed07.zip |
media-libs/mesa: Fix build for x86 users
Package-Manager: Portage-3.0.30, Repoman-3.0.3
Signed-off-by: Jory Pratt <anarchy@gentoo.org>
-rw-r--r-- | media-libs/mesa/files/mesa-tls-3-fix-non-initial-exec.patch | 122 | ||||
-rw-r--r-- | media-libs/mesa/mesa-21.3.4.ebuild | 1 |
2 files changed, 123 insertions, 0 deletions
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)" <alex_y_xu@yahoo.ca> +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 <jenatali@microsoft.com> +Tested-by: Jan Beich <jbeich@freebsd.org> +Signed-off-by: Alex Xu (Hello71) <alex_y_xu@yahoo.ca> +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() { |