【问题标题】:Linker assigns improper LMA to a section (using AT>)链接器将不正确的 LMA 分配给一个部分(使用 AT>)
【发布时间】:2013-12-14 15:47:18
【问题描述】:

我有一个包含 3 个部分的简单 asm 文件:

.code 32
.section sec1
    MOV R3, #10 
.section sec2
    MOV R1, #10 
.section sec3
    MOV R2, #10
.end

还有一个链接脚本:

MEMORY 
{
    ram : ORIGIN = 0x00200000, LENGTH = 1K
    rom : ORIGIN = 0x00100000, LENGTH = 1K
}

SECTIONS
{   
    .text : 
    {       
        *(.glue_7t) 
        *(.glue_7)      
        *(.text)
    }>rom   

    .sec1 :
    {   
        *(sec1) 
    }>rom  

    .sec2 :     
    {
        _ram_start = .;
        *(sec2)
    }>ram AT> rom

    .sec3 :
    {
        *(sec3)
    }>ram  AT> rom

    .data :
    {
        *(.data)
    }>ram 

    .bss :
    {
        *(.bss)
    }>ram  
}

我假设 .sec2 应该将 VMA 地址设置为 ram 的来源,但 LMA 应该是 .sec1 之后的地址,但是 objdump 给了我:

test2.o:     file format elf32-littlearm

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .sec1         00000004  00100000  00100000  00000034  2**0
                  CONTENTS, READONLY
  1 .sec2         00000004  00200000  00200000  00000038  2**0
                  CONTENTS, READONLY
  2 .sec3         00000004  00200004  00200004  0000003c  2**0
                  CONTENTS, READONLY

为什么 .sec2 LMA 设置为 ram?

【问题讨论】:

  • 我从来没有遇到过AT>REGION。我建议您使用sec1_end = .; .sec3 : AT(sec1_end) { ... } >ram 的形式。这与ld giving unexpected load address 非常相似。对此的真正测试是使用objcopy 制作二进制文件并查看文件大小。是 24 字节还是 0x1008 字节。
  • 顺便说一句,您确定要不要将 .data 部分也放在 rom 上吗?
  • 这只是一个测试脚本,只是为了让我了解链接器引擎盖下的内容。 .data 部分通常会转到 rom,是的。

标签: linker embedded arm ld elf


【解决方案1】:

事实证明,我的 .s 文件中的部分是不可分配的。这就是为什么 LMA 是错误的。如果不分配部分,则 LMA 可以与 VMA 相同。我在玩 objcopy 时发现了它——输出的二进制文件总是空的。 asm 文件应如下所示:

.code 32
.section sec1, "a"
    MOV R3, #10 
.section sec2, "a"
    MOV R1, #10 
.section sec3, "a"
    MOV R2, #10
.end

通常代码会转到 .text 部分,默认情况下是可分配的。添加“a”后,链接器会生成正确的 LMA 地址。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    相关资源
    最近更新 更多