2015-02-10 3 views
3

Я ищу формальную грамматику сценария компоновщика. Что-то похожее на те, что даны lex и yacc, но не с другим багажом yacc. Может быть, я могу найти yacc как грамматику, если я посмотрю прямо в исходном коде ld. Но я не хочу этого делать сейчас.Где я могу найти формальный синтаксис скрипта ld linker?

Я видел this question and its answers, но относится к файлам ld. Манипуляции в значительной степени хороши, но они задают вещи несколько неоднозначно. Например, Возьмите этот отрывок из Assignment: Defining Symbols Он говорит:

Например, чтобы создать абсолютный символ, адрес которого последний байт выходной секции .data имени:

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

Как интерпретировать ...?

Это один из примеров. Я могу с достаточной точностью интерпретировать эту вещь после некоторой борьбы; но таких примеров много; поэтому мой вопрос: есть ли более эффективная формальная спецификация для сценариев компоновщика? Что-то вроде грамматики C, которую вы видите в приложении книги The C Language от Ritchie и Kernighan?

+0

Голосование, чтобы закрыть, как гее ресурсов. Маловероятно, что любой источник будет более точным, чем документы, помимо исходного кода, конечно ... Я также рекомендую вам создавать минимальные 32-битные примеры ASM для Linux и анализировать их с помощью objdump. –

ответ

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

Смежные вопросы