ld -Ttext生成一个带有64KB填充的可执行文件

时间:2014-12-10 22:14:33

标签: gcc arm ld elf

我尝试使用链接器参数-Ttext =

指定64位ARMv8 ELF的.text部分的地址

它完成我需要它并生成一个.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对齐 - 我没有看到调整此对齐的选项。也许链接器脚本是我唯一的解决方案?

1 个答案:

答案 0 :(得分:0)

使用option -n or --nmagic

  

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