2016-07-26 10 views
5

Я использовал clang-3.5, чтобы с радостью создавать версии битового кода musl libc и использовать результат для создания замечательных автономных исполняемых файлов.clang-3.8 и compiler-rt vs libgcc

Недавние попытки с clang-3.8 не были так счастливы. Похоже, что clang-3.8 генерирует битовый код использует функцию, определенную в

compiler-rt/lib/builtins 

Типичных примеров функций Я считаю, загрязняющими являются mulxc3 битовым кодом, mulsc3 и muldc3. Я могу решить это, связываясь с libgcc или даже альтернативой llvm, если бы у меня было четкое представление о том, что это было. Хотя я бы предпочел предотвратить возникновение проблемы в первую очередь.

Я видел упоминание флагов, таких как rtlib=compiler-rt и т. Д., Но нашел ценную небольшую документацию по этому вопросу.

Итак, вот несколько простых вопросов.

  1. Можно ли предотвратить clang от использования compiler-rt/lib/builtins в излучаемого битового кода? Или если нет

  2. Имеет ли llvm версию libgcc, которую я мог бы использовать. На самом деле я бы , вероятно, создал версию его битового кода, но это, помимо точки.

Любовь, чтобы услышать некоторые рекомендации по этому вопросу.

Добавлено 12/8/2016: Так я проиллюстрирую мои проблемы с конкретным рабочим процессом, который люди могут размножаться, если они хотят, или, скорее, просто указать, где я глуп.

Так начните, проверяя:

musllv

и следуйте инструкциям в README.to компиляции (здесь я использую лязг-3,8 на убунту 14.04)

WLLVM_CONFIGURE_ONLY=1 CC=wllvm ./configure --target=LLVM --build=LLVM 
make 
cd lib 
extract-bc -b libc.a 

вы будете также нужен биткод простого исполняемого файла. Я буду использовать nweb.c здесь.

wllvm nweb.c -o nweb 
extract-bc nweb 

Теперь мы можем сделать что-то вроде:

clang -static -nostdlib nweb.bc libc.a.bc crt1.o libc.a -o nweb 

Этого рабочий процесс проходит гладко лязг-3.5, но для лязга-3.8 мы получаем:

clang -static -nostdlib nweb.bc libc.a.bc crt1.o libc.a -o nweb 
/tmp/libc-f734a3.o: In function `cpowl': 
libc.a.bc:(.text+0xbb9a): undefined reference to `__mulxc3' 
/tmp/libc-f734a3.o: In function `cpowf': 
libc.a.bc:(.text+0x38f7d): undefined reference to `__mulsc3' 
/tmp/libc-f734a3.o: In function `csqrt': 
libc.a.bc:(.text+0x78fc3): undefined reference to `__muldc3' 
/tmp/libc-f734a3.o: In function `cpow': 
libc.a.bc:(.text+0xafafc): undefined reference to `__muldc3' 
clang-3.8: error: linker command failed with exit code 1 (use -v to seeinvocation) 

Итак, как @ Поль-Брэннэн указывает, что мы могли бы попробовать

clang -static -nostdlib --rtlib=compiler-rt nweb.bc libc.a.bc crt1.o libc.a -o nweb 

Но это, где я, наверное, глупо, потому что я получаю:

clang-3.8: warning: argument unused during compilation: '--rtlib=compiler-rt' 

независимо от того, использую ли я его как флаг связывания или компиляции.

+0

Я не знаю ответа на вопрос, но я считаю, что этот отчет об ошибке является актуальным: https://llvm.org/bugs/show_bug.cgi?id=16404 BTW, связавшись с использованием --rtlib = compiler-rt решил мои проблемы с привязкой к поиску __muloti4, в то время как связь с libgcc этого не сделала. –

+0

Спасибо за подсказку @ paul-brannan, выглядит «can-o-wormish». Тем не менее у меня, похоже, нет мидаса. Я опубликую последующую информацию, чтобы люди могли дублировать мою проблему и кормить меня в землю обетованной. –

+0

Я добавляю это здесь, потому что, хотя он не отвечает на мой вопрос, это также кажется актуальным. [Сборка GNU-бесплатных исполняемых файлов с clang] (https://blogs.gentoo.org/gsoc2016-native-clang/2016/05/31/build-gnu-free-executables-with-clang/) –

ответ

0

ОК, так что мне наконец удалось добиться успеха. Я построил llvm-3.8.1 вместе с проектом compiler-rt с использованием wllvm и wllvm++.

Одним из строительной продукции был libclang_rt.builtins-x86_64.a, и из этого архива я смог извлечь модуль битового кода

libclang_rt.builtins-x86_64.bc

с помощью команды: extract-bc -b libclang_rt.builtins-x86_64.a Этого модуля битового кода имеет определение для этого надоедливого instrinsics подобный __mulxc3, __mulsc3, и __muldc3.

Аллилуйя!

 Смежные вопросы

  • Нет связанных вопросов^_^