OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 05 Декабрь, 2019 17:58

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 163 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8, 9  След.
Автор Сообщение
 Заголовок сообщения: Re: ElfLinker
СообщениеДобавлено: Четверг, 03 Ноябрь, 2016 09:38 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Trurl писал(а):
Кажется надо в заголовок вместо ELFOSABI_NONE поставить ELFOSABI_FREEBSD (странно, но в линуксе как раз ELFOSABI_LINUX не работает) и посмотреть правильный интерпретатор (что-то вроде /usr/libexec/ld-elf.so.N).

В BSD версии я это уже поправил, программа правильно запускается. Но потом падает.
ELFOSABI_LINUX вообще странная вещь, похоже это как-то относится к GNU/Hurd, но никак не к Linux.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ElfLinker
СообщениеДобавлено: Четверг, 03 Ноябрь, 2016 12:17 
Аватара пользователя

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 458
Откуда: Егорьевск
Trurl писал(а):
Кажется надо в заголовок вместо ELFOSABI_NONE поставить ELFOSABI_FREEBSD (странно, но в линуксе как раз ELFOSABI_LINUX не работает) и посмотреть правильный интерпретатор (что-то вроде /usr/libexec/ld-elf.so.N).

В OpenBSD тоже ELFOSABI_NONE. Интерпретатор /usr/libexec/ld.so


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ElfLinker
СообщениеДобавлено: Четверг, 03 Ноябрь, 2016 12:19 
Аватара пользователя

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 458
Откуда: Егорьевск
Димыч писал(а):
Alexander Shiryaev писал(а):
Немного изменил LnkWriteElf, и заработало в OpenBSD (6.0)

SIGBUS не выдает?
Если выдает, игнорируешь?
У меня на FreeBSD запустилось, но в GDB видно, что приложение получает SIGBUS, а поскольку оно не обрабатывается, то выпадает в core. Подозреваю, что это связано с выравниванием данных.
Код crt из FreeBSD содержит директиву для выравнивания кода align 4.

Не выдаёт.

А если использовать компоновщик DevElfLinker16, то BlackBox запускается в FreeBSD?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ElfLinker
СообщениеДобавлено: Четверг, 03 Ноябрь, 2016 19:28 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
С DevElfLinker16 проверял давно, результаты не помню.
Там процесс запуска другой. Там приложение-заглушка нативная, в нее загружается библиотека.

Здесь же SIGBUS выдается в процессе загрузки приложения.
Насколько я понял по отладке, приложение не запускается, поскольку структура у него неправильная.
LibC во FreeBSD довольно требовательна оказалась.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ElfLinker
СообщениеДобавлено: Четверг, 03 Ноябрь, 2016 20:10 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1207
А простые примеры работают? Помнится, у меня тогда на FreeBSD как-то глаже прошло.
Попробую тоже, только переустановть систему надо, у меня еще 6.2 и обновляться не хочет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ElfLinker
СообщениеДобавлено: Четверг, 03 Ноябрь, 2016 20:54 
Аватара пользователя

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 458
Откуда: Егорьевск
BlackBox-1.6 Gtk2 @ FreeBSD 11.0, работает с компоновщиком DevElfLinker16 (с Dev2 не работает).


