GCC ppc64对齐功能

时间:2017-05-18 07:42:03

标签: alignment powerpc

我正在使用GCC制作一些powerpc64可执行文件,但有时在函数之间我有以下错误:Screenshot

Powerpc指令格式仍然是4个字节,我尝试了一些gcc命令(-fno-align-functions),但编译器仍然在函数之间填充字节。

我希望我的函数在前面函数结束后直接启动,没有任何值/零填充(在屏幕截图中函数应该从0x124开始)。

感谢。

2 个答案:

答案 0 :(得分:1)

PPC64 ABI指定附加到函数的回溯表。零可能是由于回溯表而与对齐无关。尝试使用 -mtraceback=no命令行选项。

答案 1 :(得分:0)

除了上一个答案中提到的回溯表问题外,函数通常在16字节边界上对齐。由于各种原因,这很重要,包括编译器可以在16字节边界上对齐热循环以提高icache性能。 GCC的汇编代码将具有如下指令:

.p2align 4,,15

在每个函数定义之前强制执行此操作。因此,即使没有回溯表,您的功能也不会在没有更多努力的情况下从地址0x124开始。

可以使用-fno-align-functions或使用优化级别-Os(针对大小进行优化)来覆盖此行为。我尝试了两种方法,它们都删除了.p2align指令。除非你真的想要更小且可能更慢的代码,否则最好使用-fno-align-functions。

(如果您使用-O0或-O1进行编译,您也不会看到该指令,但我们不建议在如此低的优化级别上针对大小或速度进行编译。)