Соглашения о вызовах для структур на основе стека в ARM? - PullRequest
1 голос
/ 07 декабря 2011

Как структуры на основе стека передаются подпрограммам в сборке ARM?

Например:

typedef struct SomeStruct { 
    uint32_t one;
    uint32_t two;
    uint32_t three;
    uint32_t four;
} SomeStruct;

void SomeFunction(uint32_t someValue, SomeStruct someStruct, uint32_t otherValue);

В таком случае, как будет проходить структура? Мое предположение:

  • r0 - someValue
  • r1 - someStruct.one
  • r2 - someStruct.two
  • r3 - someStruct.three
  • *sp - someStruct.four
  • *sp,#4 - otherValue

Это правильно или что-то еще происходит? Или оно просто передает адрес структуры sp ?

1 Ответ

5 голосов
/ 07 декабря 2011

Здесь есть «стандарт вызова процедуры» для ARM ABI: http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042d/IHI0042D_aapcs.pdf

Существует более одного ABI для ARM, и еще раз для 64-битного ARM, но просто посмотрите на этот, соответствующийраздел «5.5 Передача параметров».На первый взгляд, я думаю, что C.5 говорит, что вы правы, эта структура будет разделена между r1-r3 и стеком.

B.1, который может заменить аргумент составного типа указателем накопия в памяти никогда не применяется в C, так как и вызывающий, и вызываемый должны иметь SomeStruct как полный тип для передачи по значению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...