我正在使用基于ARM cortex-A8的S5PV210
当我声明这样的中断例程时:
void isr_routine(void) __attribute__ ((interrupt ("IRQ")));
并像这样编译
arm-linux-gcc -c -march=armv7-a -fpie -fno-builtin $< -o $@
我知道gcc会通过推送一些寄存器为我切换上下文.在我知道这一点之前,我手动完成了.所以我很好奇gcc是如何做到的.
拆解后,我找到了如下代码
PUSH {r0-r4,r11,r12,lr}
这与我关于如何切换上下文的概念背道而驰.
在Arm cortex-A8官方文档中,明确表示r0-r12由用户模式和IRQ模式共享.但是用户模式中的lr独立于IRQ模式.所以,我曾经像这样切换上下文
PUSH {r0-r12}
可以吗?为什么gcc推送lr注册,为什么gcc不推r5-r10 rigsters?