OpenWiki

Palm Multi Segment

Edit this page (last edited December 2, 2003)
Palm Notes | Recent Changes | Title Index | User Preferences | Random Page | Help
Showing revision 3Статья объясняет идеологию мультисегментных приложений для Palm OS с использованием GCC.

В информатике существует малоизвестный термин ABI - Application Binary Interface. Этим термином называют набор особенностей компьютерной архитектуры, которые нужно учитывать при создании приложения. ABI может накладываться процессором: направление роста стека, размер элемента данных в стеке, порядок байт в слове итд. Также ABI может накладываться операционной системой. Тогда в ABI входит способ вызова системного API, специфика использования адресного пространства и прочие нюансы. Изменения, которые вносятся в GCC для компиляции под Palm OS, нужны именно для соответствия Palm OS ABI.

Что такое приложение с точки зрения Palm OS? Приложение - это база ресурсов. Четыре ресурса из этой базы используются для исполнения программы. Это ресурс 'code' #1, в котором собственно и хранится исполняемый код, который запускается с нулевого байта ресурса. Также из ресурса 'code' #0 берется размеры области глобальных данных. Из ресурса 'pref' #0 берется размер стека. И ресурс 'data' #0 используется для инициализации глобальных данных. Все! До всего остального содержимого базы приложения Palm OS дела нет.

Какие ограничения накладываются на простое односегментное приложение?

  1 Размер ресурса 'code' #0 ограничен 64К. Это ограничение было у Palm OS включая версию 4 и у Хотсинка до версии 5 включительно. Условное ограничение сегмента GCC в 32К лечится заменой скрипта для линкера на text_64k.
  2 Ограничение смещения у команды вызова процедуры в 32К. То есть, если сегмент больше 32К, то функция из начала не может вызвать функцию в конце сегмента. Это можно обойти путем перемещения вызываемых функций "поближе" к вызываемым или созданием прокси-функций в середине сегмента.


Palm Notes | Recent Changes | Title Index | User Preferences | Random Page | Help
Edit revision 3 of this page | View other revisions | View current revision
Print this page | View XML
Find page by browsing, searching or an index
Edited December 2, 2003 (diff)
Valid XHTML 1.0!Valid CSS!