LINUX.ORG.RU

Статус готовности CLang к сборке ядра Linux

 , , license bsd, lll, , , ,


0

1

В прошлом октябре был анонсирован проект по адаптации LLVM компилятора CLang к сборке ядра Linux. С тех пор прошло более полугода, и на днях разработчики опубликовали свой отчет о проделанной работе.

В целом:

  • Удалось получить работающую сборку ядер 2.6.37 и 2.6.38 (для некоторых конфигураций)
  • KVM и Xen использовать нельзя, причем последний пока даже не компилируется
  • Компилируются примерно 90% драйверов ядра, многие работают
  • Некоторые поставляемые сторонними вендорами драйвера (Broadcom, NVIDIA) работают отлично
  • Можно использовать многопроцессорные конфигурации (правда, только на x86), однако в некоторых случаях они требуют дополнительных усилий по доработке компилируемого кода

Что не работает:

  • Ассемблер для генерации кода реального режима (директивы code16gcc), поэтому, невозможно откомпилировать код начальной загрузки (для этой цели используется gas)
  • GCC-расширения языка C (некоторые работают, некоторые нет)
  • Опции генерации и оптимизации кода: -mregparm, -fcall-saved-reg, __arch_hweight*(), -pg, атрибут no_instrument_function, -fno-optimize-sibling-calls

Несмотря на возникающие трудности, разработчики полны энтузиазма. Свой проект они назвали LLL project, что расшифровывается как LLVM Linux project.

>>> Подробности

★★★★★

Проверено: mono ()
Последнее исправление: mono (всего исправлений: 2)

Ответ на: комментарий от anonymous

> Никто так и не сказал зачем оно нужно.

Читать не умеешь, да?

Затем, чтобы проще было ядро разрабатывать. Чтобы сообщения об ошибках человеческие были. Чтобы нетривиальные ошибки на этапе компиляции отлавливать. Чтобы код для отладки инструментировать по всякому. Все то, чего gcc не умеет, и уже никогда не научится.

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

> он петушиный и находит только совсем тривиальные вещи

в Xcode 3.х тоже был не фонтан, в четверке еще не смотрел

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

то есть даже повторное освобождение указателя он не находил.

kremator666
()
Ответ на: комментарий от aho

GCC тоже сначала назывался GNU C Compiler, так что название ни на что не намекает. А вообще у них планов на другие ЯП нет?

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

> А вообще у них планов на другие ЯП нет?

поддержка других языков под llvm есть - Haskell, Ruby, Java, Python и т.д., но это «неофициально», т.е. это делают другие люди, кроме того есть, например, такой проект:

http://vmkit.llvm.org/

aho
()
Ответ на: комментарий от Rakot

Если судить по сайту clang.llvm.org, то он затачивается только на С/С++/Obj C, для всего остального пишуться фронтенды для LLVM, такие как, например, GHC.

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

>Это упражнение могло бы повысить качество кода ядра..

Самое интересное, что нет, не повысит. Попытка писать код под все компиляторы приводит только к их собираемости, но запутанности и (частичной) неработоспособности.

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

сборка софта несколькими компиляторами часто помогает найти баги в коде. мы всегда собираем свой софт gcc и visual c++ 10, + регулярно делаем сборки intel c compiler и clang, в процессе таких сборок нашли несколько подозрительных мест, которые оказались настоящими багами. у clang/llvm достаточно хороший анализатор кода, и на его основе есть решения по static analysis (мы правда все равно coverity используем)

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

>в чём поинт использования каждого такого расширения, например, в ядре Linux?

Обычно расширения пишутся и используются исключительно в силу востребованности тех или иных возможностей, которые не входят в стандарт.

если можно писать на plain C99 как те же BSD?

А зачем? Чтобы получилась еще одна ненужная недоось лайк БЗД? Зачем подражать лузерам?

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

ну coverity тоже не всегда ошибки находит... мы на всякий случай несколькими анализаторами проходимся, VS'шным, кстати, тоже баги находили

ott ★★★★★
()

Долго читал их сайт и вики - так и не понял нахрена оно нужно и в чем его плюшки. Если кто знает - просвятите.

upcFrost ★★★★★
()

> Ассемблер для генерации кода реального режима

А где там реальный режим?

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

Похоже на костыль для ленящихся писать юнит-тесты и не знающих про valgrind и про проблему останова.

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

Сообщения об ошибках не нужны, достаточно строки же, а статически анализ выполняет статический анализатор, который есть отдельно, например cppcheck.

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

> Попытка писать код под все компиляторы приводит

Писать нужно не под компиляторы, а в соответствии со стандартом. Попытки делать иначе приводят к глючному говну.

Manhunt ★★★★★
()

> Компилируются примерно 90% драйверов ядра, многие работают

:D

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

>Писать нужно не под компиляторы, а в соответствии со стандартом. Попытки делать иначе приводят к глючному говну.

здорово, когда получается, но тут есть две трудности.

1) Кто сказал, что компилятор будет производить неглючный машинный код и соответствующего стандарту исходника?

