在ELF目标文件中,.text.unlikely是什么意思?

3
在我的objdump -t输出中,我看到了以下两行:
00000000000004d2 l     F .text.unlikely 00000000000000ec function-signature-goes-here [clone .cold.427]

并且

00000000000018e0 g     F .text  0000000000000690 function-signature-goes-here

我知道l代表局部变量,g代表全局变量。我还知道.text是一个节或对象文件中的一种节类型,包含编译后的程序指令。但是.text.unlikely是什么?假设它是与.text不同的节(或节类型)-有什么区别?
1个回答

6
在我的GCC v5.4.0手册中,我找到了以下开关:
-freorder-functions,它的解释如下:

重新排列目标文件中的函数以提高代码局部性。这是通过使用特殊的子节".text.hot"来实现的,用于保存最常执行的函数,".text.unlikely"则保存不太可能执行的函数。重排序由链接器完成,因此目标文件格式必须支持命名节,并且链接器必须以合理的方式放置它们。

此选项需要可用的配置文件反馈才能生效。有关详细信息,请参见-fprofile-arcs。

在-O2、-O3、-Os级别下启用。

看起来编译器针对该二进制文件使用了优化标志或该开关,并将函数组织在子节中以优化空间局部性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接