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



我们有一个链接器脚本,其中 .text 部分的一部分具有指定为的只读数据输入部分:

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

但是,具有尾随通配符的其他输入部分通常在名称和通配符之间有一个.。喜欢:*(.text .text.* .gnu.linkonce.t.*)

链接器处理.和通配符组合的方式是否有区别,还是没有区别?

.rodata*真的应该.rodata.*吗?

.text*只是比更明确的.text .text.*短,尽管不是等价的。它会像.text_foo一样拾取其他部分。这可以是有意的(也许是使其更独立于编译器约定?(或不。

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

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

最新更新