sm-commit AT lists.ibiblio.org
Subject: Source Mage code commit list
List archive
[SM-Commit] GIT changes to master grimoire by Ismael Luceno (b91bc4a785b8badd68b7c3e65dee1297363d596e)
- From: Ismael Luceno <scm AT sourcemage.org>
- To: sm-commit AT lists.ibiblio.org
- Subject: [SM-Commit] GIT changes to master grimoire by Ismael Luceno (b91bc4a785b8badd68b7c3e65dee1297363d596e)
- Date: Sun, 14 Mar 2021 15:07:02 +0000
GIT changes to master grimoire by Ismael Luceno <ismael AT sourcemage.org>:
graphics-libs/mesa/BUILD
| 14
graphics-libs/mesa/DETAILS
| 1
graphics-libs/mesa/HISTORY
| 6
graphics-libs/mesa/patches/0001-mapi--use-global-dynamic-TLS--kill-asm-stubs.patch
| 1038 ++++++++++
4 files changed, 1054 insertions(+), 5 deletions(-)
New commits:
commit b91bc4a785b8badd68b7c3e65dee1297363d596e
Author: Ismael Luceno <ismael AT sourcemage.org>
Commit: Ismael Luceno <ismael AT sourcemage.org>
mesa: Fix dlopen failures due to TLS model
Switch to global-dynamic TLS model with gnu2 dialect.
The use of the initial-exec TLS model requires non-standard
arrangements by the loader, only implemented by glibc, and additionally
causes dlopen of libGL to fail under several circumstances.
By using the gnu2 TLS dialect, the global-dynamic model becomes
as efficient as initial-exec in most circumstances, and works with
reduced performance where initial-exec prevents loading altogether.
diff --git a/graphics-libs/mesa/BUILD b/graphics-libs/mesa/BUILD
index ff3162a..1004204 100755
--- a/graphics-libs/mesa/BUILD
+++ b/graphics-libs/mesa/BUILD
@@ -1,3 +1,11 @@
+# XXX The use of the initial-exec TLS model requires non-standard
arrangements
+# by the loader, only implemented by glibc, and causes dlopen of libGL to
+# fail under several circumstances. By using the gnu2 TLS dialect, the
+# global-dynamic model becomes as efficient as initial-exec in most
+# circumstances, and works with reduced performance where initial-exec
+# prevents loading altogether. This is accompanied by a patch removing
the
+# use of initial-exec and the related asm stubs.
+CFLAGS+=" -mtls-dialect=gnu2" &&
case "$HOST" in
*-gnu) ;;
*)
@@ -11,9 +19,7 @@ case "$HOST" in
MESA_TOOLS="${MESA_TOOLS# }"
MESA_TOOLS="${MESA_TOOLS% }"
;;
-esac
-#LDFLAGS='' &&
-#CXXFLAGS='' &&
+esac &&
local vulkan=${MESA_VULKAN//none} &&
local gallium=${MESA_GALLIUM//none} &&
local dri=${MESA_DRI//none} &&
@@ -26,7 +32,5 @@ OPTS+=" dri-drivers=${dri// /,} \
swr-arches=${MESA_ARCH// /,} \
$MESA_GLES1 $MESA_GLES2" &&
echo "OPTS=$OPTS" &&
-
-#PREFIX=/opt/mesa &&
PREFIX=/usr &&
default_build
diff --git a/graphics-libs/mesa/DETAILS b/graphics-libs/mesa/DETAILS
index 78fd27b..f365a47 100755
--- a/graphics-libs/mesa/DETAILS
+++ b/graphics-libs/mesa/DETAILS
@@ -10,6 +10,7 @@ if [[ "${MESA_BRANCH}" == "scm" ]]; then
SOURCE_DIRECTORY="${BUILD_DIRECTORY}/${SPELL}-git"
else
VERSION=21.0.0
+ PATCHLEVEL=1
SOURCE_HASH=sha512:32f4a74fbc1456dac478fdc3a85e37cedb9ac1e1b7c5434706dc24930a70bc9e857ba6b5bf1e7e05798e259f8ff0b05bad5252c07253cb5d6a9707c7c2e147ad
SOURCE=mesa-$VERSION.tar.xz
SOURCE_URL[0]="https://mesa.freedesktop.org/archive/${SOURCE}"
diff --git a/graphics-libs/mesa/HISTORY b/graphics-libs/mesa/HISTORY
index e746c85..a653909 100644
--- a/graphics-libs/mesa/HISTORY
+++ b/graphics-libs/mesa/HISTORY
@@ -1,3 +1,9 @@
+2021-03-14 Ismael Luceno <ismael AT sourcemage.org>
+ * patches/0001-mapi--use-global-dynamic-TLS--kill-asm-stubs.patch,
+ BUILD: switched to global-dynamic TLS model with gnu2 dialect to fix
+ dlopen failures
+ * DETAILS: PATCHLEVEL++
+
2021-03-12 Treeve Jelbert <treeve AT sourcemage.org>
* DETAILS: version 21.0.0
* 0001-meson-add-missing-dependency-on-generated-git_sha1.h.patch:
delete
diff --git
a/graphics-libs/mesa/patches/0001-mapi--use-global-dynamic-TLS--kill-asm-stubs.patch
b/graphics-libs/mesa/patches/0001-mapi--use-global-dynamic-TLS--kill-asm-stubs.patch
new file mode 100644
index 0000000..35f7872
--- /dev/null
+++
b/graphics-libs/mesa/patches/0001-mapi--use-global-dynamic-TLS--kill-asm-stubs.patch
@@ -0,0 +1,1038 @@
+From c333fdcd8406049b613df98d06a46763c8138f06 Mon Sep 17 00:00:00 2001
+From: Greg V <greg AT unrelenting.technology>
+Date: Sun, 26 Jan 2020 16:03:21 +0300
+Subject: [PATCH] mapi: use global-dynamic TLS, kill asm stubs
+
+ref: https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3559#note_394462
+ref: https://gitlab.freedesktop.org/mesa/mesa/issues/966
+---
+ src/egl/main/eglcurrent.c | 3 +-
+ src/glx/glxclient.h | 3 +-
+ src/glx/glxcurrent.c | 3 +-
+ src/mapi/Makefile.sources | 5 -
+ src/mapi/entry.c | 18 ---
+ src/mapi/entry_ppc64le_tls.h | 152 -------------------------
+ src/mapi/entry_ppc64le_tsd.h | 210 -----------------------------------
+ src/mapi/entry_x86-64_tls.h | 143 ------------------------
+ src/mapi/entry_x86_tls.h | 156 --------------------------
+ src/mapi/entry_x86_tsd.h | 155 --------------------------
+ src/mapi/glapi/glapi.h | 6 +-
+ src/mapi/glapi/meson.build | 5 -
+ src/mapi/u_current.c | 4 +-
+ src/mapi/u_current.h | 6 +-
+ 14 files changed, 8 insertions(+), 861 deletions(-)
+ delete mode 100644 src/mapi/entry_ppc64le_tls.h
+ delete mode 100644 src/mapi/entry_ppc64le_tsd.h
+ delete mode 100644 src/mapi/entry_x86-64_tls.h
+ delete mode 100644 src/mapi/entry_x86_tls.h
+ delete mode 100644 src/mapi/entry_x86_tsd.h
+
+diff --git a/src/egl/main/eglcurrent.c b/src/egl/main/eglcurrent.c
+index 29be4268025..c45a8e6060a 100644
+--- a/src/egl/main/eglcurrent.c
++++ b/src/egl/main/eglcurrent.c
+@@ -45,8 +45,7 @@ static tss_t _egl_TSD;
+ static void _eglDestroyThreadInfo(_EGLThreadInfo *t);
+
+ #ifdef USE_ELF_TLS
+-static __thread const _EGLThreadInfo *_egl_TLS
+- __attribute__ ((tls_model("initial-exec")));
++static __thread const _EGLThreadInfo *_egl_TLS;
+ #endif
+
+ static inline void _eglSetTSD(const _EGLThreadInfo *t)
+diff --git a/src/glx/glxclient.h b/src/glx/glxclient.h
+index 1f199054410..75ee705b182 100644
+--- a/src/glx/glxclient.h
++++ b/src/glx/glxclient.h
+@@ -656,8 +656,7 @@ extern void __glXSetCurrentContext(struct glx_context *
c);
+
+ # if defined( USE_ELF_TLS )
+
+-extern __thread void *__glX_tls_Context
+- __attribute__ ((tls_model("initial-exec")));
++extern __thread void *__glX_tls_Context;
+
+ # define __glXGetCurrentContext() __glX_tls_Context
+
+diff --git a/src/glx/glxcurrent.c b/src/glx/glxcurrent.c
+index a388df7a78d..4f45283e521 100644
+--- a/src/glx/glxcurrent.c
++++ b/src/glx/glxcurrent.c
+@@ -76,8 +76,7 @@ _X_HIDDEN pthread_mutex_t __glXmutex =
PTHREAD_MUTEX_INITIALIZER;
+ * \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")))
+- = &dummyContext;
++__thread void *__glX_tls_Context = &dummyContext;
+
+ _X_HIDDEN void
+ __glXSetCurrentContext(struct glx_context * c)
+diff --git a/src/mapi/Makefile.sources b/src/mapi/Makefile.sources
+index 4b83caa8ed2..93318ed19cf 100644
+--- a/src/mapi/Makefile.sources
++++ b/src/mapi/Makefile.sources
+@@ -20,11 +20,6 @@ MAPI_UTIL_FILES = \
+ MAPI_BRIDGE_FILES = \
+ entry.c \
+ entry.h \
+- entry_x86-64_tls.h \
+- entry_x86_tls.h \
+- entry_x86_tsd.h \
+- entry_ppc64le_tls.h \
+- entry_ppc64le_tsd.h \
+ mapi_tmp.h
+
+ MAPI_GLAPI_FILES = \
+diff --git a/src/mapi/entry.c b/src/mapi/entry.c
+index 7ff3c8f8c8c..29e7bf91979 100644
+--- a/src/mapi/entry.c
++++ b/src/mapi/entry.c
+@@ -45,22 +45,6 @@
+ #define ENTRY_CURRENT_TABLE_GET U_STRINGIFY(u_current_get_table_internal)
+ #endif
+
+-#if defined(USE_X86_ASM) && defined(__GNUC__)
+-# ifdef USE_ELF_TLS
+-# include "entry_x86_tls.h"
+-# else
+-# include "entry_x86_tsd.h"
+-# endif
+-#elif defined(USE_X86_64_ASM) && defined(__GNUC__) && defined(USE_ELF_TLS)
+-# include "entry_x86-64_tls.h"
+-#elif defined(USE_PPC64LE_ASM) && defined(__GNUC__) &&
UTIL_ARCH_LITTLE_ENDIAN
+-# ifdef USE_ELF_TLS
+-# include "entry_ppc64le_tls.h"
+-# else
+-# include "entry_ppc64le_tsd.h"
+-# endif
+-#else
+-
+ static inline const struct _glapi_table *
+ entry_current_get(void)
+ {
+@@ -103,5 +87,3 @@ entry_patch(mapi_func entry, int slot)
+ }
+
+ #endif /* MAPI_MODE_BRIDGE */
+-
+-#endif /* asm */
+diff --git a/src/mapi/entry_ppc64le_tls.h b/src/mapi/entry_ppc64le_tls.h
+deleted file mode 100644
+index e09a1178a06..00000000000
+--- a/src/mapi/entry_ppc64le_tls.h
++++ /dev/null
+@@ -1,152 +0,0 @@
+-/*
+- * Mesa 3-D graphics library
+- *
+- * Copyright (C) 2017 Red Hat
+- *
+- * Permission is hereby granted, free of charge, to any person obtaining a
+- * copy of this software and associated documentation files (the
"Software"),
+- * to deal in the Software without restriction, including without limitation
+- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+- * and/or sell copies of the Software, and to permit persons to whom the
+- * Software is furnished to do so, subject to the following conditions:
+- *
+- * The above copyright notice and this permission notice shall be included
+- * in all copies or substantial portions of the Software.
+- *
+- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR
+- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
+- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+- * DEALINGS IN THE SOFTWARE.
+- *
+- * Authors:
+- * Ben Crocker <bcrocker AT redhat.com>
+- */
+-
+-#ifdef HAVE_FUNC_ATTRIBUTE_VISIBILITY
+-#define HIDDEN __attribute__((visibility("hidden")))
+-#else
+-#define HIDDEN
+-#endif
+-
+-// NOTE: These must be powers of two:
+-#define PPC64LE_ENTRY_SIZE 64
+-#define PPC64LE_PAGE_ALIGN 65536
+-#if ((PPC64LE_ENTRY_SIZE & (PPC64LE_ENTRY_SIZE - 1)) != 0)
+-#error PPC64LE_ENTRY_SIZE must be a power of two!
+-#endif
+-#if ((PPC64LE_PAGE_ALIGN & (PPC64LE_PAGE_ALIGN - 1)) != 0)
+-#error PPC64LE_PAGE_ALIGN must be a power of two!
+-#endif
+-
+-__asm__(".text\n"
+- ".balign " U_STRINGIFY(PPC64LE_ENTRY_SIZE) "\n"
+- "ppc64le_entry_start:");
+-
+-#define STUB_ASM_ENTRY(func) \
+- ".globl " func "\n" \
+- ".type " func ", @function\n" \
+- ".balign " U_STRINGIFY(PPC64LE_ENTRY_SIZE) "\n" \
+- func ":\n\t" \
+- " addis 2, 12, .TOC.-" func "@ha\n\t" \
+- " addi 2, 2, .TOC.-" func "@l\n\t" \
+- " .localentry " func ", .-" func "\n\t"
+-
+-#define STUB_ASM_CODE(slot) \
+- " addis 11, 2, " ENTRY_CURRENT_TABLE "@got@tprel@ha\n\t" \
+- " ld 11, " ENTRY_CURRENT_TABLE "@got@tprel@l(11)\n\t" \
+- " add 11, 11," ENTRY_CURRENT_TABLE "@tls\n\t" \
+- " ld 11, 0(11)\n\t" \
+- " ld 12, " slot "*8(11)\n\t" \
+- " mtctr 12\n\t" \
+- " bctr\n" \
+-
+-#define MAPI_TMP_STUB_ASM_GCC
+-#include "mapi_tmp.h"
+-
+-#ifndef MAPI_MODE_BRIDGE
+-
+-#include <string.h>
+-#include "u_execmem.h"
+-
+-void
+-entry_patch_public(void)
+-{
+-}
+-
+-extern char
+-ppc64le_entry_start[] HIDDEN;
+-
+-mapi_func
+-entry_get_public(int slot)
+-{
+- return (mapi_func) (ppc64le_entry_start + slot * PPC64LE_ENTRY_SIZE);
+-}
+-
+-__asm__(".text\n");
+-
+-__asm__("ppc64le_dispatch_tls:\n\t"
+- " addis 3, 2, " ENTRY_CURRENT_TABLE "@got@tprel@ha\n\t"
+- " ld 3, " ENTRY_CURRENT_TABLE "@got@tprel@l(3)\n\t"
+- " blr\n"
+- );
+-
+-extern uint64_t ppc64le_dispatch_tls();
+-
+-static const uint32_t code_templ[] = {
+- // This should be functionally the same code as would be generated from
+- // the STUB_ASM_CODE macro, but defined as a buffer.
+- // This is used to generate new dispatch stubs. Mesa will copy this
+- // data to the dispatch stub, and then it will patch the slot number and
+- // any addresses that it needs to.
+- // NOTE!!! NOTE!!! NOTE!!!
+- // This representation is correct for both little- and big-endian
systems.
+- // However, more work needs to be done for big-endian Linux because it
+- // adheres to an older, AIX-compatible ABI that uses function
descriptors.
+- // 1000:
+- 0x7C0802A6, // <ENTRY+00>: mflr 0
+- 0xF8010010, // <ENTRY+04>: std 0, 16(1)
+- 0xE96C0028, // <ENTRY+08>: ld 11, 9000f-1000b+0(12)
+- 0x7D6B6A14, // <ENTRY+12>: add 11, 11, 13
+- 0xE96B0000, // <ENTRY+16>: ld 11, 0(11)
+- 0xE80C0030, // <ENTRY+20>: ld 0, 9000f-1000b+8(12)
+- 0x7D8B002A, // <ENTRY+24>: ldx 12, 11, 0
+- 0x7D8903A6, // <ENTRY+28>: mtctr 12
+- 0x4E800420, // <ENTRY+32>: bctr
+- 0x60000000, // <ENTRY+36>: nop
+- // 9000:
+- 0, 0, // <ENTRY+40>: .quad _glapi_tls_Dispatch
+- 0, 0 // <ENTRY+48>: .quad <slot>*8
+-};
+-static const uint64_t TEMPLATE_OFFSET_TLS_ADDR = sizeof(code_templ) - 2*8;
+-static const uint64_t TEMPLATE_OFFSET_SLOT = sizeof(code_templ) - 1*8;
+-
+-void
+-entry_patch(mapi_func entry, int slot)
+-{
+- char *code = (char *) entry;
+- *((uint64_t *) (code + TEMPLATE_OFFSET_TLS_ADDR)) =
ppc64le_dispatch_tls();
+- *((uint64_t *) (code + TEMPLATE_OFFSET_SLOT)) = slot * sizeof(mapi_func);
+-}
+-
+-mapi_func
+-entry_generate(int slot)
+-{
+- char *code;
+- mapi_func entry;
+-
+- code = u_execmem_alloc(sizeof(code_templ));
+- if (!code)
+- return NULL;
+-
+- memcpy(code, code_templ, sizeof(code_templ));
+-
+- entry = (mapi_func) code;
+- entry_patch(entry, slot);
+-
+- return entry;
+-}
+-
+-#endif /* MAPI_MODE_BRIDGE */
+diff --git a/src/mapi/entry_ppc64le_tsd.h b/src/mapi/entry_ppc64le_tsd.h
+deleted file mode 100644
+index a583b93e5e2..00000000000
+--- a/src/mapi/entry_ppc64le_tsd.h
++++ /dev/null
+@@ -1,210 +0,0 @@
+-/*
+- * Mesa 3-D graphics library
+- *
+- * Copyright (C) 2017 Red Hat
+- *
+- * Permission is hereby granted, free of charge, to any person obtaining a
+- * copy of this software and associated documentation files (the
"Software"),
+- * to deal in the Software without restriction, including without limitation
+- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+- * and/or sell copies of the Software, and to permit persons to whom the
+- * Software is furnished to do so, subject to the following conditions:
+- *
+- * The above copyright notice and this permission notice shall be included
+- * in all copies or substantial portions of the Software.
+- *
+- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR
+- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
+- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+- * DEALINGS IN THE SOFTWARE.
+- *
+- * Authors:
+- * Ben Crocker <bcrocker AT redhat.com>
+- */
+-
+-#ifdef HAVE_FUNC_ATTRIBUTE_VISIBILITY
+-#define HIDDEN __attribute__((visibility("hidden")))
+-#else
+-#define HIDDEN
+-#endif
+-
+-// NOTE: These must be powers of two:
+-#define PPC64LE_ENTRY_SIZE 256
+-#define PPC64LE_PAGE_ALIGN 65536
+-#if ((PPC64LE_ENTRY_SIZE & (PPC64LE_ENTRY_SIZE - 1)) != 0)
+-#error PPC64LE_ENTRY_SIZE must be a power of two!
+-#endif
+-#if ((PPC64LE_PAGE_ALIGN & (PPC64LE_PAGE_ALIGN - 1)) != 0)
+-#error PPC64LE_PAGE_ALIGN must be a power of two!
+-#endif
+-
+-__asm__(".text\n"
+- ".balign " U_STRINGIFY(PPC64LE_ENTRY_SIZE) "\n"
+- "ppc64le_entry_start:");
+-
+-#define STUB_ASM_ENTRY(func) \
+- ".globl " func "\n" \
+- ".type " func ", @function\n" \
+- ".balign " U_STRINGIFY(PPC64LE_ENTRY_SIZE) "\n" \
+- func ":\n\t" \
+- " addis 2, 12, .TOC.-" func "@ha\n\t" \
+- " addi 2, 2, .TOC.-" func "@l\n\t" \
+- " .localentry " func ", .-" func "\n\t"
+-
+-#define STUB_ASM_CODE(slot) \
+- " addis 11, 2, " ENTRY_CURRENT_TABLE "@got@ha\n\t" \
+- " ld 11, " ENTRY_CURRENT_TABLE "@got@l(11)\n\t" \
+- " ld 11, 0(11)\n\t" \
+- " cmpldi 11, 0\n\t" \
+- " beq 2000f\n" \
+- "1050:\n\t" \
+- " ld 12, " slot "*8(11)\n\t" \
+- " mtctr 12\n\t" \
+- " bctr\n" \
+- "2000:\n\t" \
+- " mflr 0\n\t" \
+- " std 0, 16(1)\n\t" \
+- " std 2, 40(1)\n\t" \
+- " stdu 1, -144(1)\n\t" \
+- " std 3, 56(1)\n\t" \
+- " std 4, 64(1)\n\t" \
+- " std 5, 72(1)\n\t" \
+- " std 6, 80(1)\n\t" \
+- " std 7, 88(1)\n\t" \
+- " std 8, 96(1)\n\t" \
+- " std 9, 104(1)\n\t" \
+- " std 10, 112(1)\n\t" \
+- " std 12, 128(1)\n\t" \
+- " addis 12, 2, " ENTRY_CURRENT_TABLE_GET "@got@ha\n\t" \
+- " ld 12, " ENTRY_CURRENT_TABLE_GET "@got@l(12)\n\t" \
+- " mtctr 12\n\t" \
+- " bctrl\n\t" \
+- " ld 2, 144+40(1)\n\t" \
+- " mr 11, 3\n\t" \
+- " ld 3, 56(1)\n\t" \
+- " ld 4, 64(1)\n\t" \
+- " ld 5, 72(1)\n\t" \
+- " ld 6, 80(1)\n\t" \
+- " ld 7, 88(1)\n\t" \
+- " ld 8, 96(1)\n\t" \
+- " ld 9, 104(1)\n\t" \
+- " ld 10, 112(1)\n\t" \
+- " ld 12, 128(1)\n\t" \
+- " addi 1, 1, 144\n\t" \
+- " ld 0, 16(1)\n\t" \
+- " mtlr 0\n\t" \
+- " b 1050b\n"
+-
+-#define MAPI_TMP_STUB_ASM_GCC
+-#include "mapi_tmp.h"
+-
+-#ifndef MAPI_MODE_BRIDGE
+-
+-#include <string.h>
+-#include "u_execmem.h"
+-
+-void
+-entry_patch_public(void)
+-{
+-}
+-
+-extern char
+-ppc64le_entry_start[] HIDDEN;
+-
+-mapi_func
+-entry_get_public(int slot)
+-{
+- return (mapi_func) (ppc64le_entry_start + slot * PPC64LE_ENTRY_SIZE);
+-}
+-
+-static const uint32_t code_templ[] = {
+- // This should be functionally the same code as would be generated from
+- // the STUB_ASM_CODE macro, but defined as a buffer.
+- // This is used to generate new dispatch stubs. Mesa will copy this
+- // data to the dispatch stub, and then it will patch the slot number and
+- // any addresses that it needs to.
+- // NOTE!!! NOTE!!! NOTE!!!
+- // This representation is correct for both little- and big-endian
systems.
+- // However, more work needs to be done for big-endian Linux because it
+- // adheres to an older, AIX-compatible ABI that uses function
descriptors.
+- // 1000:
+- 0x7C0802A6, // <ENTRY+000>: mflr 0
+- 0xF8010010, // <ENTRY+004>: std 0, 16(1)
+- 0xE96C0098, // <ENTRY+008>: ld 11, 9000f-1000b+0(12)
+- 0xE96B0000, // <ENTRY+012>: ld 11, 0(11)
+- 0x282B0000, // <ENTRY+016>: cmpldi 11, 0
+- 0x41820014, // <ENTRY+020>: beq 2000f
+- // 1050:
+- 0xE80C00A8, // <ENTRY+024>: ld 0, 9000f-1000b+16(12)
+- 0x7D8B002A, // <ENTRY+028>: ldx 12, 11, 0
+- 0x7D8903A6, // <ENTRY+032>: mtctr 12
+- 0x4E800420, // <ENTRY+036>: bctr
+- // 2000:
+- 0xF8410028, // <ENTRY+040>: std 2, 40(1)
+- 0xF821FF71, // <ENTRY+044>: stdu 1, -144(1)
+- 0xF8610038, // <ENTRY+048>: std 3, 56(1)
+- 0xF8810040, // <ENTRY+052>: std 4, 64(1)
+- 0xF8A10048, // <ENTRY+056>: std 5, 72(1)
+- 0xF8C10050, // <ENTRY+060>: std 6, 80(1)
+- 0xF8E10058, // <ENTRY+064>: std 7, 88(1)
+- 0xF9010060, // <ENTRY+068>: std 8, 96(1)
+- 0xF9210068, // <ENTRY+072>: std 9, 104(1)
+- 0xF9410070, // <ENTRY+076>: std 10, 112(1)
+- 0xF9810080, // <ENTRY+080>: std 12, 128(1)
+- 0xE98C00A0, // <ENTRY+084>: ld 12, 9000f-1000b+8(12)
+- 0x7D8903A6, // <ENTRY+088>: mtctr 12
+- 0x4E800421, // <ENTRY+092>: bctrl
+- 0x7C6B1B78, // <ENTRY+096>: mr 11, 3
+- 0xE8610038, // <ENTRY+100>: ld 3, 56(1)
+- 0xE8810040, // <ENTRY+104>: ld 4, 64(1)
+- 0xE8A10048, // <ENTRY+108>: ld 5, 72(1)
+- 0xE8C10050, // <ENTRY+112>: ld 6, 80(1)
+- 0xE8E10058, // <ENTRY+116>: ld 7, 88(1)
+- 0xE9010060, // <ENTRY+120>: ld 8, 96(1)
+- 0xE9210068, // <ENTRY+124>: ld 9, 104(1)
+- 0xE9410070, // <ENTRY+128>: ld 10, 112(1)
+- 0xE9810080, // <ENTRY+132>: ld 12, 128(1)
+- 0x38210090, // <ENTRY+136>: addi 1, 1, 144
+- 0xE8010010, // <ENTRY+140>: ld 0, 16(1)
+- 0x7C0803A6, // <ENTRY+144>: mtlr 0
+- 0x4BFFFF84, // <ENTRY+148>: b 1050b
+- // 9000:
+- 0, 0, // <ENTRY+152>: .quad ENTRY_CURRENT_TABLE
+- 0, 0, // <ENTRY+160>: .quad ENTRY_CURRENT_TABLE_GET
+- 0, 0 // <ENTRY+168>: .quad <slot>*8
+-};
+-static const uint64_t TEMPLATE_OFFSET_CURRENT_TABLE = sizeof(code_templ) -
3*8;
+-static const uint64_t TEMPLATE_OFFSET_CURRENT_TABLE_GET =
sizeof(code_templ) - 2*8;
+-static const uint64_t TEMPLATE_OFFSET_SLOT = sizeof(code_templ) - 1*8;
+-
+-void
+-entry_patch(mapi_func entry, int slot)
+-{
+- char *code = (char *) entry;
+- *((uint64_t *) (code + TEMPLATE_OFFSET_CURRENT_TABLE)) = (uint64_t)
ENTRY_CURRENT_TABLE;
+- *((uint64_t *) (code + TEMPLATE_OFFSET_CURRENT_TABLE_GET)) = (uint64_t)
ENTRY_CURRENT_TABLE_GET;
+- *((uint64_t *) (code + TEMPLATE_OFFSET_SLOT)) = slot * sizeof(mapi_func);
+-}
+-
+-mapi_func
+-entry_generate(int slot)
+-{
+- char *code;
+- mapi_func entry;
+-
+- code = u_execmem_alloc(sizeof(code_templ));
+- if (!code)
+- return NULL;
+-
+- memcpy(code, code_templ, sizeof(code_templ));
+-
+- entry = (mapi_func) code;
+- entry_patch(entry, slot);
+-
+- return entry;
+-}
+-
+-#endif /* MAPI_MODE_BRIDGE */
+diff --git a/src/mapi/entry_x86-64_tls.h b/src/mapi/entry_x86-64_tls.h
+deleted file mode 100644
+index aebe4cf4a3f..00000000000
+--- a/src/mapi/entry_x86-64_tls.h
++++ /dev/null
+@@ -1,143 +0,0 @@
+-/*
+- * Mesa 3-D graphics library
+- *
+- * Copyright (C) 2010 LunarG Inc.
+- *
+- * Permission is hereby granted, free of charge, to any person obtaining a
+- * copy of this software and associated documentation files (the
"Software"),
+- * to deal in the Software without restriction, including without limitation
+- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+- * and/or sell copies of the Software, and to permit persons to whom the
+- * Software is furnished to do so, subject to the following conditions:
+- *
+- * The above copyright notice and this permission notice shall be included
+- * in all copies or substantial portions of the Software.
+- *
+- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR
+- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
+- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+- * DEALINGS IN THE SOFTWARE.
+- *
+- * Authors:
+- * Chia-I Wu <olv AT lunarg.com>
+- */
+-
+-#ifdef __CET__
+-#define ENDBR "endbr64\n\t"
+-#else
+-#define ENDBR
+-#endif
+-
+-#ifdef HAVE_FUNC_ATTRIBUTE_VISIBILITY
+-#define HIDDEN __attribute__((visibility("hidden")))
+-#else
+-#define HIDDEN
+-#endif
+-
+-__asm__(".text\n"
+- ".balign 32\n"
+- "x86_64_entry_start:");
+-
+-#define STUB_ASM_ENTRY(func) \
+- ".globl " func "\n" \
+- ".type " func ", @function\n" \
+- ".balign 32\n" \
+- func ":"
+-
+-#ifndef __ILP32__
+-
+-#define STUB_ASM_CODE(slot) \
+- ENDBR \
+- "movq " ENTRY_CURRENT_TABLE "@GOTTPOFF(%rip), %rax\n\t" \
+- "movq %fs:(%rax), %r11\n\t" \
+- "jmp *(8 * " slot ")(%r11)"
+-
+-#else
+-
+-#define STUB_ASM_CODE(slot) \
+- ENDBR \
+- "movq " ENTRY_CURRENT_TABLE "@GOTTPOFF(%rip), %rax\n\t" \
+- "movl %fs:(%rax), %r11d\n\t" \
+- "movl 4*" slot "(%r11d), %r11d\n\t" \
+- "jmp *%r11"
+-
+-#endif
+-
+-#define MAPI_TMP_STUB_ASM_GCC
+-#include "mapi_tmp.h"
+-
+-#ifndef MAPI_MODE_BRIDGE
+-
+-#include <string.h>
+-#include "u_execmem.h"
+-
+-void
+-entry_patch_public(void)
+-{
+-}
+-
+-extern char
+-x86_64_entry_start[] HIDDEN;
+-
+-mapi_func
+-entry_get_public(int slot)
+-{
+- return (mapi_func) (x86_64_entry_start + slot * 32);
+-}
+-
+-void
+-entry_patch(mapi_func entry, int slot)
+-{
+- char *code = (char *) entry;
+- int offset = 12;
+-#ifdef __ILP32__
+- offset = 13;
+-#endif
+- *((unsigned int *) (code + offset)) = slot * sizeof(mapi_func);
+-}
+-
+-mapi_func
+-entry_generate(int slot)
+-{
+- const char code_templ[] = {
+-#ifndef __ILP32__
+- /* movq %fs:0, %r11 */
+- 0x64, 0x4c, 0x8b, 0x1c, 0x25, 0x00, 0x00, 0x00, 0x00,
+- /* jmp *0x1234(%r11) */
+- 0x41, 0xff, 0xa3, 0x34, 0x12, 0x00, 0x00,
+-#else
+- /* movl %fs:0, %r11d */
+- 0x64, 0x44, 0x8b, 0x1c, 0x25, 0x00, 0x00, 0x00, 0x00,
+- /* movl 0x1234(%r11d), %r11d */
+- 0x67, 0x45, 0x8b, 0x9b, 0x34, 0x12, 0x00, 0x00,
+- /* jmp *%r11 */
+- 0x41, 0xff, 0xe3,
+-#endif
+- };
+- unsigned long long addr;
+- char *code;
+- mapi_func entry;
+-
+- __asm__("movq " ENTRY_CURRENT_TABLE "@GOTTPOFF(%%rip), %0"
+- : "=r" (addr));
+- if ((addr >> 32) != 0xffffffff)
+- return NULL;
+- addr &= 0xffffffff;
+-
+- code = u_execmem_alloc(sizeof(code_templ));
+- if (!code)
+- return NULL;
+-
+- memcpy(code, code_templ, sizeof(code_templ));
+-
+- *((unsigned int *) (code + 5)) = addr;
+- entry = (mapi_func) code;
+- entry_patch(entry, slot);
+-
+- return entry;
+-}
+-
+-#endif /* MAPI_MODE_BRIDGE */
+diff --git a/src/mapi/entry_x86_tls.h b/src/mapi/entry_x86_tls.h
+deleted file mode 100644
+index bdaa97374ba..00000000000
+--- a/src/mapi/entry_x86_tls.h
++++ /dev/null
+@@ -1,156 +0,0 @@
+-/*
+- * Mesa 3-D graphics library
+- *
+- * Copyright (C) 2010 LunarG Inc.
+- *
+- * Permission is hereby granted, free of charge, to any person obtaining a
+- * copy of this software and associated documentation files (the
"Software"),
+- * to deal in the Software without restriction, including without limitation
+- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+- * and/or sell copies of the Software, and to permit persons to whom the
+- * Software is furnished to do so, subject to the following conditions:
+- *
+- * The above copyright notice and this permission notice shall be included
+- * in all copies or substantial portions of the Software.
+- *
+- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR
+- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
+- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+- * DEALINGS IN THE SOFTWARE.
+- *
+- * Authors:
+- * Chia-I Wu <olv AT lunarg.com>
+- */
+-
+-#include <string.h>
+-
+-#ifdef __CET__
+-#define ENDBR "endbr32\n\t"
+-#else
+-#define ENDBR
+-#endif
+-
+-#ifdef HAVE_FUNC_ATTRIBUTE_VISIBILITY
+-#define HIDDEN __attribute__((visibility("hidden")))
+-#else
+-#define HIDDEN
+-#endif
+-
+-#define X86_ENTRY_SIZE 32
+-
+-__asm__(".text");
+-
+-__asm__("x86_current_tls:\n\t"
+- "call 1f\n"
+- "1:\n\t"
+- "popl %eax\n\t"
+- "addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %eax\n\t"
+- "movl " ENTRY_CURRENT_TABLE "@GOTNTPOFF(%eax), %eax\n\t"
+- "ret");
+-
+-#ifndef GLX_X86_READONLY_TEXT
+-__asm__(".section wtext, \"awx\", @progbits");
+-#endif /* GLX_X86_READONLY_TEXT */
+-
+-__asm__(".balign 16\n"
+- "x86_entry_start:");
+-
+-#define STUB_ASM_ENTRY(func) \
+- ".globl " func "\n" \
+- ".type " func ", @function\n" \
+- ".balign 16\n" \
+- func ":"
+-
+-#define STUB_ASM_CODE(slot) \
+- ENDBR \
+- "call 1f\n" \
+- "1:\n\t" \
+- "popl %eax\n\t" \
+- "addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %eax\n\t" \
+- "movl " ENTRY_CURRENT_TABLE "@GOTNTPOFF(%eax), %eax\n\t" \
+- "movl %gs:(%eax), %eax\n\t" \
+- "jmp *(4 * " slot ")(%eax)"
+-
+-#define MAPI_TMP_STUB_ASM_GCC
+-#include "mapi_tmp.h"
+-
+-#ifndef GLX_X86_READONLY_TEXT
+-__asm__(".balign 16\n"
+- "x86_entry_end:");
+-__asm__(".text");
+-#endif /* GLX_X86_READONLY_TEXT */
+-
+-#ifndef MAPI_MODE_BRIDGE
+-
+-#include "u_execmem.h"
+-
+-extern unsigned long
+-x86_current_tls();
+-
+-extern char x86_entry_start[] HIDDEN;
+-extern char x86_entry_end[] HIDDEN;
+-
+-static inline mapi_func
+-entry_generate_or_patch(int, char *, size_t);
+-
+-void
+-entry_patch_public(void)
+-{
+-#ifndef GLX_X86_READONLY_TEXT
+- char *entry;
+- int slot = 0;
+- for (entry = x86_entry_start; entry < x86_entry_end;
+- entry += X86_ENTRY_SIZE, ++slot)
+- entry_generate_or_patch(slot, entry, X86_ENTRY_SIZE);
+-#endif
+-}
+-
+-mapi_func
+-entry_get_public(int slot)
+-{
+- return (mapi_func) (x86_entry_start + slot * X86_ENTRY_SIZE);
+-}
+-
+-void
+-entry_patch(mapi_func entry, int slot)
+-{
+- char *code = (char *) entry;
+- *((unsigned long *) (code + 8)) = slot * sizeof(mapi_func);
+-}
+-
+-static inline mapi_func
+-entry_generate_or_patch(int slot, char *code, size_t size)
+-{
+- const char code_templ[16] = {
+- 0x65, 0xa1, 0x00, 0x00, 0x00, 0x00, /* movl %gs:0x0, %eax */
+- 0xff, 0xa0, 0x34, 0x12, 0x00, 0x00, /* jmp *0x1234(%eax) */
+- 0x90, 0x90, 0x90, 0x90 /* nop's */
+- };
+- mapi_func entry;
+-
+- if (code == NULL) {
+- size = sizeof(code_templ);
+- code = u_execmem_alloc(size);
+- }
+- if (!code || size < sizeof(code_templ))
+- return NULL;
+-
+- memcpy(code, code_templ, sizeof(code_templ));
+-
+- *((unsigned long *) (code + 2)) = x86_current_tls();
+- entry = (mapi_func) code;
+- entry_patch(entry, slot);
+-
+- return entry;
+-}
+-
+-mapi_func
+-entry_generate(int slot)
+-{
+- return entry_generate_or_patch(slot, NULL, 0);
+-}
+-
+-#endif /* MAPI_MODE_BRIDGE */
+diff --git a/src/mapi/entry_x86_tsd.h b/src/mapi/entry_x86_tsd.h
+deleted file mode 100644
+index f5d9c41253f..00000000000
+--- a/src/mapi/entry_x86_tsd.h
++++ /dev/null
+@@ -1,155 +0,0 @@
+-/*
+- * Mesa 3-D graphics library
+- *
+- * Copyright (C) 2010 LunarG Inc.
+- *
+- * Permission is hereby granted, free of charge, to any person obtaining a
+- * copy of this software and associated documentation files (the
"Software"),
+- * to deal in the Software without restriction, including without limitation
+- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+- * and/or sell copies of the Software, and to permit persons to whom the
+- * Software is furnished to do so, subject to the following conditions:
+- *
+- * The above copyright notice and this permission notice shall be included
+- * in all copies or substantial portions of the Software.
+- *
+- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR
+- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
+- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+- * DEALINGS IN THE SOFTWARE.
+- *
+- * Authors:
+- * Chia-I Wu <olv AT lunarg.com>
+- */
+-
+-#ifdef __CET__
+-#define ENDBR "endbr32\n\t"
+-#else
+-#define ENDBR
+-#endif
+-
+-#ifdef HAVE_FUNC_ATTRIBUTE_VISIBILITY
+-#define HIDDEN __attribute__((visibility("hidden")))
+-#else
+-#define HIDDEN
+-#endif
+-
+-#define X86_ENTRY_SIZE 64
+-
+-__asm__(".text\n");
+-
+-__asm__("x86_got:\n\t"
+- "call 1f\n"
+- "1:\n\t"
+- "popl %eax\n\t"
+- "addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %eax\n\t"
+- "ret");
+-
+-__asm__(".balign 32\n"
+- "x86_entry_start:");
+-
+-#define STUB_ASM_ENTRY(func) \
+- ".globl " func "\n" \
+- ".type " func ", @function\n" \
+- ".balign 32\n" \
+- func ":"
+-
+-#define LOC_BEGIN_SET_ECX
+-#define LOC_END_SET_ECX
+-#define LOC_END_JMP
+-
+-#define STUB_ASM_CODE(slot) \
+- ENDBR \
+- LOC_BEGIN_SET_ECX \
+- "call 1f\n\t" \
+- "1:\n\t" \
+- "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" \
+- "mov (%eax), %eax\n\t" \
+- "testl %eax, %eax\n\t" \
+- "jne 1f\n\t" \
+- "push %ebx\n\t" \
+- "movl %ecx, %ebx\n\t" \
+- "call " ENTRY_CURRENT_TABLE_GET "@PLT\n\t" \
+- "popl %ebx\n\t" \
+- "1:\n\t" \
+- "jmp *(4 * " slot ")(%eax)\n\t" \
+- LOC_END_JMP
+-
+-#define MAPI_TMP_STUB_ASM_GCC
+-#include "mapi_tmp.h"
+-
+-#ifndef MAPI_MODE_BRIDGE
+-
+-__asm__(".balign 32\n"
+- "x86_entry_end:");
+-
+-#undef LOC_BEGIN_SET_ECX
+-#undef LOC_END_SET_ECX
+-#undef LOC_END_JMP
+-#define LOC_BEGIN_SET_ECX "jmp set_ecx\n\t"
+-#define LOC_END_SET_ECX "set_ecx:movl $0x12345678,
%ecx\n\tloc_end_set_ecx:\n\t"
+-#define LOC_END_JMP "loc_end_jmp:"
+-
+-/* Any number big enough works. This is to make sure the final
+- * jmp is a long jmp */
+-__asm__(STUB_ASM_CODE("10000"));
+-
+-extern const char loc_end_set_ecx[] HIDDEN;
+-extern const char loc_end_jmp[] HIDDEN;
+-
+-#include <string.h>
+-#include "u_execmem.h"
+-
+-extern unsigned long
+-x86_got();
+-
+-extern const char x86_entry_start[] HIDDEN;
+-extern const char x86_entry_end[] HIDDEN;
+-
+-void
+-entry_patch_public(void)
+-{
+-}
+-
+-mapi_func
+-entry_get_public(int slot)
+-{
+- return (mapi_func) (x86_entry_start + slot * X86_ENTRY_SIZE);
+-}
+-
+-void
+-entry_patch(mapi_func entry, int slot)
+-{
+- char *code = (char *) entry;
+- int offset = loc_end_jmp - x86_entry_end - sizeof(unsigned long);
+- *((unsigned long *) (code + offset)) = slot * sizeof(mapi_func);
+-}
+-
+-mapi_func
+-entry_generate(int slot)
+-{
+- const char *code_templ = x86_entry_end;
+- char *code;
+- mapi_func entry;
+-
+- code = u_execmem_alloc(X86_ENTRY_SIZE);
+- if (!code)
+- return NULL;
+-
+- memcpy(code, code_templ, X86_ENTRY_SIZE);
+- entry = (mapi_func) code;
+- int ecx_value_off = loc_end_set_ecx - x86_entry_end - sizeof(unsigned
long);
+- *((unsigned long *) (code + ecx_value_off)) = x86_got();
+-
+- entry_patch(entry, slot);
+-
+- return entry;
+-}
+-
+-#endif /* MAPI_MODE_BRIDGE */
+diff --git a/src/mapi/glapi/glapi.h b/src/mapi/glapi/glapi.h
+index b11fe46107b..4d9584ffddf 100644
+--- a/src/mapi/glapi/glapi.h
++++ b/src/mapi/glapi/glapi.h
+@@ -78,11 +78,9 @@ struct _glapi_table;
+
+ #if defined (USE_ELF_TLS)
+
+-_GLAPI_EXPORT extern __thread struct _glapi_table * _glapi_tls_Dispatch
+- __attribute__((tls_model("initial-exec")));
++_GLAPI_EXPORT extern __thread struct _glapi_table * _glapi_tls_Dispatch;
+
+-_GLAPI_EXPORT extern __thread void * _glapi_tls_Context
+- __attribute__((tls_model("initial-exec")));
++_GLAPI_EXPORT extern __thread void * _glapi_tls_Context;
+
+ _GLAPI_EXPORT extern const struct _glapi_table *_glapi_Dispatch;
+ _GLAPI_EXPORT extern const void *_glapi_Context;
+diff --git a/src/mapi/glapi/meson.build b/src/mapi/glapi/meson.build
+index 1b8b685f207..c6bd24bc458 100644
+--- a/src/mapi/glapi/meson.build
++++ b/src/mapi/glapi/meson.build
+@@ -33,11 +33,6 @@ if with_shared_glapi
+ static_glapi_files += files(
+ '../entry.c',
+ '../entry.h',
+- '../entry_x86-64_tls.h',
+- '../entry_x86_tls.h',
+- '../entry_x86_tsd.h',
+- '../entry_ppc64le_tls.h',
+- '../entry_ppc64le_tsd.h',
+ '../mapi_tmp.h',
+ )
+ static_glapi_files += glapi_mapi_tmp_h
+diff --git a/src/mapi/u_current.c b/src/mapi/u_current.c
+index 0e133e0e419..6c50cd91709 100644
+--- a/src/mapi/u_current.c
++++ b/src/mapi/u_current.c
+@@ -100,11 +100,9 @@ extern void (*__glapi_noop_table[])(void);
+ #if defined(USE_ELF_TLS)
+
+ __thread struct _glapi_table *u_current_table
+- __attribute__((tls_model("initial-exec")))
+ = (struct _glapi_table *) table_noop_array;
+
+-__thread void *u_current_context
+- __attribute__((tls_model("initial-exec")));
++__thread void *u_current_context;
+
+ #else
+
+diff --git a/src/mapi/u_current.h b/src/mapi/u_current.h
+index e7faa878ed1..092e7fe0d7d 100644
+--- a/src/mapi/u_current.h
++++ b/src/mapi/u_current.h
+@@ -29,11 +29,9 @@ struct _glapi_table;
+
+ #ifdef USE_ELF_TLS
+
+-extern __thread struct _glapi_table *u_current_table
+- __attribute__((tls_model("initial-exec")));
++extern __thread struct _glapi_table *u_current_table;
+
+-extern __thread void *u_current_context
+- __attribute__((tls_model("initial-exec")));
++extern __thread void *u_current_context;
+
+ #else /* USE_ELF_TLS */
+
+--
+GitLab
+
- [SM-Commit] GIT changes to master grimoire by Ismael Luceno (b91bc4a785b8badd68b7c3e65dee1297363d596e), Ismael Luceno, 03/14/2021
Archive powered by MHonArc 2.6.24.