2015-02-10 40 views
3

我正在尋找鏈接器腳本的形式語法。類似於給予lex和yacc但與其他yacc行李不同的東西。如果我直接看ld的源代碼,我可以找到像語法這樣的yacc。但我現在不想這樣做。我在哪裏可以找到正式的ld鏈接器腳本語法?

我看過this question and its answers,但它指的是ld的手冊頁。 manpages在很大程度上很好,但他們確實以某種模棱兩可的方式指定了一些東西。例如, 拿這個片段從Assignment: Defining Symbols它說:

例如,創建一個絕對符號,它的地址是輸出部分命名。數據的最後一個字節 :

SECTIONS{ ... 
    .data : 
    { 
     *(.data) 
     _edata = ABSOLUTE(.) ; 
    } 
... } 

如何解釋...

這是一個例子。經過一番鬥爭,我或許能夠充分準確地解釋這一點;但有很多這樣的例子;所以我的問題是:鏈接器腳本是否有更好的正式規範?就像你在裏奇和克尼漢的書The C Language的附錄中看到的C語法一樣?

+0

投票關閉作爲資源REC。除了源代碼之外,任何源代碼都不會比文檔更精確......我也鼓勵您生成最小的Linux 32位asm示例並使用objdump分析它們。 – 2015-10-06 21:41:42

回答

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 ([email protected]).

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

相關問題