我已经在我的C ++代码中声明了一些extern const
数据,并添加了section属性__attribute__((section("my_ro_data")))
。
我的链接描述文件看起来像这样:
SECTIONS
{
/* other stuff */
.rodata :
{
*(.rodata .rodata.*)
*(.gnu.linkonce.r.*)
} >CODE
. = ALIGN(4);
/* other stuff */
}
我注意到在地图文件中,my_ro_data
节位于*(.gnu.linkonce.r.*)
之后,在其他内容之前。为什么会这样,以及链接程序如何知道,因为ld脚本未提及my_ro_data
?
我也尝试过删除const限定词,然后链接器似乎将其放置到.data
输出节中,谁的描述也没有提及将其放在此处,也不与通配符匹配。
因此,我假设该链接器正在寻找部分属性,并由他们决定放置它,但这只是我的推测,我需要确切地知道它是如何工作以及为什么如此工作。预先谢谢你。
此外,获得一些参考手册也很棒。试图找到一些东西,但是什么都没有。