2) Что делать, если в рамках стандарта реализация никак не получается? Расширения потому и пишут, что стандарта не хватает.

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

> Кто сказал, что компилятор будет производить неглючный машинный код и соответствующего стандарту исходника?

Авторы любого вменяемого компилятора.

Что делать, если в рамках стандарта реализация никак не получается?


Руки выпрямлять.

Расширения потому и пишут, что стандарта не хватает.


Значительная часть расширений нацелена на удобство (без них спокойно можно обойтись) или на оптимизации (их чаще всего можно упрятать в define-ы, и с неподдерживающим компилятором не использовать).

Расширений, без которых действительно никак, очень мало. И подозреваю, что llvm их все давно поддерживает.

Так что основная проблема должна быть не в расширениях, а в корректности кода. Именно этот аспект можно улучшить, собирая код разными компиляторами.

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

>Авторы любого вменяемого компилятора.

авторы компилятора тоже люди с небесконечным радиусом кривизны рук. Да и стандарты не всегда определены до конца.

Значительная часть расширений нацелена на удобство (без них спокойно можно обойтись) или на оптимизации (их чаще всего можно упрятать в define-ы, и с неподдерживающим компилятором не использовать).

для этого надо углубиться в вопрос «что в моем компиляторе нестандартного». А этот вопрос для разработчика сугубо вторичен.

Выносом в дефайны обычно занимется как раз тот, кто предпринимает попытку собрать код другим компилером и натыкается на несовместимость.

Так что основная проблема должна быть не в расширениях, а в корректности кода. Именно этот аспект можно улучшить, собирая код разными компиляторами.

Корректность кода - не самоцель. Я ни разу не видел на форониксе или в исследованиях британских ученых сравнения корректности кода. Измеряют объем машинного кода, потребляемую память, скорость, совместимость, отсутствеи ошибок в результатах, а никак не «корректность кода», что само по себе не измеряемая характеристика, а так, график ректальной температуры читателя.

AVL2 ★★★★★
()

Зачем эти мадригалы с каким-то Linux kernel нужны ? да и еще отстой под названием gcc... он и так скоро умрет - а тут пытаются делать костыли совместимости с ним.. Нахрена прогибаться под то что сознательно ложило на стандарты?

anonymous
()

>> анонсирован проект по адаптации LLVM компилятора CLang к сборке ядра Linux Вах! Будем собирать компьютеры из видеокарт и ставить туда линупс. А что, неплохо довольно:)

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

> для этого надо углубиться в вопрос «что в моем компиляторе нестандартного»

Ты язык учишь по руководству от компилятора? :D

Корректность кода - не самоцель.


Когда у тебя на руках мегабайты говна, и задача портировать его с gcc3 на gcc4, мнение на этот счёт резко меняется.

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

С некроссплатформенным GIMPLE GCC не нужен.

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

Для emacs тоже есть такое автодополнение. Использую.

Но то, что GCC уж совсем для этого не пригоден - враньё, есть GCCSense - автодополнение на основе патченного GCC для emacs и vim.

PS. Новость позитивная, раньше ядро Clang-ом практически совсем не собиралось.

Deleted
()
Ответ на: комментарий от skarrok

Мне как простому пользователю нравятся вменяемые сообщения об ошибках, такие бы да в gcc.

А кто мешает вам использовать Clang?

Deleted
()
Ответ на: комментарий от AVL2

> Я ни разу не видел на форониксе или в исследованиях британских ученых сравнения корректности кода.

на форониксе

сравнения корректности кода

/0

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

Тем более, они все нивелируются, если вспомнить, что Clang в сравнении с GCC ничего не умеет.

То, что им собирается 90% софта, называется «ничего не умеет»?

Deleted
()
Ответ на: комментарий от Lighting

Clang в среднем выигрывает у GCC по быстродействии скомпилированного бинарника, но очень слабо выигрывает.

Deleted
()
Ответ на: комментарий от buddhist

Иногда занимает. Но сообщения поадекватнее, чем у GCC.

Deleted
()
Ответ на: комментарий от Lighting

А кто, по вашему, end-user компилятора?

Deleted
()
Ответ на: комментарий от Lighting

А что, разработчик должен все собирать на супер-производительном компьютере с 8 GB оперативки? :D

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

90% какого софта, если он только минимальную FreeBSD может собрать? А выигрыш действительно слишком маленький, да и то не везде(в основном в кодеках и архиваторах, но там лучше себя показал ICC).

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

Мой учитель информатики не видел дальше методички по MS Word 97.

Wormik
()
Ответ на: комментарий от Deleted

>То, что им собирается 90% софта, называется «ничего не умеет»?

и что-то даже работает...

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

Останусь на GCC.

Это упражнение могло бы повысить качество кода ядра...

Даже если LLVM будет выдавать более быстрое ядро, то я останусь на GCC. Но работе LLVM с Linux'ом я рад, потому что это действительно способствует повышению качества кода ядра, вычищению из него gcc-hack'ов, костылей и подпорок.

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