[Mesa-dev] [PATCH] glx: Don't uselessly dlopen libGL within libGL

Adam Jackson ajax at redhat.com
Fri May 30 10:05:43 PDT 2014


On Thu, 2014-05-29 at 15:10 -0700, Ian Romanick wrote:

> That code was originally added by:
> 
> commit 061a3fe34051327fba418cc99599ecff0016ee15
> Author: Michel Dänzer <michel at daenzer.net>
> Date:   Mon Aug 14 15:53:37 2006 +0000
> 
>     Bug #7169: Attempt to make libGL symbols visible to drivers.
>     
>     Some applications end up dlopening libGL without RTLD_GLOBAL, so the libGL
>     symbols referenced by the driver can't be unresolved when libGL dlopens it.
>     This attempts to make the libGL symbols visible to the driver by dlopening
>     libGL (again) with RTLD_GLOBAL before dlopening the driver and dlclosing
>     the obtained handle afterwards.
> 
> So... I think that's not how dlopen always works.  For other reasons, I
> don't think the DRI drivers directly access symbols from libGL, so this
> may be safe anyway.  I'd want to see it tested, though.

Tested this with a cut-down version of glxdemo.c:

http://people.freedesktop.org/~ajax/dlopen-glxdemo.c

And with the dlopen of libGL removed indeed it doesn't DTRT:

dmt:~% ./glxdemo 
libGL error: dlopen /usr/lib64/dri/i965_dri.so failed (/usr/lib64/dri/i965_dri.so: undefined symbol: _glapi_tls_Dispatch)
libGL error: unable to load driver: i965_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: i965

Which I guess makes sense.  The RTLD_LOCAL open of libGL means neither
libGL nor its dependencies are made visible to other loaded objects, and
libGL happens to be the only thing linked against libglapi.  I think
that's just a bug, the drivers should link against glapi as well.

However just linking the drivers against glapi wouldn't necessarily mean
we could eliminate the self-dlopen from libGL, because it would break
the case of app doing dlopen(new libGL, LAZY) with an old driver.  Is
this a thing we actually care about?  Can we not?  In RHEL6 we have a
package of Mesa 7.11 that just emits the DRI1 drivers for compatibility
since we've rebased our real Mesa, but I'd be entirely happy to update
mesa-dri1-drivers to be properly linked if we pulled this change into a
future RHEL6 update.

- ajax



More information about the mesa-dev mailing list