我正在寻找链接描述文件的正式语法。类似于给予lex和yacc但与其他yacc行李不同的东西。如果直接查看ld
的源代码,我可以找到类似语法的yacc。但我现在不想这样做。
我看过this question and its answers,但它指的是ld
的联机帮助页。这些联机帮助页在很大程度上很好,但它们确实以某种模糊的方式指定了一些东西。例如,
从Assignment: Defining Symbols获取此片段:它说:
例如,创建一个地址为最后一个的绝对符号 名为.data的输出节的字节:
SECTIONS{ ...
.data :
{
*(.data)
_edata = ABSOLUTE(.) ;
}
... }
如何解释...
?
这是一个例子。在经过一番斗争之后,我或许可以充分准确地解释这一点;但是有很多这样的例子;所以我的问题是:链接器脚本是否有更好的正式规范?你可以在Ritchie和Kernighan的书The C Language
的附录中看到C语法吗?
答案 0 :(得分:1)
在GNU LD内部,有ldgram.y:
A YACC grammar to parse a superset of the AT&T linker scripting language. Copyright (C) 1991-2015 Free Software Foundation, Inc. Written by Steve Chamberlain of Cygnus Support (steve@cygnus.com).
另请参阅ld/Makefile.am了解构成LD的源文件:
ld_new_SOURCES = ldgram.y ldlex-wrapper.c lexsup.c ldlang.c \
mri.c ldctor.c ldmain.c \
ldwrite.c ldexp.c ldemul.c ldver.c ldmisc.c ldfile.c ldcref.c $(PLUGIN_C) \
ldbuildid.c