Ядро Linux 4.19 теперь требует для сборки GCC 4.6 из-за сбоев компиляции в старой архитектуре

Linux-Unix / Ядро Linux 4.19 теперь требует для сборки GCC 4.6 из-за сбоев компиляции в старой архитектуре 1 минута на чтение

Linux Kernel Organization, Inc.



Для разработчиков Linux, работающих над ядром, готовящееся к выпуску ядро ​​Linux 4.19 повышает минимальную версию GCC, необходимую для сборки ядра. В официальном ядре Linux GCC 3.2 указан как минимум версия компилятора, необходимая для сборки ядра, но ядро ​​Linux 4.19 повышает ее до GCC 4.6.

Это связано с тем, что различные архитектуры на более старых выпусках GCC4 не могли полностью скомпилировать ядро ​​Linux, поэтому GCC 4.6 установлен как минимум. Ядро также будет явно проверять GCC 4.6.0 или новее, и, если он не найден, компилятор выдает ошибку.



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



Это изменение было объединено сегодня с помощью фиксации Git, а GCC 4.6.0 был выпущен в 2011 году, так что мы увидим, будут ли у GCC какие-либо обновления в будущем.



Журнал изменений / фиксация этого обновления в основном указывает, что изменение в значительной степени полностью связано с тем, что более старые версии компилятора GCC не смогли собрать ядро ​​для различных архитектур, как указано ниже:

 Различные архитектуры не работают должным образом со старыми версиями компилятора gcc. Пример от Гюнтера Рока в потоке [1]:>> В файле, включенном из ./include/linux/mm.h:17:0,> из ./include/linux/pid_namespace.h:7,> из ./include /linux/ptrace.h:10,> из arch / openrisc / kernel / asm-offsets.c: 32:> ./include/linux/mm_types.h:497:16: error: гибкий элемент массива в пустой структуре> > Это просто пример с gcc 4.5.1 для or32. Я видел проблему> с gcc 4.4 (для unicore32). Поэтому обновите минимально необходимую версию gcc до 4.6. [1] https://lore.kernel.org/lkml/20180814170904.GA12768@roeck-us.net/ Разное: - Обновить документацию / process / changes.rst - Удалить и объединить блоки проверки версии в compiler-gcc.h для версий ниже 4.6

Что касается усилий LLVM Clang по созданию основного ядра Linux x86_64, в настоящее время наблюдается некоторый провал в этих усилиях, особенно в проекте LLVMLinux, хотя была и некоторая работа по созданию ядра через пространство ARM Linux с помощью Clang.