我正在构建一个可操作的小型操作系统,我对使用NASM,GCC和GNU Binutils的链接过程存在问题。
我正在链接多种类型的目标文件:
当我使用自定义链接描述文件链接这些文件然后重新读取degub信息时,我只找到链接的第一个目标文件的调试信息(按有效地址排序)。
为了便于参考,我将发布一些用于编译的行:
nasm -g -felf32 -F dwarf entry.asm -o "build/entry.o"
gcc -c main.c -o "build/main.o" -m32 -mtune=i386 -gdwarf
并链接:
ld -Tlinker.ld -m elf_i386 --nmagic -nostdlib -static -o "build/bootload.elf" -M -g > "build/map.txt"
我使用GCC v.6.2,Binutils v.2.27和NASM v.2.12 如果需要,我会发布链接器脚本的位。请帮忙,没有行信息的调试非常烦人。
答案 0 :(得分:0)
固定。
@Jester(谢谢)建议的问题出现在链接描述文件中
我将每个对象文件部分放在最终ELF文件的.text
部分中。我将发布一些代码来解释旧的和新的纠正行为:
<强> OLD:强>
.text : AT(0x800) {
test.o(*);
}
新强>
.text : AT(0x800) {
test.o(.text);
test.o(.data);
test.o(.bss);
}
所有这些代码都是针对链接器脚本的。