2015-03-11 3 views
1

Цель:

Я реализовал пас на 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?

ответ

2

Почему вы не пытаетесь использовать musl library? Я использую его как стандартную библиотеку для моей кросс-компиляции.

+0

Это точно, что я ищу, спасибо большое! –

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