From 99efe4998b1c072f425053640c4e0ccddb62d58d Mon Sep 17 00:00:00 2001 From: sergio Date: Thu, 6 Aug 2026 12:01:52 -0400 Subject: [PATCH] =?UTF-8?q?=F0=9F=96=A5=20mesa:=20`-Dshader-cache=3Ddisabl?= =?UTF-8?q?ed`=20=E2=80=94=20el=20escritorio=20COSMIC=20ARRANCA=20en=20met?= =?UTF-8?q?al?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cierra el segfault mudo de iris. El intento anterior (`-Wl,--build-id=sha1`) NO prendió: meson lo registra pero `zig cc` 0.13 lo ignora en silencio — el configure lo dice («supports link arguments -Wl,--build-id=sha1: NO») y la .so sale sin ninguna nota. zig 0.16 sí la emite (verificado a mano), pero `zig_version` está pineada a 0.13.0 como escotilla contra la regresión de zig 0.14: subirlo cambia un muro por otro. Tampoco había escape por entorno, y esta vez medido sobre el fuente en vez de deducido: el retorno temprano es `if (INTEL_DEBUG(DEBUG_DISK_CACHE_DISABLE_MASK))` y en 24.0.9 esa máscara está definida como 0 ⇒ el `if` no dispara nunca. Por eso el desensamblado no tenía ni un salto condicional: el compilador lo dobló. `-Dshader-cache=disabled` lo garantiza el preprocesador — el cuerpo entero de `iris_disk_cache_init` vive en un `#ifdef ENABLE_SHADER_CACHE`. Verificado en el artefacto: la función es ahora un único `ret`. MEDIDO EN METAL (OptiPlex 3060 / UHD 630), bibliotecas desplegadas por SSH sobre la máquina viva, sin re-quemar el USB: sesión COSMIC completa arriba — cosmic-comp, panel con applets, bg, launcher, term, toplevel, workspaces — y CERO segfaults nuevos. Confirmado en pantalla por el usuario. Costo aceptado: sin caché en disco los shaders se recompilan en cada arranque. Re-sella mesa: b3:6d443d9f… → b3:f43c41d1… Co-Authored-By: Claude Opus 5 (1M context) --- recipes/mesa.toml | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/recipes/mesa.toml b/recipes/mesa.toml index c4e0eccc..20fb5bdd 100644 --- a/recipes/mesa.toml +++ b/recipes/mesa.toml @@ -38,8 +38,22 @@ # meson no pide build-id, lld no lo pone por su cuenta (37 de 40 .so del corpus SÍ lo traen — esto # era exclusivo de mesa), y el assert que lo habría cazado no existe en release. Tres decisiones # razonables por separado que juntas dan un cuelgue mudo del escritorio. -# NO se arregla con MESA_SHADER_CACHE_DISABLE: la desreferencia pasa ANTES de consultar si la caché -# está habilitada. Tampoco se ve en QEMU, donde el userland es swrast/llvmpipe y esta ruta es de iris. +# NO se arregla con MESA_SHADER_CACHE_DISABLE ni con INTEL_DEBUG: en 24.0.9 el retorno temprano es +# `if (INTEL_DEBUG(DEBUG_DISK_CACHE_DISABLE_MASK))` y esa máscara está definida como **0** ⇒ el `if` +# nunca dispara (por eso el desensamblado no tiene ni un salto condicional). No hay escape por +# entorno. Tampoco se ve en QEMU: allí el userland es swrast/llvmpipe y esta ruta es de iris. +# +# ARREGLO: `-Dshader-cache=disabled`. El cuerpo entero de `iris_disk_cache_init` vive dentro de un +# `#ifdef ENABLE_SHADER_CACHE` ⇒ desaparece la desreferencia, garantizado por el preprocesador. +# El arreglo BUENO sería el `-Wl,--build-id=sha1` que queda abajo, que conservaría la caché de +# shaders en disco. Se deja puesto pero HOY NO HACE NADA: `zig cc` 0.13 lo ignora en silencio +# («Compiler for C supports link arguments -Wl,--build-id=sha1: NO» en el configure, y la .so sale +# sin ninguna nota). zig 0.16 sí lo emite — verificado a mano — pero `zig_version` está pineada a +# 0.13.0 por la regresión de zig 0.14, así que subirlo cambiaría un muro por otro. Cuando esa +# escotilla se cierre: quitar `-Dshader-cache=disabled`, reconstruir, y COMPROBAR con +# `readelf -n .../iris_dri.so` que la nota está — sin nota, vuelve el segfault mudo. +# COSTO ACEPTADO: sin caché en disco, los shaders se recompilan en cada arranque (arranque de apps +# más lento). Es estrictamente mejor que no arrancar. name = "mesa" version = "24.0.9" @@ -57,7 +71,7 @@ link = "dynamic" zig_version = "0.13.0" [build.phases] -configure = "PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output --prefix=/usr --buildtype=release -Db_ndebug=true -Dc_link_args=-Wl,--build-id=sha1 -Dcpp_link_args=-Wl,--build-id=sha1 -Dgallium-drivers=iris -Dvulkan-drivers= -Dllvm=disabled -Dintel-clc=disabled -Dplatforms=wayland -Dglx=disabled -Dgbm=enabled -Degl=enabled -Dopengl=true -Dgles1=disabled -Dgles2=enabled -Dexpat=enabled -Dzstd=enabled -Dshader-cache=enabled -Dxmlconfig=enabled -Dglvnd=false -Dgallium-rusticl=false -Dgallium-va=disabled -Dgallium-extra-hud=false -Dvideo-codecs= -Dtools= -Dbuild-tests=false -Dvalgrind=disabled -Dlibunwind=disabled" +configure = "PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output --prefix=/usr --buildtype=release -Db_ndebug=true -Dc_link_args=-Wl,--build-id=sha1 -Dcpp_link_args=-Wl,--build-id=sha1 -Dgallium-drivers=iris -Dvulkan-drivers= -Dllvm=disabled -Dintel-clc=disabled -Dplatforms=wayland -Dglx=disabled -Dgbm=enabled -Degl=enabled -Dopengl=true -Dgles1=disabled -Dgles2=enabled -Dexpat=enabled -Dzstd=enabled -Dshader-cache=disabled -Dxmlconfig=enabled -Dglvnd=false -Dgallium-rusticl=false -Dgallium-va=disabled -Dgallium-extra-hud=false -Dvideo-codecs= -Dtools= -Dbuild-tests=false -Dvalgrind=disabled -Dlibunwind=disabled" compile = "PYTHONPATH=/usr/lib/python3.12/site-packages ninja -C output" install = "DESTDIR=/out ninja -C output install"