egl: link libEGL against the dynamic version of libglapi
authorBrendan King <Brendan.King@imgtec.com>
Mon, 18 Dec 2017 16:33:18 +0000 (16:33 +0000)
committerEmil Velikov <emil.l.velikov@gmail.com>
Wed, 27 Dec 2017 22:29:20 +0000 (22:29 +0000)
Note: the following happens only when using slibtool.
Since this is a very serious breakage, we will keep the workaround until
a better solution is available.

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.

Fixes: d884d8d0077c16d459b1 "egl/dri: link directly to libglapi.so"
Signed-off-by: Brendan King <Brendan.King@imgtec.com>
Signed-off-by: Eric Engestrom <eric.engestrom@imgtec.com>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
src/egl/Makefile.am

index eaec4ff..98d0420 100644 (file)
@@ -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)
 
@@ -165,7 +164,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 \
@@ -177,7 +178,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 \