我正在使用链接器脚本,我需要确保两个特定部分(.feature.rodata 和 .feature.text)连续放置在内存中,而没有任何其他部分(如 .eh_frame)在它们之间交错。
这是我的链接器脚本的片段:
SECTIONS
{
.feature.rodata ALIGN(PAGE_SIZE) : {
_feature_rodata_start = .;
KEEP(*(.feature.rodata))
_feature_rodata_end = .;
} = 0x0
.feature.text ALIGN(PAGE_SIZE) : {
_feature_text_start = .;
KEEP(*(.feature.text))
_feature_text_end = .;
} = LINKER_INFINITE_LOOP_OPCODE
}
要实现此目的,您可以将这两个部分合并为一个输出部分。这样,链接器将它们放在一起,防止任何其他部分插入其中。
您可以按如下方式更新链接器脚本:
SECTIONS
{
.feature ALIGN(PAGE_SIZE) : {
_feature_start = .;
KEEP(*(.feature.rodata))
_feature_rodata_end = .;
_feature_text_start = .;
KEEP(*(.feature.text))
_feature_text_end = .;
_feature_end = .;
} = 0x0
}
通过这样做,
.feature.rodata
和.feature.text
都被放置在名为.feature的单个部分中,并且它们保持连续。您还可以保留每个小节的开始和结束符号。
如果您使用
ALIGN(PAGE_SIZE)
并希望对齐同时应用于两个部分,请确保在开始时仅应用一次;否则,您可能会在各部分之间出现间隙。