Вложения:
Комментарий к файлу: BlackBox 1.6 Gtk2 @ FreeBSD 1.6 DevElfLinker16
BlackBox-1.6-Gtk2-FreeBSD-11.0.png
BlackBox-1.6-Gtk2-FreeBSD-11.0.png [ 117.15 КБ | Просмотров: 3142 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ElfLinker
СообщениеДобавлено: Четверг, 03 Ноябрь, 2016 21:09 
Аватара пользователя

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 458
Откуда: Егорьевск
При попытке компоновки Dev2Linker.BlackBoxElfFreeBSD:


Вложения:
Комментарий к файлу: BlackBox 1.6 Gtk2 @ FreeBSD 11.0 Dev2Linker.BlackBoxElfFreeBSD TRAP
BlackBox-1.6-Gtk2-FreeBSD-11.0 Dev2 TRAP.png
BlackBox-1.6-Gtk2-FreeBSD-11.0 Dev2 TRAP.png [ 145.22 КБ | Просмотров: 3138 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ElfLinker
СообщениеДобавлено: Пятница, 04 Ноябрь, 2016 00:38 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1207
Импорт переменных не поддерживается.
А errno надо заменить на вызов __error().


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ElfLinker
СообщениеДобавлено: Пятница, 04 Ноябрь, 2016 06:52 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
От SIGBUS я избавился.
Сделал экспорт переменных и поместил __progname и environ в секцию кода.
При загрузке LibC должна поместить указатели на соответствующие структуры в эти переменные, за что и получает по рукам.
Код помечен только для чтения, а поскольку LibC упасть не может, то информация об этом передается в приложение в виде сигнала.

Изменил расположение переменных, поместил их в данные.
Теперь приложения просто падают с Segmentation fault.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ElfLinker
СообщениеДобавлено: Пятница, 04 Ноябрь, 2016 10:19 
Аватара пользователя

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 458
Откуда: Егорьевск
Trurl писал(а):
Импорт переменных не поддерживается.
А errno надо заменить на вызов __error().

Сделал. Теперь:
Код:
% ./BlackBox1.run
/lib/libc.so.7: Undefined symbol "__progname"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ElfLinker
СообщениеДобавлено: Пятница, 04 Ноябрь, 2016 10:56 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Alexander Shiryaev писал(а):
Trurl писал(а):
Импорт переменных не поддерживается.
А errno надо заменить на вызов __error().

Сделал. Теперь:
Код:
% ./BlackBox1.run
/lib/libc.so.7: Undefined symbol "__progname"

Я это пофиксил. Теперь вот и борюсь с core dump.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ElfLinker
СообщениеДобавлено: Пятница, 04 Ноябрь, 2016 11:36 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Ну в общем я победил BSD. Дело оказалось в структуре таблицы dynsym.
Нужно было пометить символы как глобальные.
Реализация в репозитории, папка BSD.

Во FreeBSD BlackBox1.run работает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ElfLinker
СообщениеДобавлено: Пятница, 04 Ноябрь, 2016 13:28 
Аватара пользователя

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 458
Откуда: Егорьевск
Проверил, теперь запускается, GUI-версия тоже.

Только надо добавить "e_ident[8] := 0X" в Dev2LnkWriteElf.WriteElfHeader, потому что массив e_ident может состоять из ненулевых символов, и при вызове WriteStr в случае,
когда e_ident[7] # ELFOSABI_NONE, происходит выход за границу массива.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ElfLinker
СообщениеДобавлено: Пятница, 04 Ноябрь, 2016 14:39 
Аватара пользователя

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 458
Откуда: Егорьевск
Универсальный компоновщик Dev2 (ELF: Linux, FreeBSD, OpenBSD)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ElfLinker
СообщениеДобавлено: Пятница, 04 Ноябрь, 2016 15:43 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Отладочный код не удалил :)
Я бы еще e_ident полностью инициализировал, не только последний символ строки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ElfLinker
СообщениеДобавлено: Пятница, 04 Ноябрь, 2016 17:48 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1207
Димыч писал(а):
ELFOSABI_LINUX вообще странная вещь, похоже это как-то относится к GNU/Hurd, но никак не к Linux.

Оказывается? это относится к FreeBSD. :evil: Так помечаются файлы, которые должны выпоняться чарез Linux ABI.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ElfLinker
СообщениеДобавлено: Пятница, 04 Ноябрь, 2016 17:59 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1207
Вот ещё, не только мы паримся: https://golang.org/src/runtime/cgo/freebsd.go


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ElfLinker
СообщениеДобавлено: Суббота, 05 Ноябрь, 2016 07:53 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2464
Давайте обсудим как это интегрировать в Блэкбокс. Раз теперь есть возможность полноценной кросскомпиляции, то возможно несколько вариантов.

Если исходить из той парадигмы, которую нам предлагают исходно Oberon microsystems, то у нас есть каталог Host, отвечающий за ту или иную платформу в конкретной сборке, и DevLinker должен использовать сборщик характерный для текущей платформы. Было бы логично разделить DevLinker на абстрактную и Host часть. При этом кроссплатформенная линковка происходит через временную замену HostLinker.

Попробую сделать прототип такой системы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ElfLinker
СообщениеДобавлено: Суббота, 05 Ноябрь, 2016 10:37 
Аватара пользователя

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 458
Откуда: Егорьевск
DevLinker (и DevElfLinker, и Dev2Linker) же и так платформонезависим.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ElfLinker
СообщениеДобавлено: Суббота, 05 Ноябрь, 2016 11:50 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1207
Иван Денисов писал(а):
Было бы логично разделить DevLinker на абстрактную и Host часть.

Там нет части host, есть target.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 163 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8, 9  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB