GenaSPB 11 14 февраля, 2013 Опубликовано 14 февраля, 2013 · Жалоба В принципе, любой компилятор C для любого процессора должен при входе в функцию сохранить в стеке те регистры, которые используются в этой функции. Или переключиться на другой набор регистров. Надеюсь, Вы понимаете, что это зависит от используемого соглашения о вызовах? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 14 февраля, 2013 Опубликовано 14 февраля, 2013 · Жалоба Надеюсь, Вы понимаете, что это зависит от используемого соглашения о вызовах? Я считаю, что программист может об этом не думать при создании программы, разве что для расширения кругозора. Вот единственное, что приходит на ум, когда нужно знать, что куда занеслось при вызове. __asm void HardFault_Handler(void) { TST LR, #4 ITE EQ MRSEQ R0, MSP ; Main Stack was used, put MSP in R0 MRSNE R0, PSP ; Process Stack was used, put PSP in R0 LDR R0,[R0, #24] ; Get stacked PC from stack B . } Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ReAl 0 14 февраля, 2013 Опубликовано 14 февраля, 2013 · Жалоба Просто, где это сказано? Где написано, что эти соглашения действуют для gcc с ключами "по умолчанию". Поиск чертырех букв APCS - абревиатуры названия на сайте gnu ничего не даёт (только как часть имени ключа). Ленивый поток ассоциаций… APCS/соглашение о вызовах — часть EABI. arm-*-eabi-gcc работает по eabi Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 15 февраля, 2013 Опубликовано 15 февраля, 2013 · Жалоба Для примера, как выглядит соответствующая глава документации (цитата НЕ из GCC): 9.3 Calling Convention In order to keep the binary compatibility with gcc and vc, ucc conforms to the calling convention of these compilers. (1) When calling a function, the actual parameters will be pushed onto stack from right to left. The caller will pop the parameters. (2) preserve registers:EBX, ESI and EDI which will be saved by the callee. scratch registers:EAX, ECX and EDX which will be saved by the caller. (3) function return value: if the return value is integer type,EAX holds the return value. if the return value is floating point type,ST(0) holds the return value. if the return value is struct/union type in size 1, 2 or 4, EAX holds the return value. if the return value is struct/union type in size 8, (EAX, EDX) holds the return value. if the return value is struct/union type in other size, the function’s first parameter is implicit which is the address of the function return value’s receiver, the function’s return type will be void. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 15 15 февраля, 2013 Опубликовано 15 февраля, 2013 · Жалоба Вот же: Procedure Call Standard for the ARM Architecture. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 15 февраля, 2013 Опубликовано 15 февраля, 2013 (изменено) · Жалоба Вот же: Procedure Call Standard for the ARM Architecture. Уже указывали... Это документ фирмы под названием ARM Ltd, с гарантией на этом документе базируется компилятор KEIL фирмы ARM Ltd. Если GCC делали применяя этот документ, инфомация исчерпывающая. Просто явного указания на то, что gcc основывается на этом документе, нигде нет. ps: всё, завязываю. Просьба тему закрыть. Изменено 15 февраля, 2013 пользователем Genadi Zawidowski Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться