Можно ли получить LLVM-IR из сборочного файла? - PullRequest
1 голос
/ 15 мая 2019

Я скомпилировал .S файл с помощью команды:

clang-8 -c funcs.s -o funcs.o -emit-llvm

Я обнаружил, что файл .o создан в формате ELF. Я ожидал увидеть формат llvm-ir (с символами «BC» в начале результирующего файла).

Кажется, Clang игнорирует флаг "-emit-llvm".

1 Ответ

2 голосов
/ 15 мая 2019

Ваш вопрос принципиально не отличается от Можно ли перевести язык ассемблера на LLVM IR, оптимизировать его и затем перекомпилировать в другую архитектуру? .

Исходные и двоичные исполняемые / объектные файлы asm в основном эквивалентны этой проблеме. Вы все еще пытаетесь декомпилировать в LLVM-IR. Это сложно, и я не знаю, существует ли декомпилятор.

Кажется, Clang игнорирует флаг "-emit-llvm".

Нет, это просто не повлияло ни на один из этапов операции, которую вы просили сделать.

Вы попросили ваш компилятор скомпилировать в .o, так оно и было.

Если бы вход был .c, а выход .s, он мог бы излучать LLVM-IR, но в этом случае LLVM-IR не был частью процесса сборки .s до .o.

Таким образом, LLVM-IR-представление программы никогда не существовало во время работы clang, поэтому излучать было нечего.

...