我们有一个链接器脚本,其中 .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
也是如此。