LINUX.ORG.RU

Как при помощи llvm визуализировать граф потока выполнения всей программы или каждого отдельного ее компонента?

 , ,


0

4

Добрый день! Собственно сабж.

Читая маны и хабр, наткнулся на строчки вида:

clang -O3 -emit-llvm hello.c -c -o hello.bc
llvm-as < hello.bc | opt -analyze -view-cfg
которая, судя по всему, может показать граф программы, если она состоит из 1 файла.

Вопрос в том, как то же самое сделать автоматически для большого сравнительно большого программного пакета? Сдается мне, что можно как-то поправить Makefile, чтобы вместо бинарников появился биткод, но вот как?..

★★

насколько я распарсил твои 2 строчки - с-файл компилируется в байткод (clang -O3 -emit-llvm hello.c -c -o hello.bc), линкуется (llvm-as < hello.bc), и вызывается нечто (opt -analyze -view-cfg), что и анализирует...

т.е. в общем случае - все компилируешь в байткод и линкуешь через llvm-as

CXX="clang"
CXXFLAGS="-emit-llvm"
LD="llvm-as"

как-то так

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

я решил потренироваться на git-2.0.1: и компилится не очень долго, и файлов немало. Сделал примерно так же (вместо CXX - CC, CXXFLAGS - CFLAGS, LD в мэйкфайле не было и я забил на третью строчку). потом попробовал вызвать opt -analyze -view-cfg, что дало ошибку

opt: notes-utils.o:1:1: error: expected top-level entity <кракозябры>
Видимо, проблема в линковке: с 1 стороны нам нужны биткоды, с другой - уже скомпиленные файлы (чтобы генерировать эти же самые биткоды, хотя тут я может и не прав).

aido ★★
() автор топика
Ответ на: комментарий от Stil

ms-sys (а он еще легче гита) этим же способом не создает биткоды.

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

ммм... попробую завтра разобраться.

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