OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Среда, 16 Октябрь, 2019 15:28

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




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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2392
Trurl, а DevElfLinker заменяется новым линкером? Или дополняет его?


Последний раз редактировалось Иван Денисов Суббота, 05 Ноябрь, 2016 18:42, всего редактировалось 1 раз.

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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2392
Trurl писал(а):
Иван Денисов писал(а):
Было бы логично разделить DevLinker на абстрактную и Host часть.

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

Да, понял, что в Host нельзя выносить ничего, так как по задумке, удаление подсистемы Dev должно убирать инструменты разработки. А так получится, что придется что-то из Host вычищать.

Alexander Shiryaev писал(а):
DevLinker (и DevElfLinker, и Dev2Linker) же и так платформонезависим.

Использовать сейчас это неудобно, поэтому и думаю, как встроить. С помощью LinLinker я собирал проекты так через коммандеры:
Вложение:
compile.png
compile.png [ 32.32 КБ | Просмотров: 2797 ]


Сейчас хочется такого-же удобства.


Последний раз редактировалось Иван Денисов Суббота, 05 Ноябрь, 2016 18:47, всего редактировалось 1 раз.

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

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


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2392
Alexander Shiryaev писал(а):
Надо просто реализовать примерно такой же интерфейс, как и в DevLinker (и DevElfLinker), а название можно таким и оставить -- Dev2Linker

И зачем таскать отдельную подсистему под новый сборщик?


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2392
Раз PE виндовые файлы собирает, то получается, что DevLinker заменяется?

Только пока он не умеет ресурсы обрабатывать, если я правильно понял ...


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

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1202
Иван Денисов писал(а):
Да, понял, что в Host нельзя выносить ничего, так как по задумке, удаление подсистемы Dev должно убирать инструменты разработки. А так получится, что придется что-то из Host вычищать.

Дело не в этом. В Host просто выносить нечего. Работа линкера не зависит от платформы.

Иван Денисов писал(а):
Только пока он не умеет ресурсы обрабатывать, если я правильно понял ...

Правильно, ресурсы не умеет. Можно доделать и заменить DevLinker, но нужно ли? Может быть, наоборот, выбросить из него все, связанное с PE?


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2392
Немного, но зависит от платформы, так как после компиляции в Linux надо поставить флаг на выполнение. Но из Windows это сделать нельзя, так как нет Libc. Поэтому выделил в отдельный файл эту операцию DevLnkChmod и вызываю через Dialog.Call. Разделил систему на два уровня абстракции. Первый это стандартный интерфейс DevLinker. Так пользователи Windows ничего не заметят, поскольку на Windows автоматически загрузится DevLinkerWin (старый линкер). Второй уровень абстракции пришлось сделать для DevLinker2 (версия Дехтяренко-Ширяев-Соломенников), чтобы удобно реализовать вызов процедур Init, GetBasis и WriteOut. Поэтому перед запуском коммандера со списком компиляции надо выбрать целевую платформу DevLinker2.InitLinux. Зато получился одинаковый интерфейс в итоге. Будет удобно пользоваться.

Результаты труда прилагаю.
Вложение:
Linker.txt [104.12 КБ]
Скачиваний: 265


Список компиляции и пример в конце модуля DevLinker. Пока проверял только один тип сборки.
Код:
DevLinker.Link BlackBox := Kernel+$ Files HostFiles StdLoader

