缺少来自NASM和GCC

时间:2017-01-05 16:24:31

标签: gcc assembly linker nasm ld

我正在构建一个可操作的小型操作系统,我对使用NASM,GCC和GNU Binutils的链接过程存在问题。
我正在链接多种类型的目标文件:

  • ELF32目标文件,包含来自NASM的矮人调试信息
  • ELF32目标文件,包含来自GCC的矮人调试信息

当我使用自定义链接描述文件链接这些文件然后重新读取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 如果需要,我会发布链接器脚本的位。请帮忙,没有行信息的调试非常烦人。

1 个答案:

答案 0 :(得分:0)

固定。
@Jester(谢谢)建议的问题出现在链接描述文件中 我将每个对象文件部分放在最终ELF文件的.text部分中。我将发布一些代码来解释旧的和新的纠正行为:

<强> OLD:

.text : AT(0x800) {
    test.o(*);
}

.text : AT(0x800) {
    test.o(.text);
    test.o(.data);
    test.o(.bss);
}

所有这些代码都是针对链接器脚本的。