UContext
Модератор: Модераторы
-
Андрей Парамонов
- незнакомец
- Сообщения: 3
- Зарегистрирован: 20.11.2013 09:32:50
UContext
Привет всем!
Хочу использовать в программе функции, описанные в
http://pubs.opengroup.org/onlinepubs/00 ... ext.h.html
Я так понимаю, что это системные вызовы. Но ни в sysutils, ни в baseunix, ни в linux я готовой обёртки над ними не нашёл.
Как их подключить вручную?
Хочу использовать в программе функции, описанные в
http://pubs.opengroup.org/onlinepubs/00 ... ext.h.html
Я так понимаю, что это системные вызовы. Но ни в sysutils, ни в baseunix, ни в linux я готовой обёртки над ними не нашёл.
Как их подключить вручную?
По названию функций контекстным поиском не нашли в юнитах FPC? Тогда брать документацию разработчиков и писать свой юнит-посредник:
Только внимательно смотрите, чтобы названия функций не совпадали с теми, которые в других подключаемых модулях уже существуют.
Function НазваниеФункции(Параметры: типы как в FPC): ВозвращаемыйТип; stdcall; external 'НазваниеБиблиотеки';
Только внимательно смотрите, чтобы названия функций не совпадали с теми, которые в других подключаемых модулях уже существуют.
-
Андрей Парамонов
- незнакомец
- Сообщения: 3
- Зарегистрирован: 20.11.2013 09:32:50
Function НазваниеФункции(Параметры: типы как в FPC): ВозвращаемыйТип; stdcall; external 'НазваниеБиблиотеки';
Ну названия функций и даже типы-как-в-fpc я положим знаю (в том документе это описано).
А вот что писать вместо НазваниеБиблиотеки?
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
Можно начать с 'libc.so'.
- Иван Шихалев
- энтузиаст
- Сообщения: 1138
- Зарегистрирован: 15.05.2006 11:26:13
- Откуда: Екатеринбург
- Контактная информация:
Очень сильно подозреваю, что там cdecl, а не stdcall...
Sergei I. Gorelkin писал(а):Можно начать с 'libc.so'.
FreeBSD действительно говорить, что это libc.so, но в Linux'ах это может быть и не так. Отсюда вывод - пользуйтесь FreeBSD.
Иван Шихалев писал(а):Очень сильно подозреваю, что там cdecl, а не stdcall...
Вполне возможно, т.к. я этим делом никогда не интересовался. Правда я не совсем понял принципиального отличия этих вызовов - и то и другое берёт параметры с хвоста к носу, стек чистит вызывающая программа и всё идёт через стек.
Я что-то упустил?
- Иван Шихалев
- энтузиаст
- Сообщения: 1138
- Зарегистрирован: 15.05.2006 11:26:13
- Откуда: Екатеринбург
- Контактная информация:
Vadim писал(а):Я что-то упустил?
При stdcall стек чистит вызываемая подпрограмма.
Ага. Нашёл сейчас в исходниках юнита libc все объявления для UContext. Там действительно стоит cdecl.
Так что вручную можно не писать.
Так что вручную можно не писать.
-
Андрей Парамонов
- незнакомец
- Сообщения: 3
- Зарегистрирован: 20.11.2013 09:32:50
Да, но http://wiki.freepascal.org/libc_unit говорит:
FAQ: The libc unit is deprecated, and frozen in time for Kylix compatibility, and won't be ported to other architectures or operating systems.
FAQ: The libc unit is deprecated, and frozen in time for Kylix compatibility, and won't be ported to other architectures or operating systems.
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
С libc имеется один маленький нюанс: содержимое заголовков может меняться с каждым обновлением. POSIX подразумевает, что система сборки умеет определять, где она находится, и какие функции доступны, в том числе путем парсинга заголовочных файлов. Поэтому для сборки, условно, 20 кБ исходников типично требуется пол-мегабайта скриптов.
FPC для Linux не интегрируется в эту систему, поэтому его RTL не содержит вызовов из libc и их добавление исключено.
Собственно, объявление ucontext из linux/sighndh.inc, скорее всего, было правильным на момент написания.
FPC для Linux не интегрируется в эту систему, поэтому его RTL не содержит вызовов из libc и их добавление исключено.
Собственно, объявление ucontext из linux/sighndh.inc, скорее всего, было правильным на момент написания.
