LLVM переводчик - PullRequest
       41

LLVM переводчик

3 голосов
/ 22 августа 2011

Я пытаюсь понять структуру высокого уровня программы LLVM.Я прочитал в книге, что « программы состоят из модулей, каждый из которых соответствует единице перевода ». Может кто-нибудь объяснить мне более подробно выше и какова разница между модулями и единицами перевода (если есть)).Мне также интересно узнать, какая часть кода вызывается, когда модуль перевода запускается и завершает кодирование отладочной информации?

1 Ответ

1 голос
/ 22 августа 2011

Единица перевода - это термин из языкового стандарта.Например, это из C (c99 iso draft)

5.1 Концептуальные модели;5.1.1 среда перевода;5.1.1.1 Структура программы

Программу переменного тока необязательно переводить одновременно.Текст программы хранится в единицах, называемых исходными файлами (или файлами предварительной обработки) в настоящем международном стандарте.Исходный файл вместе со всеми заголовками и исходными файлами, включенными в директиву предварительной обработки #include, называется модулем преобразования предварительной обработки.После предварительной обработки единица перевода предварительной обработки называется единицей перевода .

Таким образом, единица перевода - это единственный исходный файл (file.c) после предварительной обработки (все #include d).Создано *.h файлов, все макросы раскрыты, все комментарии пропущены, и файл готов к токенизации).

Единица перевода - это единица компиляции, поскольку она не зависела от какого-либо внешнего ресурса до шага связывания.Все заголовки находятся в пределах TU.

Термин module не определен в стандарте языка, но AFAIK относится к translation unit на более глубоких этапах перевода.

LLVM описывает это как: http://llvm.org/docs/ProgrammersManual.html

Класс Module представляет структуру верхнего уровня, присутствующую в программах LLVM.Модуль LLVM фактически является либо единицей перевода исходной программы, либо комбинацией нескольких единиц перевода, объединенных компоновщиком.

Класс Module отслеживает список функций, список GlobalVariables и SymbolTable.Кроме того, он содержит несколько полезных функций-членов, которые пытаются упростить общие операции.

Об этой части вашего вопроса:

Мне также интересно узнать, какая частькода вызывается, когда модуль преобразования запускается и завершает кодирование отладочной информации?

Это зависит от того, как используется LLVM.Сам LLVM является библиотекой и может использоваться различными способами.

Для clang / LLVM (компилятор C / C ++ построен на libclang и LLVM) модуль перевода создается после этапа предварительной обработки.Он будет проанализирован в AST, затем в сборку LLVM и сохранен в модуле.

В качестве учебного примера приведено создание модулей http://llvm.org/releases/2.6/docs/tutorial/JITTutorial1.html

...