是否有一种方法可以在GNU链接器的手动部分中创建与常规部分相同的排序顺序?
这显然会生成一个紧凑的.data段: 从链接描述文件中提取:
.data BLOCK(__section_alignment__) :
{
__data_start__ = . ;
*(.data)
*(SORT(.data$*))
__data_end__ = . ;
}
输出:从.map文件中提取:
.data 0x96a63000 0xbb600
0x96a63000 __data_start__ = .
*(.data)
.data 0x96a63000 0x0 obj1.o
.data 0x96a63000 0x4 obj2.o
.data 0x96a63004 0x0 obj3.o
...
但是,如果通过分配对象的子集来使用自定义节(data.test),则将包括整个对象内容。
从链接描述文件中提取:
.data.test BLOCK(__section_alignment__) :
{
__data_start__ = . ;
obj1.o
obj2.o (.data)
*(SORT(.data$*))
__data_end__ = . ;
}
从.map文件中提取:
.data.test 0x64868000 0x342b0c00
obj1.o()
.data 0x64868000 0x0 obj1.o
.bss 0x64868000 0x0 obj1.o
.rdata$zzz 0x64868000 0x278 obj1.o
.debug_info 0x64868278 0x180 obj1.o
.debug_abbrev 0x648683f8 0x1e obj1.o
.debug_aranges
0x64868416 0x18 obj1.o
.debug_macro 0x6486842e 0x11eb4 obj1.o
.debug_line 0x6487a2e2 0x1e1 obj1.o
.debug_str 0x6487a4c3 0x0 obj1.o
obj2.o()
*fill* 0x6487a4c3 0x1
.data 0x6487a4c4 0x0 obj2.o
.bss 0x6487a4c4 0x0 obj2.o
.rdata$zzz 0x6487a4c4 0x278 obj2.o
.debug_info 0x6487a73c 0x180 obj2.o
.debug_abbrev 0x6487a8bc 0x1e obj2.o
.debug_aranges
0x6487a8da 0x18 obj2.o
.debug_macro 0x6487a8f2 0x11eb4 obj2.o
.debug_line 0x6488c7a6 0x1e1 obj2.o
.debug_str 0x6488c987 0x0 obj2.o
有什么办法可以避免这种情况?我想念什么?