我正在使用基于 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 注册,为什么不推送 r5-r10 绑定?