From a27f2d991b1723c3349623401ce3c8f26dcdb28b Mon Sep 17 00:00:00 2001 From: Kyle Brenneman Date: Mon, 28 Sep 2015 11:59:21 -0600 Subject: [PATCH] glx: Fix build errors with --enable-mangling (v2) Rearranged the GLX_ALIAS macro in glextensions.h so that it will pick up the renames from glx_mangle.h. Fixed the alias attribute for glXGetProcAddress when USE_MGL_NAMESPACE is defined. v2: Add a comment clarifying why GLX_ALIAS needs two macros. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=55552 Signed-off-by: Kyle Brenneman Cc: "10.6 11.0" Reviewed-by: Emil Velikov --- src/glx/glxcmds.c | 4 ++++ src/glx/glxextensions.h | 10 ++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/glx/glxcmds.c b/src/glx/glxcmds.c index 26ff804..93e8db5 100644 --- a/src/glx/glxcmds.c +++ b/src/glx/glxcmds.c @@ -2646,7 +2646,11 @@ _X_EXPORT void (*glXGetProcAddressARB(const GLubyte * procName)) (void) */ _X_EXPORT void (*glXGetProcAddress(const GLubyte * procName)) (void) #if defined(__GNUC__) && !defined(GLX_ALIAS_UNSUPPORTED) +# if defined(USE_MGL_NAMESPACE) + __attribute__ ((alias("mglXGetProcAddressARB"))); +# else __attribute__ ((alias("glXGetProcAddressARB"))); +# endif #else { return glXGetProcAddressARB(procName); diff --git a/src/glx/glxextensions.h b/src/glx/glxextensions.h index 90b173f..3a9bc82 100644 --- a/src/glx/glxextensions.h +++ b/src/glx/glxextensions.h @@ -281,11 +281,17 @@ typedef void (*PFNGLXDISABLEEXTENSIONPROC) (const char *name); # define GLX_ALIAS_VOID(real_func, proto_args, args, aliased_func) #else # if defined(__GNUC__) && !defined(GLX_ALIAS_UNSUPPORTED) -# define GLX_ALIAS(return_type, real_func, proto_args, args, aliased_func) \ +/* GLX_ALIAS and GLX_ALIAS_VOID both expand to the macro GLX_ALIAS2. Using the + * extra expansion means that the name mangling macros in glx_mangle.h will + * apply before stringification, so the alias attribute will have a string like + * "mglXFoo" instead of "glXFoo". */ +# define GLX_ALIAS2(return_type, real_func, proto_args, args, aliased_func) \ return_type real_func proto_args \ __attribute__ ((alias( # aliased_func ) )); +# define GLX_ALIAS(return_type, real_func, proto_args, args, aliased_func) \ + GLX_ALIAS2(return_type, real_func, proto_args, args, aliased_func) # define GLX_ALIAS_VOID(real_func, proto_args, args, aliased_func) \ - GLX_ALIAS(void, real_func, proto_args, args, aliased_func) + GLX_ALIAS2(void, real_func, proto_args, args, aliased_func) # else # define GLX_ALIAS(return_type, real_func, proto_args, args, aliased_func) \ return_type real_func proto_args \ -- 2.7.4