Files
hammer/recipes
sergioandClaude Opus 5 e2017dcfdc 🎯 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>
2026-08-06 11:27:35 -04:00
..