Sparc函数编译对齐
我希望我的程序使得二进制文件中的每个函数在结束后都留有一些空间。 因此,稍后如果需要进行一些小的更改,则仅更改该function,并使用额外的空间作为计算较小变化的空间。 -falign-function可以完成这项工作但不会提供一致的空间。 无论如何要做到这一点? 还是更好的方法呢?
您可以使用内联汇编语句在每个函数的开头(或结尾)添加一系列nops。 然后,当您需要修改函数时,可以删除一些nop以保持函数的整体大小相同。 例如:
int foo(...) { __asm__ __volatile__("nop; nop; nop; nop;" ::); ... }
或者你甚至可以在函数中保留大块内存,如下所示:
__asm__ __volatile__("ba,a 1f; .skip 1000; 1: ;" ::);
这保留了大量内存,并在代码中简单地分支。
如果您使用的是足够新的编译器,他们最近添加了一个新选项: -fprolog-pad=N
和-fprolog-pad=M,N
表示在函数之前发出M nops,然后在N之后发出。