UContext

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

UContext

Сообщение Андрей Парамонов » 20.11.2013 09:37:12

Привет всем!
Хочу использовать в программе функции, описанные в
http://pubs.opengroup.org/onlinepubs/00 ... ext.h.html
Я так понимаю, что это системные вызовы. Но ни в sysutils, ни в baseunix, ни в linux я готовой обёртки над ними не нашёл.
Как их подключить вручную?
Андрей Парамонов
незнакомец
 
Сообщения: 3
Зарегистрирован: 20.11.2013 09:32:50

Re: UContext

Сообщение Vadim » 20.11.2013 15:22:43

По названию функций контекстным поиском не нашли в юнитах FPC? Тогда брать документацию разработчиков и писать свой юнит-посредник:

Function НазваниеФункции(Параметры: типы как в FPC): ВозвращаемыйТип; stdcall; external 'НазваниеБиблиотеки';

Только внимательно смотрите, чтобы названия функций не совпадали с теми, которые в других подключаемых модулях уже существуют.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: UContext

Сообщение Андрей Парамонов » 20.11.2013 22:13:50

Function НазваниеФункции(Параметры: типы как в FPC): ВозвращаемыйТип; stdcall; external 'НазваниеБиблиотеки';

Ну названия функций и даже типы-как-в-fpc я положим знаю (в том документе это описано).
А вот что писать вместо НазваниеБиблиотеки?
Андрей Парамонов
незнакомец
 
Сообщения: 3
Зарегистрирован: 20.11.2013 09:32:50

Re: UContext

Сообщение Sergei I. Gorelkin » 21.11.2013 02:25:56

Можно начать с 'libc.so'.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1407
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: UContext

Сообщение Иван Шихалев » 21.11.2013 03:00:41

Очень сильно подозреваю, что там cdecl, а не stdcall...
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Re: UContext

Сообщение Vadim » 21.11.2013 14:17:31

Sergei I. Gorelkin писал(а):Можно начать с 'libc.so'.

FreeBSD действительно говорить, что это libc.so, но в Linux'ах это может быть и не так. Отсюда вывод - пользуйтесь FreeBSD. :)

Иван Шихалев писал(а):Очень сильно подозреваю, что там cdecl, а не stdcall...

Вполне возможно, т.к. я этим делом никогда не интересовался. Правда я не совсем понял принципиального отличия этих вызовов - и то и другое берёт параметры с хвоста к носу, стек чистит вызывающая программа и всё идёт через стек.
Я что-то упустил?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: UContext

Сообщение Иван Шихалев » 21.11.2013 15:44:14

Vadim писал(а):Я что-то упустил?

При stdcall стек чистит вызываемая подпрограмма.
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Re: UContext

Сообщение Vadim » 22.11.2013 08:34:19

Ага. Нашёл сейчас в исходниках юнита libc все объявления для UContext. Там действительно стоит cdecl.
Так что вручную можно не писать. :)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: UContext

Сообщение Андрей Парамонов » 22.11.2013 11:29:18

Да, но 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.
Андрей Парамонов
незнакомец
 
Сообщения: 3
Зарегистрирован: 20.11.2013 09:32:50

Re: UContext

Сообщение Sergei I. Gorelkin » 22.11.2013 13:32:01

С libc имеется один маленький нюанс: содержимое заголовков может меняться с каждым обновлением. POSIX подразумевает, что система сборки умеет определять, где она находится, и какие функции доступны, в том числе путем парсинга заголовочных файлов. Поэтому для сборки, условно, 20 кБ исходников типично требуется пол-мегабайта скриптов.

FPC для Linux не интегрируется в эту систему, поэтому его RTL не содержит вызовов из libc и их добавление исключено.

Собственно, объявление ucontext из linux/sighndh.inc, скорее всего, было правильным на момент написания.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1407
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград


Вернуться в Free Pascal Compiler

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

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

Рейтинг@Mail.ru