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

Brendan King brendan.king at imgtec.com
Tue Dec 19 08:46:37 UTC 2017



On 18/12/17 16:42, Emil Velikov wrote:
> On 18 December 2017 at 16:33, Eric Engestrom <eric.engestrom at imgtec.com> wrote:
>> 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.
> Are you sure any of the extra patches isn't causing the issue?
> Just checked the binary and the shared link is there.
We use slibtool, as libtool no longer works for us (we cross build Mesa, 
and libtool fails when trying to re-link libraries). It may be that this 
patch fixes an slibtool specific issue. Although slibtool produces .la 
files, it doesn't use them itself.

We carry another patch that fixes an slibtool issue. We found it wasn't 
possible to build Mesa with Wayland support using slibtool; the link of 
libEGL fails with multiple symbol definition errors.
>
>> ---
>>   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
> The exact same object is moved from libEGL_common.la to the parent
> (final) shared library.
> There is no (obvious) reorder, thus the patch in itself should be a noop.
>
> -Emil



More information about the mesa-dev mailing list