Apple adopta el enlazador paralelo de DWARF en dsymutil tras resolver problemas de determinismo y cualificación

Fuentes: Adopting the Parallel DWARF linker in dsymutil
Imagen generada por IA con el prompt: Editorial illustration of glowing parallel threads merging into a single structured tree of nodes, dark blue background with cyan accents, technical and abstract style, no text or logos.
Imagen generada con IA

El equipo de desarrollo de Apple está ultimando la adopción del enlazador paralelo de DWARF dentro de dsymutil, la herramienta que agrupa la información de depuración de las plataformas Apple en un bundle autónomo. El objetivo es reducir los tiempos de procesado en proyectos C++ de gran tamaño, donde la información de depuración puede alcanzar cientos de gigabytes.

El cambio se venía gestando desde hace años: ya existía un enlazador paralelo en LLVM, pero su salida no era determinista y generaba DWARF no binariamente idéntico al del enlazador clásico, lo que impedía usar las técnicas de cualificación habituales (comparación byte a byte mediante diff). Para superar esa barrera, el equipo construyó un comparador semántico de DWARF, capaz de detectar diferencias estructurales entre los árboles de información de depuración sin depender de offsets ni del orden de los nodos.

Otro obstáculo clave era la falta de determinismo en la selección de tipos canónicos durante la deduplicación ODR. La solución asigna a cada unidad de compilación una prioridad según su posición en el orden de enlace, de modo que el resultado es idéntico independientemente de la planificación de hilos. La cualificación completa incluye, además, pasar la suite de tests de dsymutil y de LLDB con el nuevo enlazador.

En términos de rendimiento, procesar clang pasa de unos 3 minutos con el enlazador clásico a aproximadamente 40 segundos con el paralelo, una ganancia que multiplica por cuatro la velocidad. El trabajo, todavía en curso, está documentado en el repositorio llvm-project.