LINUX.ORG.RU
решено ФорумTalks

Старые ядра и версии gcc. GCC невиновен!

 , ,


0

3

Грабли на пройденном пути.

gcc 8.3.0 собирает ядро 4.9.91 и оно при этом грузится и работает.

А вот 4.9.90 и ниже ( до .87 точно) собранное им же, мгновенно ребутится после сообщения «Uncompressing Linux...»

git bisect делать лень.

gcc-9.2 такая же хрень :(

Опять держать зоопарк gcc...

Update: виноват binutils-2.31 которому нужно явно указывать

«ld-option, -z max-page-size=0x200000» для x86_64.

Патч «x86/build/64: Force the linker to use 2MB page size»

★★★★★

Последнее исправление: vel (всего исправлений: 3)
Ответ на: комментарий от pon4ik

Я старый и ленивый. Делать git bisect между релизами - лень, там 68 патчей.

Я и так сдела кучу действий чтобы найти ядро в диапазоне .87 - .189 которое собирается и загружается. Да еще потом проверил на другом компиляторе.

Короче есть грабли, которые кто-то положил на пройденный путь.

Я эти грабли нашел и обозначил их местонахождение :)

PS Напрягает, что это ядро (4.9.90) вышло в марте прошлого года, т.е. 1.5 года не прошло.

vel ★★★★★
() автор топика

Философский вопрос, но как мы дошли до того, что крупную программу надо компилировать не то, что конкретным компилятором, а еще и строго конкретными его версиями, иначе работать не будет. А ведь казалось бы Си - переносимый, стандартизированный и т.д и т.п. И даже gnu-расширения как бы хотя и не входят в стандарт, но по крайней мере в пределах gcc почти стандартны.

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

Может там UB в ядро где-то добавили, а потом исправили.

xaizek ★★★★★
()

А ещё это может быть баг в GCC.

i-rinat ★★★★★
()

gcc 8.3.0 собирает ядро 4.9.91

Так может оно и работает потому,что в .91 что-то исправили для совместимости с gcc 8.3.0?

Версия ядра та же самая, 4.9, просто мелкие исправления туда добавили. Зачем тебе тоже самое, но чуть ранее вышедшее?

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 1)

Есть подозрение, что это не gcc, а binutils-2.31

От этого немного легче, но совсем немного.

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

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

Хотя чего я, самому мне точно было бы лень если не по работе.

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

gcc-9.2.0 + binutils-2.32.0 + linux-4.19.x — собирается без проблем, хотя и не все x пробовал, иногда перескакиваю.
Не 4.9 конечно, но вдруг повезёт.

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

И что они ответят? «Собирай новую ревизию, она ж собирается и работает. Старые мы не поддерживаем». Вот если б старая версия компилятора не собирала ядро, то было б хуже.

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

Я плохо себе представляю, как будет выглядеть баг-репорт:

– Не собирается версия 4.9.90.
– Воспроизводится ли баг для 4.9.91?
– Нет.
– Ок. Closed.

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 1)
Ответ на: комментарий от darkenshvein

А ты чего ожидал? Ок. Сформулируй тогда описание бага и объясни, почему его нужно его пофиксить, если в крайней ревизии (именно ревизии) его нет.

grem ★★★★★
()

Я уж, когда упомянули старые ядра и gcc, подумал про древность какую времен gcc-3 и linux-2.6... Как время летит

cvs-255 ★★★★★
()
Ответ на: комментарий от darkenshvein

анекдот_про_типичного_программиста.txt

Трави.

dexpl ★★★★★
()

полезное наблюдение. правда, я старые ядра обычно собираю старыми компиляторами. но ради эксперимента можно попробовать и новым собрать. правда, у меня binutils 2.32. но на одном старом компе 4.9.x ядро вроде ребутилось. я думала, что там проблема в харде (там совсем музейное железо) и не стала его переводить на более новую линейку ядер. может, проблема и не в железе была.

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