Ошибка при установке grub (Решено)

indeviral
00009074 <.text>:
Правильно понял, что сменил линковщик? ... и если да, то как?
Ошибки не исчезают с опытом - они просто умнеют
элементарно) хотя, он конечно где-то и в окружении должен задаваться...
# mv ld.gold ld
Ошибки в тексте-неповторимый стиль автора©
indeviral
# mv ld.gold ld
как то странно сделал.
Советуют несколько способов ... но мне больше нравится способ, описанный в Wiki
Если в переменной окружения $PATH путь /usr/local/bin идёт впереди /usr/bin то для использования линковщика достаточно создать ссылку(от рута):
ln -s /usr/bin/ld.gold /usr/local/bin/ld
У меня идет как описано и после создания симлинка и reboot … получаем
ld -v
GNU gold (GNU Binutils 2.35) 1.16
и вот если сейчас делать сборку, то entry point измениться.
Потому и предположил, что у ТС сменился линковщик - другой вопрос - как он мог смениться? … но, возможно, причина и не в этом - это одни догадки и все, возможно, намного сложнее, как пишет anode ...

PS - чтобы не забыть, удаляем симлинк - sudo rm /usr/local/bin/ld
и после reboot … получаем дефолтный линковщик
ld -v
GNU ld (GNU Binutils) 2.35

PSS - в части gcc - вот что пишут на этот счет
у gcc нет опций командной строки, с помощью которых можно было бы явно указать, какой линковщик мы используем. Есть несколько вариантов решения:
... но мне тоже не понравилось ...
Ошибки не исчезают с опытом - они просто умнеют
vasek
у gcc нет опций командной строки
$ man gcc
       -fuse-ld=bfd
           Use the bfd linker instead of the default linker.

       -fuse-ld=gold
           Use the gold linker instead of the default linker.

       -fuse-ld=lld
           Use the LLVM lld linker instead of the default linker.
vasek
как то странно сделал.
да нормально, просто так делать нельзя((, а линк это тот же костыль... должна быть опция в окружении.
Ошибки в тексте-неповторимый стиль автора©
indeviral
-fuse-ld=
Значит у меня старые данные и сейчас есть такие опции ...
А вот в части окружения - это было бы самое правильное ...
А вообще этими опциями, думаю, редко кто пользуется, а уж обычные юзеры и вообще не используют ...
Ошибки не исчезают с опытом - они просто умнеют
vasek
сменился линковщик - другой вопрос - как он мог смениться?

:~$ ld -v
GNU ld (GNU Binutils) 2.35.1
:~$ ld.gold -v
GNU gold (GNU Binutils 2.35.1) 1.166

Вероятно vasek прав и gcc тут не причём сейчас попробую в наглую подменить линковщики и посмотрю что получится

P.S. этот косяк начался ещё на версии binutils 2.34 хотя до недавнего нормально работал

Edit Поменял местами ld и ld.gold вот что выдало

checking whether byte ordering is bigendian... no
checking for freetype2... yes
checking ft2build.h usability... yes
checking ft2build.h presence... yes
checking for ft2build.h... yes
checking for fuse_main_real in -lfuse... no
configure: error: grub-mount was explicitly requested but can't be compiled (need FUSE library)

Я сомневаюсь что Fuse собран не верно
Chips
ld -v
GNU ld (GNU Binutils) 2.35.1
попробую в наглую подменить линковщики и посмотрю что получится
Похоже причина не в линковщике ... сменишь на другой, безусловно измениться и entry point, но в kernel.img, с большой вероятностью не будет 9000 ...
Вспоминай, что менял ... хотя все ближе становится предположение anode
Рекомендую все обдумать и начать по-новой, с новыми знаниями ... и чаще анализировать, что получается.
Ошибки не исчезают с опытом - они просто умнеют
vasek
Вспоминай, что менял

Могу ошибиться но в последний раз когда grub правильно собрался и работал я не трогал эти пакеты

usbutils, btrfs-progs, gperf, groff, pcre, smartmontools, mtools, net-tools, rtmpdump, gnutls, cyrus-sasl, glib2, iptables, iputils, kbd, libmnl, libmpc, logrotate, ncurses, openldap, procps, readline, iptables, libmnl, psmisc, openssl
objdump -f ~/BUILD/grub/grub/usr/lib/grub/i386-pc/kernel.img

/home/chip/BUILD/grub/grub/usr/lib/grub/i386-pc/kernel.img:     формат файла elf32-i386
архитектура: i386, флаги 0x00000002:
EXEC_P
[b]начальный адрес 0x00009000[/b]

sudo grub-install /dev/sda
Выполняется установка для платформы i386-pc.
[b]Установка завершена. Ошибок нет.[/b]

Народ всем огромное спасибо за вашу помощь всё таки удалось победить данный косяк. Мне подсказали что для решения данной проблемы при конфигурировании нужно явно указать какой следует использовать линковщик.

./configure \
        CC=gcc BUILD_CC=gcc TARGET_CC=gcc \
	CFLAGS="-Os -fuse-ld=bfd" \
	LDFLAGS="" \
	TARGET_LDFLAGS="-static" \
...
Правда мне так и не понятно почему раньше всё работало и без такого хака но в спеке grub для OpenMandriva реализовано так
Chips
Мне подсказали что для решения данной проблемы при конфигурировании нужно явно указать какой следует использовать линковщик.
CFLAGS="-Os -fuse-ld=bfd" \
Указывать нужно, если хочешь другой линковщик.
У нас по дефолту, как уже писал выше, стоит bfd
vasek
pacman -Ql binutils | grep '/bin/' | grep ld
binutils /usr/bin/ld
binutils /usr/bin/ld.bfd
binutils /usr/bin/ld.gold
Потому я и предположил, что ты сменил линковщик на на другой, на gold (другого нет, если не ставили сами), но похоже дефолтным стал не gold.

Chips
Правда мне так и не понятно почему раньше всё работало и без такого хака
Предположу, что у тебя раньше работало, так как работал дефолтный линковщик bfd, а потом возможно сменился на другой lld, но чтобы его использовать нужно установить пакет lld (Linker from the LLVM project) - проверь стоит ли этот пакет (в состав его входит и файл /usr/bin/lld)
Также посмотри вывод
readelf --string-dump=.comment /usr/bin/grub-install
Строковый дамп раздела «.comment»:
  [     0]  GCC: (GNU) 10.1.0
и у любого другого файла, скомпилированного в последнее время, но без флага CFLAGS="-Os -fuse-ld=bfd"

PS - можно еще проверить, собрав (без установки), например, тот же grub, с параметром -fuse-ld=lld и сравнить entry point (думаю вряд ли будет 9000)
... и такое впечатление, что стоит по дефолту линковщик lld .... хотя какой стоит без разницы, как установили, влияет это только на несколько файлов из grub
Ошибки не исчезают с опытом - они просто умнеют
 
Зарегистрироваться или войдите чтобы оставить сообщение.