什么是NT_GNU_BUILD_ID用于?

时间:2015-04-24 20:21:20

标签: linux go gnu

我正在阅读golang ld的帮助指南,其中一个选项是

-B value
    Add a NT_GNU_BUILD_ID note when using ELF.  The value
    should start with 0x and be an even number of hex digits.

有谁知道为什么会使用那面旗帜?

搜索NT_GNU_BUILD_ID并未提供任何有见地的答案。

1 个答案:

答案 0 :(得分:4)

这来自massive conversion from C to Go of cmd/new5l(2015年2月),翻译自src/cmd/ld/pobj.c

该信息是在commit 7d507dc6e(2013年12月,针对Go 1.3)中引入的,这是对新链接器结构的准备

412 Precondition Failedmentioned here作为唯一的构建ID位串 你可以在Fedora release build

中看到它的使用
  

要在已剥离的对象及其NT_GNU_BUILD_ID文件中嵌入ID,我选择使用ELF注释部分。
  当.debug类型为strip时,SHT_NOTE等人可以将该部分保留在两个文件中。

     

新部分标准地称为.note.gnu.build-id,但名称不是规范性的,该部分可以与其他SHT_NOTE部分合并。
  ELF注释标题为构建ID注释提供名称“GNU”和类型3(NT_GNU_BUILD_ID),其中链接对象(或ET_REL文件中只能有一个.ko风格)。

你可以看到它introduced in this patch in 2007

  

此修补程序为ld为ELF目标--build-id添加了一个新选项   它生成一个包含“unique build ID”位的合成ELF音符部分   由ld选择。

     

这是以ld选项完成的,以便高效且实现万无一失   每个编译(对比一些脚本将生成的对象添加到链接中)   它按照它的方式完成,因此它不能再使用,也不能精确使用   输出的最终ELF位有助于选择唯一ID。

     

这是确保ID生成的确定性样式的最佳方法   (即加密散列)将始终产生相同的重复结果   精确复制。