LINUX.ORG.RU

LLVM API - как генерировать нативный бинарник?


0

0

Как сгенерировать нативный линуксовый бинарник средствами LLVM API? (на официальном сайте не нашел)

Как сгенерировать байткод знаю. Как скомпилировать его в нативный бинарник при помощи llvmc или llc+gas+ld тоже знаю.

Deleted

На данный момент для большинства backend-ов никак. Нужен еще as и ld (собственно, так же и для gcc). Поддержку elf сейчас пилят, но без особого результата.

anonymous
()
Ответ на: комментарий от anonymous

> На данный момент для большинства backend-ов никак. Нужен еще as и ld (собственно, так же и для gcc). Поддержку elf сейчас пилят, но без особого результата.

Теперь другой вопрос - как правильно сгенерировать ассемблерный исходник?

PS. Смотрел исходники llc - не очень длинные. Пока ничего толком не понял, но, думаю, вооружусь doxygen и все пойму.

Deleted
()
Ответ на: комментарий от Deleted

Ну собственно да - надо смотреть llc. Там все очень просто и тупо. Большая часть llc это пляски с бубнами на тему «где найти gcc?», собственно вывод ассемблера там в две строки сделан.

anonymous
()
Ответ на: комментарий от anonymous

> Большая часть llc это пляски с бубнами на тему «где найти gcc?»

А зачем ему gcc если он умеет только компилировать биткод llvm в ассемблер?

Deleted
()
Ответ на: комментарий от Deleted

Gcc там служит запускалкой для gas и ld с правильными библиотеками. Самим им лениво было это делать.

anonymous
()
Ответ на: комментарий от anonymous

Просмотрел внимательно исходники llc (из llvm-2.7, файл tools/llc/llc.cpp) - там нет НИ ОДНОГО упоминания GCC, GAS или LD. Мы хоть о одном и том же говорим? А то есть еще llvmc, который дейтсвительно использует gcc как запускалку для gas и ld. А llc вообще не знает ни о ассемблере, ни о линкере, он не создает бинарник, он только генерирует ассемблерный код (в llvm-2.7 он также умеет создавать сразу объектный код, но это experimental и он делает это средствами llvm, не используя gas).

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.