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 выдаёт самые нормальные сообщения об ошибках, -Wall тоже рекомендую включать - последние такое ловят - зашатаешься! icc сосёт со своими попытками указать символ. Этому говну ещё копать и копать до уровня gcc по гибкости. Но пусть работают лучшее в gcc тащите ребята!

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

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

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


в коротком промежутке от запуска ядра загрузчиком до включения защищённого режима, и настройки IDT/GDT, К.О. В VirtualBox тоже самое, только там ещё для BIOS используется.

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

>С некроссплатформемным байт-кодом ллвм не нужен.

Вот тут диссер М. Франца про slim binaries: http://oberoncore.ru/library/code-generation_on-the-fly_a_key_to_portable_sof... http://www.uni-vologda.ac.ru/oberon/infoart/otherfly.htm

Там описана другая схема кодирования, чем просто SSA IR + биткод в LLVM, покомпактнее (семантический словарь, SDE). Интересно было бы делать SDE из SSA или биткода (при компиляции) и декодировании через SDE в загрузчике или наоборот, в загрузчике конвертировать из SDE в LLVM биткод и кодогенерировать через LLVM.
Вообще, насколько такой «SDE из SSA» и «SDE из LLVM BC» отличаются, и можно ли при некоторых усилиях из второго сделать первый? Что-то типа LLVM BC ->SDE -> generic SSA

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


сли исключить полностью константные выражения, которые вычисляются в ходе преобразования исходной программы в SDE-форму, SDE-кодирование сохраняет всю информацию, содержащуюся на уровне входного языка. Следовательно, в отличие от представлений, основанных на использовании абстрактных машин, преобразование в SDE-форму сохраняет блочную структуру программ, а также тип каждого выражения. Более того, в определенных случаях при подаче полученных с помощью SDE-кодирования данных на вход кодогенератора генерация кода упрощается, что приводит к повышению эффективности трансляции.


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

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

made my day :) выгонять криворукую команду

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

90% какого софта

Обычного. Не собирается только то, что юзает гну-расширения. Много что собирал им.

PS. Все сказанное мной относится к 2.8 и новее.

Deleted
()

Сабж - фигня, Tiny C Compiler рулит. С его помощью можно писать скрипты на C (дописав '#!/usr/bin/tcc -run' в начале файла). И он быстр - сборка и запуск ядра Линукс за 15 секунд! :)

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

> Я полагал это grub делает, а не ядро, нет?

там где-то есть всё-таки реальный режим, до загрузки ядра. Как бы не в initrd. Вот когда ставится VirtualBox, в него Gentoo, в неё virtualbox-modules, он по зависимостям просит dev86 компилятор и bin86 ассемблер.

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

да, весело — минималистичный tcc уже поддерживает x86-64 и собирает ядро, а могучие clang/pcc сборку ядра ниасиливают :))
вот как нужно gcc расширения реализовывать :))

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