【问题标题】:How to put 2 sections in 1 segment (Using ld scripts)如何将 2 个部分放在 1 个段中(使用 ld 脚本)
【发布时间】:2012-06-30 02:50:08
【问题描述】:

我有以下链接器脚本:

SECTIONS {

    .arora_exec_free_space 4399531 : 
    {
        *(.text)
        *(.rodata)
        *(.data.rel.ro.local)
    }
    .arora_data_free_space (ADDR(.arora_exec_free_space) + SIZEOF(.arora_exec_free_space)) : AT (7592352)
    {
        *(.data)
        *(.bss)
        *(.got)
    }
}

当我编译我的程序时,这两个部分(exec 和 data)位于不同的 LOAD 段中。 我想将两个部分(.arora_data_free_space 和 .arora_exec_free_space)合二为一 加载段。 有没有办法使用链接器脚本来做到这一点? 我该怎么做? 谢谢。

【问题讨论】:

    标签: c linux ld segments


    【解决方案1】:

    当然 - 您只需要使用 PHDRS。我认为,该链接上的示例几乎正是您想要做的。这是我从您的链接器脚本中制作的(未经测试的)示例:

    PHDRS
    {
       mysegment PT_LOAD;
    }
    
    SECTIONS 
    {
        .arora_exec_free_space 4399531 : 
        {
            *(.text)
            *(.rodata)
            *(.data.rel.ro.local)
        } :mysegment
    
        .arora_data_free_space (ADDR(.arora_exec_free_space) + SIZEOF(.arora_exec_free_space)) : AT (7592352)
        {
            *(.data)
            *(.bss)
            *(.got)
        } :mysegment
    }
    

    【讨论】:

    • 当我使用 PHDRS 时,其余的 ELF 段将被删除。我正在寻找一种方法将这些部分放入一个 segemnt 并保留精灵的其余部分而不做任何更改。
    • 您阅读链接了吗? “默认情况下,链接器会创建合理的程序头。但是,在某些情况下,您可能需要更精确地指定程序头。您可以为此目的使用 PHDRS 命令。当链接器在链接器脚本中看到 PHDRS 命令时,它不会创建除指定的程序头之外的任何程序头。”如果您想让其他人保持原样,您只需将它们包含在您的 PHDRS 中。
    猜你喜欢
    • 2014-03-29
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多