如何对“COMMON”部分以外的其他部分的符号进行排序?

时间:2010-01-02 20:36:30

标签: c gcc build linker static-linking

gnu链接器“ld”提供选项“-sort-common”,它按大小对未初始化的全局参数(称为COMMON节符号)进行排序。当链接器将符号与偶数地址对齐时,此选项有助于最小化节中的孔。 例如,如果我们定义:

  

- main.c中

     

char a;

     

短b;

     

char c;

     

int main(){return 0; }

并将其编译为main.o而没有“sort-common”,我们将在“a”的地址和“b”的地址之间得到一个字节的“空洞”。如果我们使用“sort-common”,链接器会将参数重新排序为“a,c,b”,并且因为a的大小是1个字节而c的大小是1个字节,所以它们的地址之间不会有“漏洞”。 我的问题是我的代码看起来像:

  

- main.c中

     

char a = 0;

     

短b = 0;

     

char c = 0;

     

...

在这种情况下,a,b和c位于BSS部分,这意味着“sort-common”不会影响它们。

如何对“COMMON”部分以外的其他部分的符号进行排序?

我还搜索了LD脚本中的许多选项,但没有成功。

更新:我在segment_flags中读到了有关“Order”值的内容,并且不明白如何使用它。任何帮助都很明显。

0 个答案:

没有答案