*(。rodata *)和*(。rodata。*)之间的gcc链接脚本差异

时间:2019-04-01 08:06:10

标签: gcc linker

我们有一个链接描述文件,其中.text部分的一部分具有指定为以下内容的只读数据输入部分:

.text:
{
    ...
    *(.rodata .rodata* .gnu.linkonce.r.*)
    ...
}

但是,其他带有尾部通配符的输入节通常在名称和通配符之间使用.。像:*(.text .text.* .gnu.linkonce.t.*)

链接器对待.和通配符组合的方式是否有所不同?还是没有区别?

.rodata*实际上应该是.rodata.*吗?

1 个答案:

答案 0 :(得分:1)

.text*比更明确的.text .text.*短,尽管不相等。它将提取其他部分,例如.text_foo。是否可以这样做(是否使其更独立于编译器约定?)。

https://sourceware.org/binutils/docs/ld/Input-Section-Wildcards.html

如果您通过.*,则-ffunction-sections部分将由gcc生成。数据和-fdata-sections也是如此。