OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 29 Март, 2024 15:55

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




Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Модификаторы ccall ccall16
СообщениеДобавлено: Пятница, 06 Январь, 2023 21:33 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
luowy писал(а):
However, gcc is known to always align the stack to 16bytes. I didn't know that these array also requires a 16-byte alignment....
due to using SSE sometimes GCC-generated code expects passed buffer pointers to be aligned on 16 bytes too, even on 32-bit x86 arch. 4-byte align works most of the time, but sometimes there can be a mysterious crash, just as with the SDL case you mentioned. so it's better to play safe, and always align arrays to be passed to C API to 16 bytes. it trades some small stack space for much improved code stability. i once hit such bug with libopus, for example. it's always better to have this feature implemented in the compiler in case we'll need it. ;-)

luowy писал(а):
2,Add the align16 syntax as your suggestion
thank you for your help! that's really great that we have somebody who can implement such feature in a blink of an eye. ;-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модификаторы ccall ccall16
СообщениеДобавлено: Суббота, 07 Январь, 2023 00:18 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 660
arisu писал(а):
так мы убиваем двух зайцев: сохраняем совместимость со старым исходным кодом, который использует `[ccall]`/`[ccall16]` (ну да, придётся перекомпилировать один раз), и почти полностью убираем проблему «необъяснимых падений».


(1) При этом мы теряем совместимость с существующим соглашением об отображении модулей на файлы. Сейчас ББ для обеих платформ может находиться в одном каталоге. А после принятия этого хака - нужно отдельно компилировать для каждой платформы и отдельно хранить для каждой платформы. Вам, может, это не особо чувствительно, а у меня инструменты завязаны на существующее соглашение, и рабочий процесс.

(2) При этом мы не то что совместимость теряем, а вовсе какой-то хаос привносим в ocf. Вот, допустим, перед нами M.ocf. В нем стек выравнен на 4 или на 16? Он для Лин или Вин? неизвестно. Проверить это загрузчик никак не может.

Проблема "необъяснимых падений", замечу, пока что гипотетическая - в существующих модулях для SDL2 она решена за счет ccall16. Хочется, чтобы она и осталась гипотетической. Но предложенное решение неудовлетворительно, его нужно дорабатывать.

Если уж зашла речь о том, что платформы несовместимы на уровне АБИ - то нужно это явно провести: согласиться, что в ocf идентификатор архитектуры идентифицирует не только архитектуру, но и платформу, и иметь тогда W386 и L386.
И в отображение модулей на файлы тоже ввести изменения: Module.w386 Module.L386. Например.

А вообще-то, решение-то уже есть у этой проблемы. Тот же SDL2 работает с [ccall16] без падений. Видимо, писанины для вас больше - сделать два интерфейсных модуля GitDll, GitSo, два платформенных модуля GitLin, GitWin, и еще единый модуль с высокоуровневым интерфейсом к гиту GitService, в который по шаблону Крюк будет устанавливаться GitLin или GitWin, в зависимости от платформы. (Собсно, так сейчас сделаны все "контакты" с платформой в самом ББ).
А вам бы хотелось один GitDllSo, и напрямую вызывать библиотечные процедуры.
Конечно, хлопотнее иметь несколько модулей, но решение рабочее, и совместимости не ломает.
На другой чаше весов - потеря совместимости + скрытая цена в виде переделки (перекомпиляции) всех модулей ББ, а их более 300, емнип.
Ну или, как я выше описал, честное введение понятия платформ в ocf и загрузчик.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модификаторы ccall ccall16
СообщениеДобавлено: Суббота, 07 Январь, 2023 00:25 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 660
arisu писал(а):
правильный синтаксис для вызова C-функций — `[ccall]`

Звучит заманчиво - объявляем, что это c-функция, а обо всем дальше компилятор позаботится. Есть ли гарантия, что в рамках одной платформы это всегда одно и то же АБИ? Т.е. что на платформе, где принят АБИ1, не встретится библиотека (чьего-нибудь стороннего производства) с другим АБИ2? И при этом они все, ессно, с-функции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модификаторы ccall ccall16
СообщениеДобавлено: Суббота, 07 Январь, 2023 01:47 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
да (ну, насколько я знаю). оно для того и было придумано, чтобы разные языки и компиляторы взаимодействовали без особых проблем. если объявлено как внешнее cdecl — то обязаны соблюдать. (привет, GCC! когда-нибудь твои авторы… а, чего я, никогда.) `[ccall16]` полностью совместим с `[ccall]`, так что никаких проблем (кроме нескольких байт дополнительного кода) быть не должно.


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

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


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

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


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

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