我的x86-64汇编程序有一行减少,导致重定位截断错误:
movq %rdx,8(%rdi)
如果您将该行单独放在t.s
中,它将使用命令
as -o t.o -g -al=t.lst t.s
请注意调试信息的-g
选项。
在此之后,尝试使用此命令将其链接到可执行文件:
ld -o t t.o
导致这两条错误消息:
t.o:t.s:1:(.stab+0x14): relocation truncated to fit: R_X86_64_32 against `.text'
t.o:t.s:1:(.stab+0x20): relocation truncated to fit: R_X86_64_32 against `.text'
t.lst的重点是:
1 0000 48895708 movq %rdx,8(%rdi)
1 90909090
1 90909090
1 90909090
如果我将-g
选项从汇编程序命令中删除,则不会出现链接器错误,因此问题可能出在调试器数据中,而不是输出文件的可执行部分。
这条指令在一个更大的程序中给我带来了麻烦,但正如你所看到的那样,它仍然是一个问题。
为什么我从此特定指令中获取重定位截断?链接器选项是否会生成有效且可调试的程序?