tawasuyu

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 1574Shell 204Rust 111Markdown 993763 Definiciones

🎯 mesa: sin `build-id`, iris desreferenciaba NULL y mataba al compositor en silencio

Causa raíz del escritorio COSMIC que no arrancaba en metal, medida en el OptiPlex 3060
(UHD 630). cosmic-comp moría sin panic y con RUST_BACKTRACE=full; el dmesg tenía la
respuesta que ningún log de usuario podía dar:

    cosmic-comp[1266]: segfault at 10 ip ... error 4 in iris_dri.so[9626c0,...]

El offset resuelve a `_mesa_sha1_format` (bytes del desensamblado idénticos al `Code:`
del kernel), y su llamador `iris_disk_cache_init` es tres llamadas seguidas sin un solo
salto condicional entre medio:

    build_id_find_nhdr_for_addr → NULL      (ninguna .so de mesa traía nota)
    build_id_data               → NULL+0x10 (offsetof del campo)
    _mesa_sha1_format           → lee 0x10  ⇒ SIGSEGV

El `assert(note && ...)` que cazaba esto lo borra -Db_ndebug=true.

Tres decisiones razonables por separado que juntas dan un cuelgue mudo: meson no pide
build-id, lld no lo pone solo (37 de 40 .so del corpus SÍ lo traen — era exclusivo de
mesa) y el assert no existe en release. No lo salva MESA_SHADER_CACHE_DISABLE: la
desreferencia va antes de consultar si la caché está habilitada. Y no se ve en QEMU,
donde el userland es swrast/llvmpipe y esta ruta es de iris.

Fix: -Dc_link_args/-Dcpp_link_args con -Wl,--build-id=sha1.
Re-sella mesa: b3:6d443d9f… → b3:c3c18cde…

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

e2017dcfdc9405fb9e02d0c92247e487d9ca78ec · por sergio · (hace 2 meses) · padre 47d8848e3 · ver el árbol en este commit

Delta semántico

Ninguna definición cambió: el cambio es de texto, documentación o datos.

1 archivos · +17 −1

diff --git a/recipes/mesa.toml b/recipes/mesa.toml
index 621deeaa..c4e0eccc 100644
--- a/recipes/mesa.toml
+++ b/recipes/mesa.toml
@@ -24,6 +24,22 @@
 # El target DRI emite el version-script como token separado (`-Wl,--version-script dri.sym`), que
 # zig cc REORDENA (separa el archivo posicional de los args -Wl) ⇒ «cannot find version script
 # --end-group» al ligar libgallium_dri.so. Lo arregla mesa-version-script-comma.patch (forma coma).
+#
+# ⚠️ `--build-id` NO ES COSMÉTICO EN IRIS: ES LA DIFERENCIA ENTRE ARRANCAR Y NO ARRANCAR.
+# Medido en metal (OptiPlex 3060, UHD 630, 2026-08-06): cosmic-comp moría en silencio, sin panic y
+# con RUST_BACKTRACE=full, y el dmesg decía
+#     cosmic-comp[1266]: segfault at 10 ip ... error 4 in iris_dri.so[9626c0,...]
+# El offset resuelve a `_mesa_sha1_format`, y su llamador es literalmente esto, sin un solo salto
+# condicional entre medio:
+#     call build_id_find_nhdr_for_addr   → NULL (nuestras .so no traían ninguna nota)
+#     call build_id_data                 → NULL + offsetof(build_id) = 0x10
+#     call _mesa_sha1_format             → lee la dirección 0x10 ⇒ SIGSEGV
+# `iris_disk_cache_init` protegía eso con `assert(note && ...)`, que -Db_ndebug=true BORRA. O sea:
+# 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.
 name    = "mesa"
 version = "24.0.9"
 
@@ -41,7 +57,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 -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=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"
 compile   = "PYTHONPATH=/usr/lib/python3.12/site-packages ninja -C output"
 install   = "DESTDIR=/out ninja -C output install"