[Mesa-dev] [PATCH] egl: link libEGL against the dynamic version of libglapi

Eric Engestrom eric.engestrom at imgtec.com
Mon Dec 18 16:33:18 UTC 2017


From: Brendan King <Brendan.King at imgtec.com>

DRI modules store the address of the dispatch table in a TLS variable,
_glapi_tls_Dispatch.

Changes to the way libEGL is built in d884d8d0077c16d459b1 resulted in
it being statically linked against libglapi, and thus containing its own
copy of _glapi_tls_Dispatch. The result was that some applications would
fail to work (e.g. deqp-egl, which dynamically loads libEGL), due to the
DRI module storing the dispatch table address in one copy of
_glapi_tls_Dispatch, and libEGL obtaining the address from another copy
of the variable.

This applies to autotools builds with --enable-glx-tls (on by default),
and Meson builds (unconditional).

Fixes: d884d8d0077c16d459b1 "egl/dri: link directly to libglapi.so"
Signed-off-by: Brendan King <Brendan.King at imgtec.com>
Signed-off-by: Eric Engestrom <eric.engestrom at imgtec.com>
---
This issue was noticed in the PowerVR driver. It's unclear whether other
DRI drivers are affected as well.
---
 src/egl/Makefile.am | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/egl/Makefile.am b/src/egl/Makefile.am
index 66ba455..58db2c3 100644
--- a/src/egl/Makefile.am
+++ b/src/egl/Makefile.am
@@ -46,7 +46,6 @@ libEGL_common_la_SOURCES = \
 	$(LIBEGL_C_FILES)
 
 libEGL_common_la_LIBADD = \
-	$(top_builddir)/src/mapi/shared-glapi/libglapi.la \
 	$(top_builddir)/src/util/libmesautil.la \
 	$(EGL_LIB_DEPS)
 
@@ -171,7 +170,9 @@ libEGL_mesa_la_SOURCES = \
 	main/egldispatchstubs.c \
 	g_egldispatchstubs.c \
 	g_egldispatchstubs.h
-libEGL_mesa_la_LIBADD = libEGL_common.la
+libEGL_mesa_la_LIBADD = \
+	libEGL_common.la \
+	$(top_builddir)/src/mapi/shared-glapi/libglapi.la
 libEGL_mesa_la_LDFLAGS = \
 	-no-undefined \
 	-version-number 0 \
@@ -183,7 +184,9 @@ else # USE_LIBGLVND
 
 lib_LTLIBRARIES = libEGL.la
 libEGL_la_SOURCES =
-libEGL_la_LIBADD = libEGL_common.la
+libEGL_la_LIBADD = \
+	libEGL_common.la \
+	$(top_builddir)/src/mapi/shared-glapi/libglapi.la
 libEGL_la_LDFLAGS = \
 	-no-undefined \
 	-version-number 1:0 \
-- 
2.7.4



More information about the mesa-dev mailing list