LINUX.ORG.RU

Затянувшийся спор с разработчиком ld

 ,


0

2

Наблюдаю сейчас затянувшийся спор разработчика загрузчика системы Limine с разработчиком binutils по поводу какого-то изменения в ld, а конкретнее в Binary File Descriptor library (BFD). Это изменение приводит к настандартному (по мнению разраба Limine) поведение ld. Конкретнее если слинковать static-pie kernel при помощи ld тип получаемого ELF файла может быть разным: ET_DYN если адрес загрузки начинается с нуля или ET_EXEC в противном случае. При этом ld.lld и ld.gold в обоих случаях генерируют только ET_DYN. В ходе спора выяснилось, что это нестандартное поведение появилось в ld около десяти лет назад, как хак какой-то проблемы с тогдашним ядром Linux. Разработчик Limine просит изменить это поведение или хотя бы добавить возможность изменить его на более стандартное при помощи дополнительного параметра запуска ld. Разработчик ld не хочет этого делать и вместо этого закрыл баг после небольшой правки документации:

--- a/ld/ld.texi
+++ b/ld/ld.texi
@@ -2694,7 +2694,10 @@ Same as @option{--section-start}, with @code{.bss}, @code{.data} or
 @item -Ttext-segment=@var{org}
 @cindex text segment origin, cmd line
 When creating an ELF executable, it will set the address of the first
-byte of the text segment.
+byte of the text segment.  Note that when @option{-pie} is used with
+@option{-Ttext-segment=@var{org}}, the output executable is marked
+ET_EXEC so that the address of the first byte of the text segment will
+be guaranteed to be @var{org} at run time.

https://sourceware.org/bugzilla/show_bug.cgi?id=31795

Как по-вашему, кто из них прав и почему?


Один хочет всё как надо, второй не хочет что-то ломать так как уже «исторически сложилось». Оба правы, обоих можно понять. Это не баг который тащат ради совместимости, а по сути условность которую в особых случаях (внезапно тут особый случай это когда ты слепо следуешь документам) нужно учитывать.

Вопрос лишь в том есть ли активное проявление этой проблемы, когда люди ожидают одно, а по факту получают иное. А так да, интересно конечно. Спасибо что принёс :)

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от zg

Тут согласен. Мог бы ключик и добавить. Или хотя бы сказать что добавит потом, а пока запись в документацию.

Хотя возможно он хочет принудительно не давая вариантов просто оставить всё как есть, без смены поведения вообще. Мол 10 лет было и раз всем норм пусть так и будет навсегда. Фиг знает что у него на уме

P.S. Всю ветку я не читал.

P.P.S. Поглядел, автор хочет полной совметсимости с глибц и не допеускать поведения отличного от того что ожидает глибц. А репортер ругается мол с какого фигу ld под глибц вообще прогибается и понеслось. Оба правы опять :D

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 4)
Ответ на: комментарий от t184256

Чтобы его загрузчик можно было собрать любым популярным линкером

Во-первых, когда ему вдруг стали все должны? Во-вторых, почему он сам не добавит нужный ключ? Вряд ли разработчик ld откажется принять уже готовый код.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Во-первых, когда ему вдруг стали все должны? Во-вторых, почему он сам не добавит нужный ключ? Вряд ли разработчик ld откажется принять уже готовый код.

Судя по их диалогу - откажется.

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

К сожалению я не могу дать ответ так как у меня нет контекста, вы не могли бы повторить вопрос. Если у вас ещё есть вопросы, задавайте я постараюсь на них ответить.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от AnDoR

Если тебе что-то конкретное необходимо и ты можешь это сделать - правилом хорошего тона является предоставить патч либо спонсировать его создание

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

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

Кто-то из разрабов ld просил патч или выразил готовность его принять?

ЛОЛ ЧТО? Им-то это вообще нафиг не упало. Тебе надо, ты и делай. На счёт принять, ну пусть обсудят заранее. Хотя можно и просто в инициативном порядке запилить, переговорная позиция от этого заметно усилится.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Обсуждать что-то с ослом существующим в вакууме? Тут без серьезнорго конфликта не получится что-то сделать. Потому что дебил с самомнением не хочет что-то потом еще исправлять.

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

