1

我试图从 XV6 makefile 中理解以下代码块:

ULIB = ulib.o usys.o printf.o umalloc.o

_%: %.o $(ULIB)
    $(LD) $(LDFLAGS) -N -e main -Ttext 0 -o $@ $^
    $(OBJDUMP) -S $@ > $*.asm
    $(OBJDUMP) -t $@ | sed '1,/SYMBOL TABLE/d; s/ .* / /; /^$$/d' > $*.sym

我在哪里可以找到解释上述所有选项的参考资料?例如,我试图在 GNU 网站上查找选项“-N”,但没有找到。

提前致谢

4

1 回答 1

3

我不是 Makefile 方面的专家,但您可能正在寻找man几个 GNU 程序的页面。
这一行,例如:

$(LD) $(LDFLAGS) -N -e main -Ttext 0 -o $@ $^

是,如果我理解正确的话,是bashmake语法的混合:

  • $(LD)make变量替换,该变量LD很可能包含链接器可执行文件的名称(通常是ld)。
  • $(LDFLAGS)与上面类似,不同之处在于它包含要传递给名为 in 的可执行文件的标志LD
  • -N -e main -Ttext 0 -o只是论据LD
  • $@被目标替换
  • $^被所有依赖项的空格分隔列表替换

因此,如果您想了解该-N选项,最好的选择是GNU ld 手册页

-N
--omagic
将文本和数据部分设置为可读可写。此外,不要对数据段进行页面对齐,并禁用对共享库的链接。如果输出格式支持 Unix 风格的幻数,则将输出标记为“OMAGIC”。注意:虽然 PE-COFF 目标允许可写文本部分,但它不符合 Microsoft 发布的格式规范。

于 2015-04-04T17:09:56.607 回答