Александр, я делал для 1.7, поэтому там есть Dialog.IsLinux(), Dialog.IsWindows() и Kernel.StringToUtf8. С твоей версией репозитория пока не совместимо :(


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

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
Иван Денисов писал(а):
после компиляции в Linux надо поставить флаг на выполнение.
Флаг на выполнение нужно поставить файлу или какой-то секции исполнимого файла?


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2392
Valery Solovey писал(а):
Иван Денисов писал(а):
после компиляции в Linux надо поставить флаг на выполнение.
Флаг на выполнение нужно поставить файлу или какой-то секции исполнимого файла?
Я думал, что возможно только целому файлу сделать chmod +x file ...


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

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 444
Откуда: Егорьевск
Сделал интерфейс, похожий на DevLinker/DevElfLinker.


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2392
Alexander Shiryaev писал(а):
Сделал интерфейс, похожий на DevLinker/DevElfLinker.

Хороший интерфейс получился. Но Dev2, это все равно стремно, надо будет все в Dev закинуть.

Александр, Дмитрий и Игорь, при линковке HostConsole возникает трап. Срабатывает какая-то проверка, смысл которой мне не ясен.

stdin import var from DLL
Вложение:
error.png
error.png [ 27.43 КБ | Просмотров: 2756 ]


Код:
Dev2Linker1.LinkElfStatic hello0 := Kernel Files HostFiles Log Dialog Math Strings Console ConsLog HostLang HostConsole ConsHello0 

Dev2Linker1.LinkElfExe Linux hello0 := Kernel$+ Files HostFiles Log Dialog Math Strings Console ConsLog HostLang HostConsole ConsHello0 


ConsHello0 находится в примере Cons/Docu/Log.odc

Эти команды вставил в Dev2/Mod/Linker1.odc в прилагаемом архиве вся система для Ubuntu.


Вложения:
LinuxGUI.7z [1.95 МБ]
Скачиваний: 86
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ElfLinker
СообщениеДобавлено: Воскресенье, 06 Ноябрь, 2016 11:01 
Аватара пользователя

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 444
Откуда: Егорьевск
Иван Денисов писал(а):
Хороший интерфейс получился. Но Dev2, это все равно стремно, надо будет все в Dev закинуть.
Он ещё не готов, поэтому ещё рано это делать, а так вообще хорошо было бы, чтобы компоновщик потом был один.

Иван Денисов писал(а):
stdin import var from DLL
http://forum.oberoncore.ru/viewtopic.php?f=34&t=5459&start=80#p99203
Trurl писал(а):
Импорт переменных не поддерживается.


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

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
Иван Денисов писал(а):
Я думал, что возможно только целому файлу сделать chmod +x file ...
Я это уточнил, потому что совместно с процессом компоновки была упомянута одна из функций файловой системы. chmod должна находиться не в Dev, а в том, что как-то связано с файловой системой.


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

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1202
Иван Денисов писал(а):
Александр, Дмитрий и Игорь, при линковке HostConsole возникает трап. Срабатывает какая-то проверка, смысл которой мне не ясен.

stdin import var from DLL

Надо пройтись по коду и добавить IF error THEN RETURN END или что-то в этом роде, чтобы трапов не было.
А ошибка - нельзя импортировать переменные.


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2392
Trurl писал(а):
Иван Денисов писал(а):
Александр, Дмитрий и Игорь, при линковке HostConsole возникает трап. Срабатывает какая-то проверка, смысл которой мне не ясен.

stdin import var from DLL

Надо пройтись по коду и добавить IF error THEN RETURN END или что-то в этом роде, чтобы трапов не было.
А ошибка - нельзя импортировать переменные.

А, понял, дело значит в этой строчке в HostConsole
Код:
str := Libc.fgets(ss, LEN(ss), Libc.stdin);
я подумал, что stdin — это часть формулировки сообщения об ошибке, лучше будет его в кавычки выделить, например.
Такое ограничение — это сознательный шаг или недостатки реализации? В том плане, возможно ли это доработать в будущем?
А то, сейчас получается, что не могу ни один свой проект собрать этим линкером... кроме Блэкбокса.


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

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Видимо все же надо сделать импорт переменных...


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2392
Димыч писал(а):
Видимо все же надо сделать импорт переменных...

А нельзя скопировать реализацию импорта переменных из LinLinker, там ведь нет такого ограничения?
http://gitlab.molpit.org/blackbox/freen ... Linker.odc


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

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1202
Иван Денисов писал(а):
Такое ограничение — это сознательный шаг или недостатки реализации?

Сознательный недостаток реализации :).
Можно сделать в той схеме, где правится непосредственно код. Но эта схема не везде работает, а современные тенденции ведут к тому, чтобы всячески её ограничивать. В схеме с GOT требуется поддержка компилятора. То же самое, кстати, в Windows: можно импортировать переменную, но ни слинковать её, ни получить динамически нельзя.

К тому же формально (т.е. по стандарту) все переменные в libc являютя макросами. Сейчас они реально переменные, а завтра уже нет. Вон в линуксе errno уже давно не переменная. А в винде и stdin/stdout - макросы. В общем импорта переменных следуе избегать.


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2392
Александр, а есть возможность в Libс как то стандартный ввод иначе получить, кроме как через переменные библиотеки?


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

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1202
Навскидку 3 варианта:
1. Использовать функции, работающие со стандартными потоками (printf, scanf).
2. Роботать с дескрипторами (read, write).
3. Переоткрыть дескрипторы с помощью fdopen.


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

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


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

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


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

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