Цель:
Я реализовал пас на LLVM бэкэндом, который изменяет формат вывода ARM сборки/двоичный (например, добавить скачок в конце каждый базовый блок, чтобы исключить падение). По телефону:Настройка Стандартная библиотека C помощью LLVM (для поддержки LLVM оптимизации серверной)
llc -march=arm somefile.bc
он генерирует ожидаемый рычаг в сборе/двоичный, который работает должным образом на руке GNU Linux (я использую для QEMU руку и gem5 для его имитации). Теперь я хочу сделать то же самое в стандартной библиотеке c, но здесь есть проблемы.
Проблемы:
По:
http://article.gmane.org/gmane.comp.compilers.llvm.devel/77025
https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_14/docs/OpenProjects.html#glibc
компиляции Glibc с использованием LLVM не может быть надлежащим вариантом. С другой стороны, в соответствии с:
http://lists.cs.uiuc.edu/pipermail/llvmdev/2012-January/047088.html
LLVM может быть в состоянии составить newlib, таким образом, люди считают newlib в качестве альтернативы. Однако в соответствии с:
http://www.embecosm.com/appnotes/ean9/ean9-howto-newlib-1.0.html#id2711887
newlib намерен поддерживать двоичные файлы для программного обеспечения с открытым металлом (без ОС). Он реализует только независимые от оборудования части (например, libc и libm) и оставляет заглушку для каждого аппаратно-зависимого syscall (например, все в libgloss).
На самом деле я попытался скомпилировать простую программу «hello world» c с помощью arm-none-eabi-gcc, которая была настроена с опцией «--with-newlib», выполнение программы заканчивается ошибками сегментации на обоих qemu -arm и gem5.
Вопросы:
Я не уверен, если newlib совместим с Glibc. Мне интересно, могу ли я использовать llvm для перекрестной компиляции независимых от машины частей (в то же время изменить формат вывода рукоятки) из newlib и использовать arm-none-linux-gnueabi-gcc для кросс-компиляции деталей, зависящих от машины, от glibc и объединить эти две части для создания собственной стандартной библиотеки c?
В моей работе могут быть ошибки/недоразумения. Существуют ли какие-либо другие возможные методы, которые могут добавить мои изменения, по крайней мере, в часть стандартных библиотек c и сделать программу запущенной на qemu-arm или gem5?
Это точно, что я ищу, спасибо большое! –