Xorg, AIGLX and gallium3d drivers
Peter Hjalmarsson
xake at rymdraket.net
Mon Sep 27 04:29:23 PDT 2010
Hi all.
The gallium3d drivers (at least nouveau and radeon) seems to utilize
_glapi_get_proc_address.
On an ordinary system Xorg will not care about this symbol during start
of AIGLX due to lazy bindings, and when you run an application yourself
this will resolv the symbol back to mesa and mesa/src/mesa/glapi/
glapi_getproc.c where this symbol is marked PUBLIC.
However if your mesa is linked with -z,now or you try to start Xorg with
LD_BIND_NOW=1 then Xorg will fail to resolv _glapi_get_proc_address and
be unable to load *_dri.so.
This seems to be because xserver/glx/glapi.c does not mark the symbol as
PUBLIC.
Observe that this seems so long only to be a problem with mesa gallium3d
drivers, mesa classic drivers seems to works as they should.
Now to my questions:
1. Are my conclusions correct?
2. If AIGLX somehow is to utilize a function depending on
_glapi_get_proc_address, will this function fail or will it be able to
look the symbol up with the help of libGL.so (i.e. is this broken for
other use-cases then -z,now/LD_BIND_OW)?
3. Is this patch against xserver correct (can confirm that it fixes/
workarounds the issue here)?
diff --git a/glx/glapi.c b/glx/glapi.c
index d6a568e..df65970 100644
--- a/glx/glapi.c
+++ b/glx/glapi.c
@@ -892,7 +892,7 @@ _glapi_get_proc_offset(const char *funcName)
* in the name of static functions, try generating a new API entrypoint
on
* the fly with assembly language.
*/
-_glapi_proc
+PUBLIC _glapi_proc
_glapi_get_proc_address(const char *funcName)
{
struct _glapi_function * entry;
More information about the xorg
mailing list