Oracle® Solaris 11.2 链接程序和库指南

退出打印视图

更新时间: 2014 年 7 月
 
 

节合并

SHF_MERGE 节标志可用于标记可重定位目标文件中的 SHT_PROGBITS 节。请参见Table 12–8。此标志表示该节可以与其他目标文件中的兼容节合并。这类合并有可能减小通过这些可重定位目标文件生成的任何可执行文件或共享目标文件的大小。减小文件大小还有助于改善生成的目标文件的运行时性能。

带有 SHF_MERGE 标志的节表示该节遵循以下特征:

  • 该节为只读。包含该节的程序在运行时绝对不可能修改该节的数据。

  • 从单独的重定位记录可以访问该节中的每一项。生成访问这些项的代码时,程序代码无法针对该节中的项的相对位置做出任何假设。

  • 如果该节还设置了 SHF_STRINGS 标志,那么该节只能包含以空字符结尾的字符串。空字符只能作为字符串结束符,而不能出现在任何字符串的中间位置。

SHF_MERGE 是一个可选标志,用于表示进行优化的可能性。允许链接编辑器执行优化,或忽略优化。任一情况下,链接编辑器都会创建一个有效的输出目标文件。当前,链接编辑器仅对包含使用 SHF_STRINGS 标志进行标记的字符串数据的节执行节合并。

同时设置了 SHF_STRINGS 节标志和 SHF_MERGE 标志时,该节中的字符串就可以与其他兼容节中的字符串合并。链接编辑器使用与用于压缩 SHT_STRTAB 字符串表(.strtab.dynstr)的字符串压缩算法相同的字符串压缩算法来合并此类节。

  • 重复字符串会缩减为一个。

  • 会消除尾部字符串。例如,如果输入节包含字符串 "bigdog" 和 "dog",那么将消除较小的 "dog",并使用较大的字符串的尾部表示较小的字符串。

目前,链接编辑器仅对由没有特殊对齐限制的单字节大小字符组成的字符串执行字符串合并。具体来说,必须具备以下节特征。

  • sh_entsize 必须为 01。不支持包含宽字符的节。

  • 仅合并字节对齐的节,其中 sh_addralign 为 01


注 -  可以使用链接编辑器的 –z nocompstrtab 选项抑制任何字符串表压缩。