OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 19:24

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




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

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

Может, завести библиотеку-переходник, в которую свалить все, что надо из сишных библиотек?


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Trurl писал(а):
h_errno deprecated в posix-2001 и совсем удалена в posix-2008, надо от неё избавляться.

А, теперь понятно, почему сетевые функции не давали приложению запускаться на 16.04.
viewtopic.php?f=34&t=5876&p=98000#p97996
Надо будет новый вариант теперь выложить.


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

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 473
Откуда: KZ
Trurl писал(а):
h_errno deprecated в posix-2001 и совсем удалена в posix-2008, надо от неё избавляться.

Да, надо использовать getaddrinfo() вместо gethostbyname() в CommTCP...


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

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 473
Откуда: KZ
Заменил gethostbyname() на getaddrinfo(), и h_errno больше не нужна.


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

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 473
Откуда: KZ
Trurl писал(а):
Код:
PROCEDURE ExportVar*(mod: Module; IN name: STRING; addr: INTEGER);
   VAR sym: Symbol;
BEGIN
   NEW(sym);
   sym.name := name$;
   sym.sect := mod.vars;
   sym.addr := addr;
   sym.next := expList;
   expList := sym;
   INC(expCount);
END ExportVar;


А почему sym.sect := mod.vars, а у Дмитрия mod.data?


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

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Разницы, видимо, нет. Главное, чтобы не code.


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

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Trurl писал(а):
Димыч писал(а):
Какие же все-таки разные подходы в ОС...

Может, завести библиотеку-переходник, в которую свалить все, что надо из сишных библиотек?

Предлагаю создать модуль HostVars, который будет содержать эти самые переменные и при компоновке он будет обрабатываться через ExportModuleVars, но для разных систем будет разная инициализация.
Для того, чтобы инициализация вызывалась, этот модуль можно импортировать в HostFiles, который всегда участвует в компоновке.


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

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Димыч писал(а):
Разницы, видимо, нет. Главное, чтобы не code.

Как это нет? Если data, то переменная будет где-то в области дескрипторов.

Хотя, конечно, память экономится.


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

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Trurl писал(а):
Димыч писал(а):
Разницы, видимо, нет. Главное, чтобы не code.

Как это нет? Если data, то переменная будет где-то в области дескрипторов.

Хотя, конечно, память экономится.

Главное слово было "видимо" :)
Я таки не знаю разницу между этими двумя областями, vars и data.


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

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

У меня идея более радикальная - собрать все зависимости в один сишный модуль, пусть он выдает всё в нужном нам формате. Сейчас интерфейс приходится выковыривать из десятков заголовочных файлов, пусть бы этим компилятор си занимался.


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

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

vars - область переменных, в data находятся дескрипторы, константы и прочая информация, которую туда пихает компилятор.


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Trurl писал(а):
Димыч писал(а):
Предлагаю создать модуль HostVars, который будет содержать эти самые переменные

У меня идея более радикальная - собрать все зависимости в один сишный модуль, пусть он выдает всё в нужном нам формате. Сейчас интерфейс приходится выковыривать из десятков заголовочных файлов, пусть бы этим компилятор си занимался.

Фишка нового линкера как раз в том, чтобы избавиться от сишных привязок. Так что назад к сишным прибамбасам как-то не хочется возвращаться.


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

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


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Trurl писал(а):
Кака можно избавиться от сишных привязок, если всё на сишных библиотеках построено.

Я имел в виду привязок к сишным компиляторам, как раньше до Вашего линкера приходилось делать компиляцию сишного загрузчика.


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

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Можно добавить в код инициализации "mov ebp, esp", чтобы проже было аргументы вытаскивать.
Хотя, и сейчас можно, но чуть больше магии:
Код:
SYSTEM.GETREG(SP, baseStack);
SYSTEM.GET(baseStack + 16, argc);
argv := SYSTEM.VAL(Libc.StrArray, baseStack + 20);


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

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 473
Откуда: KZ
Trurl писал(а):
Можно добавить в код инициализации "mov ebp, esp", чтобы проже было аргументы вытаскивать.
Хотя, и сейчас можно, но чуть больше магии:
Код:
SYSTEM.GETREG(SP, baseStack);
SYSTEM.GET(baseStack + 16, argc);
argv := SYSTEM.VAL(Libc.StrArray, baseStack + 20);

В OpenBSD так:
Код:
(* OpenBSD 5.5 @ i386 *)
   USRSTACK = 0CFBFE000H; (* /usr/include/i386/vmparam.h *)
   argcAdr = USRSTACK - 3 * 4;
   argvAdr = USRSTACK - 4 * 4;

/usr/include/i386/vmparam.h


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

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Во всех юниксах на x86 одинаково: при старте программы на вершине стека argc, за ним argv и env.
Но линкер вставляет call body, плюс компилятор сохраняет EBP, EDI, ESI. Вот и набегает 16 байт.

А что такое USRSTACK?


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

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 473
Откуда: KZ
Trurl писал(а):
А что такое USRSTACK?

Константа. Сейчас проверил -- в OpenBSD 6.0 уже так не работает.


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

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 473
Откуда: KZ
Код:
/* USRSTACK, OpenBSD */
#include <sys/param.h>
#include <uvm/uvm_extern.h>
#include <machine/vmparam.h>

#include <stdio.h>

int main (int argc, char *argv[])
{
    int x;

    printf("USRSTACK = %08x, &argc = 0x%08x (%d), &x = 0x%08x (%d)\n", USRSTACK, &argc, (int)&argc - USRSTACK, &x, (int)&x - USRSTACK);

    return 0;
}

Код:
$ ./test_args
USRSTACK = cf7fe000, &argc = 0xcf7c77f0 (-223248), &x = 0xcf7c77c8 (-223288)
$ ./test_args
USRSTACK = cf7fe000, &argc = 0xcf7eb0e0 (-77600), &x = 0xcf7eb0b8 (-77640)
$ ./test_args
USRSTACK = cf7fe000, &argc = 0xcf7cc450 (-203696), &x = 0xcf7cc428 (-203736)
$ ./test_args
USRSTACK = cf7fe000, &argc = 0xcf7f6130 (-32464), &x = 0xcf7f6108 (-32504)
$ ./test_args
USRSTACK = cf7fe000, &argc = 0xcf7ed440 (-68544), &x = 0xcf7ed418 (-68584)


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

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


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

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


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

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


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

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