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

Emil Velikov emil.l.velikov at gmail.com
Mon Dec 18 16:42:31 UTC 2017


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.

> ---
>  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