2014-12-10 70 views
2

我试图使用链接器参数-Ttext =LD -Ttext产生填充

它做什么,我需要它指定一个64位的ARMv8 ELF的.text段的地址与64KB的可执行文件并产生一个.text部分,其中正确引用.data

ld -Ttext=40000000 -Tdata=40001000 main.o 
objdump -h a.out 
a.out:  file format elf64-littleaarch64 

Sections: 
Idx Name   Size  VMA    LMA    File off Algn 
    0 .text   00000278 0000000040000000 0000000040000000 00010000 2**2 
        CONTENTS, ALLOC, LOAD, READONLY, CODE 
    1 .data   00000004 0000000040001000 0000000040001000 00011000 2**2 
        CONTENTS, ALLOC, LOAD, DATA 
    2 .comment  0000003a 0000000000000000 0000000000000000 00011004 2**0 
        CONTENTS, READONLY 

我遇到的问题是文件偏移量。为什么ld放弃应该小于4KB的文件并将.text文件放在64K?一旦它被加载到主内存中,这不是问题 - 但是磁盘上的存储可能会产生问题。

有没有命令行选项来防止这种情况?

编辑:所以它看起来像程序段对齐到0x10000 - 我没有看到一个选项来调整此对齐方式。也许链接脚本是我唯一的解决方案?

回答

0

使用option -n or --nmagic

关闭部分页面对齐,并禁用链接到的共享库。 如果输出格式支持Unix样式幻数,请将输出标记为“NMAGIC”。