Соглашение о вызовах iPhone/ARM

на iPhone / ARM, какие регистры ЦП должны сохранять функции, если таковые имеются?


person Seva Alekseyev    schedule 08.05.2010    source источник


Ответы (2)


В статье Википедии о Соглашении о вызовах содержится хороший обзор соглашений для ARM.

person Rob Napier    schedule 08.05.2010
comment
На всех ОС - одна и та же конвенция? Я считаю, что трудно поверить. В x86 существуют десятки соглашений. - person Seva Alekseyev; 09.05.2010
comment
Авторы статьи хорошо упомянули об этом в разделе, посвященном x86, отметив, насколько примечательно наличие такого количества (в основном из-за отсутствия регистров), и предоставив отдельную статью с их объяснением. Обсуждение этой темы в Википедии является наиболее полным из всех, что я видел, и содержит более подробное обсуждение того, почему x86 имеет такую ​​мешанину решений по сравнению с другими чипами. Вкратце: на заре x86 (в отличие от других чипов) несколько поставщиков компиляторов пошли разными путями. Но сегодня, даже на x86, есть сильный шаг к стандартизации ABI. - person Rob Napier; 09.05.2010

Старый, но неверный ответ. Википедия часто бывает неточной (иногда совершенно неверной), и это пример первого случая. Существует общее соглашение о вызовах (это то, что документирует Википедия), но операционные системы могут отклоняться - как Android, так и iOS (и, вероятно, Win 8 будет, но мы узнаем об этом, когда начнут появляться двоичные файлы)

http://developer.apple.com/library/ios/#documentation/Xcode/Conceptual/iPhoneOSABIReference/Introduction/Introduction.html содержит правильную спецификацию для iOS, поэтому нет смысла здесь повторяться. В частности, обратите внимание на использование r7 и r12. Также обратите внимание, что ARMv6 и ARMv7 отличаются. К настоящему времени вам нужны архитектуры ARMv7 (A4,5,6..)

person Technologeeks    schedule 29.10.2012
comment
Различное использование R7 не ломает ABI, а только инструменты отладки. Важным отличием iOS ABI от EABI является выравнивание 64-битных аргументов: iOS использует выравнивание по 4 байтам, а EABI — 8. - person Igor Skochinsky; 30.10.2012