/usr/lib/.build-id
contém os principais arquivos build-id para pacotes instalados. Antes do Fedora 27, eles viviam ao lado dos arquivos de depuração em /usr/lib/debug
e eram enviados apenas em RPMs de depuração. No Fedora 27, uma alteração foi introduzida para permitir a instalação paralela de vários pacotes de informações de depuração. Parte dessa alteração envolve o envio dos principais arquivos build-id no pacote correspondente, para garantir que eles correspondam aos binários instalados.
Os pacotes de informações de depuração são usados em muitas distribuições para fornecer uma maneira dos usuários instalarem informações de depuração quando necessário, sem inchar os binários para todos. Quando um programa ou biblioteca é construído e vinculado, ele pode ser construído com informações de depuração, que os depuradores podem usar para mapear locais no binário com locais em seu código-fonte; mas esta informação ocupa muito espaço. Então, as informações de depuração geralmente são retiradas dos binários antes de serem empacotadas. Nos últimos anos, strip
e objcopy
foi aprimorado para que as informações de depuração possam ser extraídas e armazenadas separadamente - é assim que os pacotes de informações de depuração são criados. Tudo o que é necessário é uma maneira de garantir que um binário e suas informações de depuração correspondam, e é aí que entram os IDs de construção - eles são identificadores exclusivos calculados por ld
(procure por --build-id
there) sobre as porções significativas de um binário. “Main build-id files” são links simbólicos de um id de build para o arquivo binário ou de depuração correspondente; eles permitem que mapeamentos bidirecionais sejam implementados, de modo que os dumps principais possam ser depurados (há um link dos binários para seus IDs de construção nos próprios binários, na seção .gnu_debuglink
). Você encontrará uma explicação detalhada do raciocínio por trás de tudo isso na descrição do recurso de ID do build do Fedora .