如何防止链接描述文件中的交错部分?

问题描述 投票:0回答:1

我正在使用链接器脚本,我需要确保两个特定部分(.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
}
clang sections linker-scripts contiguous lld
1个回答
0
投票

要实现此目的,您可以将这两个部分合并为一个输出部分。这样,链接器将它们放在一起,防止任何其他部分插入其中。

您可以按如下方式更新链接器脚本:

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)
并希望对齐同时应用于两个部分,请确保在开始时仅应用一次;否则,您可能会在各部分之间出现间隙。

© www.soinside.com 2019 - 2024. All rights reserved.