From 7285fe55a355663277a798a47d78a3906d66e4a4 Mon Sep 17 00:00:00 2001 From: Tautvis Date: Wed, 1 Jul 2026 23:12:46 +0300 Subject: [PATCH 1/2] Xext/glx: exports symbols to make extension shared In a987fc7c360fa1c59efa0dde61316d84c171801b commit glx library is statically linked which makes all glx library variables dublicated in glx.so and glamoregl.so files and leads 'split-brain' problem where same symbols exist in different depending on context (this evident when it called using functions with static attribute). This patch exports neccesary glx symbols for glamor library. Signed-off-by: Tautvis (cherry picked from commit 9b74a3a7f9a2e5838c2eb75d23aa0cf24f95b135) --- Xext/glx/extension_string.h | 9 +++++++++ Xext/glx/glxscreens.h | 7 +++++-- Xext/glx/glxserver.h | 4 +++- Xext/glx/glxutil.h | 2 ++ include/glx_extinit.h | 2 ++ 5 files changed, 21 insertions(+), 3 deletions(-) diff --git a/Xext/glx/extension_string.h b/Xext/glx/extension_string.h index 5c8f981d94..af846df6f5 100644 --- a/Xext/glx/extension_string.h +++ b/Xext/glx/extension_string.h @@ -34,6 +34,8 @@ #ifndef GLX_EXTENSION_STRING_H #define GLX_EXTENSION_STRING_H +#include + enum { /* GLX_ARB_get_proc_address is implemented on the client. */ ARB_context_flush_control_bit = 0, @@ -74,9 +76,16 @@ enum { #define __GLX_EXT_BYTES ((__NUM_GLX_EXTS + 7) / 8) +/* exported for glamor */ +_X_EXPORT extern int __glXGetExtensionString(const unsigned char *enable_bits, char *buffer); +/* exported for glamor */ +_X_EXPORT extern void __glXEnableExtension(unsigned char *enable_bits, const char *ext); + +/* exported for glamor */ +_X_EXPORT extern void __glXInitExtensionEnableBits(unsigned char *enable_bits); #endif /* GLX_EXTENSION_STRING_H */ diff --git a/Xext/glx/glxscreens.h b/Xext/glx/glxscreens.h index a5a98ec2f9..25db0c46b1 100644 --- a/Xext/glx/glxscreens.h +++ b/Xext/glx/glxscreens.h @@ -146,7 +146,10 @@ struct __GLXscreen { unsigned char glx_enable_bits[__GLX_EXT_BYTES]; }; -void __glXScreenInit(__GLXscreen * screen, ScreenPtr pScreen); -void __glXScreenDestroy(__GLXscreen * screen); +/* exported for glamor */ +_X_EXPORT void __glXScreenInit(__GLXscreen * screen, ScreenPtr pScreen); + +/* exported for glamor */ +_X_EXPORT void __glXScreenDestroy(__GLXscreen * screen); #endif /* !__GLX_screens_h__ */ diff --git a/Xext/glx/glxserver.h b/Xext/glx/glxserver.h index b7862f6762..c1db2b70bc 100644 --- a/Xext/glx/glxserver.h +++ b/Xext/glx/glxserver.h @@ -93,7 +93,9 @@ void glxResumeClients(void); typedef void (*glx_func_ptr)(void); typedef glx_func_ptr (*glx_gpa_proc)(const char *); -void __glXsetGetProcAddress(glx_gpa_proc get_proc_address); + +/* exported for glamor */ +_X_EXPORT void __glXsetGetProcAddress(glx_gpa_proc get_proc_address); void *__glGetProcAddress(const char *); void diff --git a/Xext/glx/glxutil.h b/Xext/glx/glxutil.h index 55f3a82b3b..32b4e7f9c1 100644 --- a/Xext/glx/glxutil.h +++ b/Xext/glx/glxutil.h @@ -33,6 +33,8 @@ #include "Xext/glx/glxserver.h" +/* exported for glamor */ +_X_EXPORT extern GLboolean __glXDrawableInit(__GLXdrawable * drawable, __GLXscreen * screen, DrawablePtr pDraw, int type, XID drawID, diff --git a/include/glx_extinit.h b/include/glx_extinit.h index 42895e1dcd..65e3b20637 100644 --- a/include/glx_extinit.h +++ b/include/glx_extinit.h @@ -41,6 +41,8 @@ struct __GLXprovider { }; extern __GLXprovider __glXDRISWRastProvider; +/* exported for glamor */ +_X_EXPORT void GlxPushProvider(__GLXprovider * provider); void xorgGlxCreateVendor(void); From 601ac0dd9dde84bcf1a1fe36329e8fd9543e641f Mon Sep 17 00:00:00 2001 From: Tautvis Date: Wed, 1 Jul 2026 23:17:04 +0300 Subject: [PATCH 2/2] hw/xfree86/glamor_egl: do not link staticaly glx library Commit a987fc7c360fa1c59efa0dde61316d84c171801b linked glx library statically, which leaded dublicated glx extension symbols in glx.so and glamoregl.so libraries. This commit do not link glx directly. Signed-off-by: Tautvis (cherry picked from commit 6c7573175290ac0a03016d822104b67e1e0bac70) --- hw/xfree86/glamor_egl/meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/xfree86/glamor_egl/meson.build b/hw/xfree86/glamor_egl/meson.build index da0a348961..4388a941e3 100644 --- a/hw/xfree86/glamor_egl/meson.build +++ b/hw/xfree86/glamor_egl/meson.build @@ -15,7 +15,7 @@ shared_module( libdrm_dep, gbm_dep, ], - link_with: [glamor, libxserver_glx], + link_with: [glamor ], install: true, install_dir: module_abi_dir,