【发布时间】:2017-01-05 16:24:30
【问题描述】:
我正在构建一个小型操作系统可执行文件,但我在使用 NASM、GCC 和 GNU Binutils 的链接过程中遇到问题。
我正在链接多种类型的目标文件:
- 带有来自 NASM 的 dwarf 调试信息的 ELF32 目标文件
- 带有来自 GCC 的 dwarf 调试信息的 ELF32 目标文件
当我使用自定义链接描述文件链接这些文件,然后重新读取 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
如果需要,我会发布一些链接描述文件。请帮忙,没有线路信息的调试很烦人。
【问题讨论】:
-
您是否尝试过不使用链接器脚本来查看是否是这个原因?
-
我需要链接器脚本,因为我需要将某些代码放在特定的地址。
-
我明白,尽管如此,了解这是否会导致问题会有所帮助。
-
好的,我会在回到 PC 时尝试,即使我不知道我是否能够在没有所述脚本的情况下进行链接
-
只需创建一个minimal reproducible example,不必是您的真实代码。
标签: gcc assembly linker nasm ld