我有一个链接器脚本:
SECTIONS
{
.text 0x42000:
{
*(.text*)
}
aligned_dot = ALIGN(0x10 * 1024);
.data aligned_dot :
{
*(.data*)
}
}
如果我使用它链接一个(非常简单的)文件,它会给出我所期望的:
Sections:
Idx Name Size Address Type
0 00000000 0000000000000000
1 .text 00000008 0000000000042000 TEXT DATA
2 .data 00000000 0000000000044000 TEXT BSS
并且aligned_dot
是:
00044000 A aligned_dot
但是,我想使用这样的MEMORY
命令:
MEMORY
{
ram (wxa) : ORIGIN = 0x42000, LENGTH = 0x100000
}
SECTIONS
{
.text :
{
*(.text*)
}
aligned_dot = ALIGN(0x10 * 1024);
.data aligned_dot :
{
*(.data*)
}
}
当我使用此脚本链接时,该部分的地址似乎.data
被忽略了!
Sections:
Idx Name Size Address Type
0 00000000 0000000000000000
1 .text 00000008 0000000000042000 TEXT DATA
2 .data 00000000 0000000000042008 TEXT BSS
即使仍然aligned_dot
是:
00044000 A aligned_dot
这很奇怪吧?到底是怎么回事?这是使用 Clang 的 LLD。