А не любым, кроме одного долбанутого и, к сожалению, популярного.

У этой стороны медали есть и обратная сторона. Чем больше подобных GNU’утых закидонов, тем будет меньшая популярность ld и большая более вменяемых инструментов – lld, gold.

ld и так довольно стрёмный и тупой всегда был.

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

Как много проектов отказались от ld за последние 5 - 10 лет?

Ну так а этот-то чувак почему не откажется? Пусть использует gold если там всё как надо. Тем более что он тоже в binutils.

no-such-file ★★★★★
()
Ответ на: комментарий от zg

Как много проектов отказались от ld за последние 5 - 10 лет?

Как только взлетела популярность Clang/LLVM, так и начали немного перекатываться на его инструментарий – lld, lldb и пр.

EXL ★★★★★
()
Ответ на: комментарий от no-such-file

Ну так а этот-то чувак почему не откажется? Пусть использует gold если там всё как надо. Тем более что он тоже в binutils.

А зачем вообще два линкера в одном binutils? Кто сейчас использует gold?

На сколько я понял gold не использует библиотеку BFD и поэтому реализует поддержку форматов сам, а конкретнее лишь одного формата - ELF. То есть выходит, что ld (а точнее BFD) - это костыльный линкер, а gold просто недоделанный. Ну и теперь понятно, почему Limine не использует gold.

Binutils - это зоопарк костылей и недоделок.

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

gold просто недоделанный

Тогда зачем на него ссылаться и приводить как пример?

Вообще, чувак делает загрузчик. Там в принципе зоопарк и костыль на костыле в железе. А он до столба докопался.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Тогда зачем на него ссылаться и приводить как пример?

Затем, что там и в ld.lld сделано без костылей. Он просто использует ld.gold и ld.lld в споре в качестве референсного поведения линкера при работе с ELF файлами.

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

Затем, что там и в ld.lld сделано без костылей

Ну так и они не используются нишиша. Мы как бы не в мире розовых пони живём. Может ему с такой тонкой душевной организацией не стоит делать загрузчик и ковыряться в кишках? Есть много других областей, где можно рисовать красивые диаграммы и рассуждать на высокие темы под клубничный смузи.

no-such-file ★★★★★
()
Ответ на: комментарий от EXL

Как только взлетела популярность Clang/LLVM, так и начали немного перекатываться на его инструментарий – lld, lldb и пр.

латентным проприетарщикам надо препятствовать, а не потворствовать.

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

Причём тут всё это? У ld есть нестандартное поведение с ELF файлами, являющееся костылём. Никто кроме ld так не делает и поэтому вполне логичным было бы если и не выпилить этот костыль нафиг, то по крайней мере, сделать его отключаемым. Но для этого разрабы ld или BFD должны по крайней мере согласиться с этим. Потому что иначе даже полностью готовый патч просто выкинут на холод.

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

Никто кроме ld так не делает

Кто никто? Ты ж тут втираешь что больше никого и нету, одни недоделки и проприетарный мусор.

В следующий раз когда эта снежинка напорется на костыль в железе он побежит к железячникам просить сделать как надо, а то его поделка не работает? Фу таким быть.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от no-such-file

Кто никто?

Я уже говорил: ld.gold и ld.lld

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

Ничего такого я не втираю, перечитай.

В следующий раз когда эта снежинка напорется на костыль в железе он побежит к железячникам просить сделать как надо, а то его поделка не работает? Фу таким быть.

Почему в тебе так много токсичного негатива? Человек пытается сделать мир лучше, а ты хоботом ворочишь.

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

да. ждём x86S

Скорее всего нас ждёт всеобщий переход на ARM. Но только, если кто-то догадается не жмотиться и сделает архитектуру ARM-PC открытой, как в своё время IBM-PC.

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

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

Так всё-таки нет готового патча, да?

AnDoR ★★★★★
()