我在哪里可以找到正式的ld链接器脚本语法?

时间:2015-02-10 05:31:49

标签: grammar ld linker-scripts

我正在寻找链接描述文件的正式语法。类似于给予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语法吗?

1 个答案:

答案 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