OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 23 Апрель, 2024 10:15

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




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

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Димыч писал(а):
BlackBoxElf стабильно трапит, даже с этими модулями.

Кажется, понял. Замените в BlackBoxElf "LinFiles" на "HostFiles".


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

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Понадобилось изменить процедуру BlackBoxElf и подправить чуть-чуть Kernel, поскольку я делал все на 1.7.

В ближайшее время подготовлю описание процедуры сборки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ElfLinker
СообщениеДобавлено: Понедельник, 31 Октябрь, 2016 14:16 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Мариуполь
Димыч писал(а):
Понадобилось изменить процедуру BlackBoxElf и подправить чуть-чуть Kernel, поскольку я делал все на 1.7.

В ближайшее время подготовлю описание процедуры сборки.

Спасибо за проделанную работу!
Желательно резюмировать в чём суть изменений, что было и что стало.


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

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Итак, порядок действий:

  • Развернуть BB1.7
  • Скопировать файлы из архива в дерево ББ.
  • Скомпилировать:
    • Lin\Mod\Dl
    • Lin\Mod\Libc
    • Lin\Mod\Kernel
    • Lin\Mod\HostFiles
    • Lin\Mod\Init
    • Std\Mod\Loader
  • Открыть файл Dev2\Mod\Linker
    В конце файла выполнить первый коммандер (DevCompiler.CompileThis ...)
  • Затем последний коммандер (Dev2Linker.BlackBoxElf)

На выходе, в корневой папке BB, получится файл BlackBox1.run.
Этот файл, будучи запущенным в Linux, запускает содержимое
модуля Init. Запускать его нужно в папке BB, в которой производилась
компиляция. Фактически, механизм работы StdLoader'а работает.
Если изменить Init и перекомпилировать его, то BlackBox1.run
подхватывает при запуске модифицированный кодовый файл.

Изменения в Kernel были связаны с версией 1.7 ББ.
Добавил Utf8Name, изменил формат Kernel.Name и привел все функции,
его использующие, к компилируемому виду.
Фактически все свелось к тому, что StdLoader из 1.7 скомпилировался без
изменений.
Полагаю, что в версии ядра Freenix Ивана это уже все сделано.
Нужно будет сводить и проверять.

Следующие шаги вижу такие (без особого порядка):
  • Интеграция Dev2Linker в подсистему Dev
  • Приведение интерфейса Dev2Linker к виду, используемому BB (использование символов +, $, - и пр. при вызове)
  • Доработка компоновщика для работы во FreeBSD и MacOS X
  • Доработка процедуры кросс-сборки исполняемых файлов (автоматическая подмена кодовых файлов после сборки)
Вложение:
lin-elf.zip [65.11 КБ]
Скачиваний: 247


Еще раз, Trurl, огромная благодарность за работу!


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3776
В сборке Freenix запустилось сразу!

Теперь надо подумать, как разделить DevLinker на абстрактную и Host часть.


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

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Для FreeBSD и MacOS X надо поменять имя интерпретатора. Там есть переменная elfInterpreter. Для линукса тоже может понадобиться: для старых версий, для всяких легких сборок на uClibc и т.п.


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3776
Димыч писал(а):
Итак, порядок действий:
[*]Доработка процедуры кросс-сборки исполняемых файлов (автоматическая подмена кодовых файлов после сборки)[/list]

Кодовые файлы кросс-платформенные, тут доработка не требуется.


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

Зарегистрирован: Воскресенье, 12 Апрель, 2015 18:12
Сообщения: 1134
Откуда: СССР v2.0 rc 1
Ну вы крутые перцы....)))
У меня мозгов бы и терпения не хватило)))


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

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Иван Денисов писал(а):
Димыч писал(а):
Итак, порядок действий:
[*]Доработка процедуры кросс-сборки исполняемых файлов (автоматическая подмена кодовых файлов после сборки)[/list]

Кодовые файлы кросс-платформенные, тут доработка не требуется.

Я не совсем правильно выразился, наверное.
Компилируешь Lin\Mod\Kernel, получаешь <BB>\Code\Kernel.ocf
Закрываешь ББ, открываешь - он не стартует - модули не те.


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

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Trurl писал(а):
Для FreeBSD и MacOS X надо поменять имя интерпретатора. Там есть переменная elfInterpreter. Для линукса тоже может понадобиться: для старых версий, для всяких легких сборок на uClibc и т.п.

Под FreeBSD тоже файл собрался и даже запустился.
Там начались системные отличия:
  • Библиотека libc имеет версию 7
  • Библиотека libdl отсутствует, ее функции выполняет libc.
  • Как-то по-другому устанавливаются обработчики сигналов (отсутствует функция __sigsetjmp, там она называется sigsetjmp)

По FreeBSD задачу можно считать принципиально решенной, понятно, что еще очень много деталей. ELF под FreeBSD тоже собирается.

Что касается MacOS, то тут ELF не обойдешься, придется делать Mach-O файл.
При имеющемся компоновщике это уже задача, а не исследование :)


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3776
Димыч писал(а):
Иван Денисов писал(а):
Димыч писал(а):
Итак, порядок действий:
[*]Доработка процедуры кросс-сборки исполняемых файлов (автоматическая подмена кодовых файлов после сборки)[/list]

Кодовые файлы кросс-платформенные, тут доработка не требуется.

Я не совсем правильно выразился, наверное.
Компилируешь Lin\Mod\Kernel, получаешь <BB>\Code\Kernel.ocf
Закрываешь ББ, открываешь - он не стартует - модули не те.

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


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

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Trurl писал(а):
Это в эльфийских ОС так. Во FreeBSB программа сама должна вызвать init, а в линуксе она вызывает init и передает ей main одним из аргументов, а уже эта init вызывает main. Весь этот находится в разных crtN.o, которые присоединяются при линковке.

Вот теперь начинаю что-то подозревать (с)
С FreeBSD несколько все сложнее, вы были правы. Сложности не принципиального порядка, разумеется, но все же.
Насчет вызвать init не уверен, но то, что часть кода должна строго соответствовать структуре - факт.
Как минимум, должна быть процедура _start и переменная __progname. Дальше пока не докопался.


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

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Добавил экспорт переменных.
Теперь падает в core dump :)


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

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
https://github.com/dmitrys99/BBElfLinker
В папке Linux - работающая версия компоновщика + описание.
В папке BSD - рабочие материалы по BSD.
Остальные файлы можно игнорировать, пока оставлю для истории.


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

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
На страницу репозитория добавил авторство. Страна должна знать своих героев!
Ну и вообще причесал репозиторий.


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

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Я даже удивился, когда оно в линуксе заработало. Но мне казалось, что в BSD попроще должно быть.


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

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 473
Откуда: KZ
BlackBox-1.6 Kernel для FreeBSD 9.0


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

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 473
Откуда: KZ
Немного изменил LnkWriteElf, и заработало в OpenBSD (6.0)


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

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Alexander Shiryaev писал(а):
Немного изменил LnkWriteElf, и заработало в OpenBSD (6.0)

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


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

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


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

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


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

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


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

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