Создать IR LLVM для httpd
Я пытаюсь скомпилировать apache2 с LLVM, чтобы сгенерировать окончательные двоичные файлы в LLVM IR.
Я использовал опцию flto при компиляции и компоновке и передал "Кроме того-emit-llvm" компоновщик через Clang. Кажется, это работает для большинства шагов, однако у меня было две проблемы
1) Ранее я использовал LLVM 3.6, чей плагин gold не принимает также-emit-llvm, но имеет только emit-llvm, в основном он будет излучать только elf или llvm. Какой не нравится система сборки Autotools. Скрипт конфигурирования и компоновки требует двоичных файлов, а я хочу llvm. Какие-нибудь решения для этого?
2) Поэтому я перешел на LLVM 3.5.2, процесс сборки идет хорошо, я могу сгенерировать двоичные файлы как httpd.bc, так и httpd elf, но компоновщик не хочет связывать модули (он мог связывать двоичные файлы) Я получаю эту ошибку
`
/usr/share/apr-1.0/build/libtool --silent --mode=link /home/rbhatia/Desktop/llvm-newbuild/bin/clang -pthread -flto -o mod_authn_file.la -rpath /home/rbhatia/Desktop/httpd-2.4.12/llvm/modules -module -avoid-version mod_authn_file.lo
/usr/bin/ld: error: .libs/mod_authn_file.o:1:3: invalid chaenter code hereracter
/usr/bin/ld: error: .libs/mod_authn_file.o:1:3: syntax error, unexpected $end
/usr/bin/ld: error: .libs/mod_authn_file.o: not an object or archive
collect2: error: ld returned 1 exit status
`
Я вижу, что mod_authn_file.o является действительным IR-файлом LLVM, который я могу разобрать с помощью llvm-dis. Кроме того, непосредственно перед этим шагом компоновщик может связать httpd и httpd.bc
Любая помощь в том, что ошибка?
1 ответ
Взгляни на
https://github.com/SRI-CSL/whole-program-llvm
мы используем этот инструмент для встраивания довольно больших проектов в битовый код. Нашей самой большой на сегодняшний день была FreeBSD 10.0, поэтому размер обычно не является проблемой.
Наша проверка сборки travis на самом деле apache, как и наш учебник. Надеюсь, это поможет.