sto usando S5PV210 che si basa su ARM Cortex-A8Perché arm-linux-gcc unica riserva R0-r4 quando si entra in modalità IRQ
Quando dichiaro una routine di interrupt come questo:
void isr_routine(void) __attribute__ ((interrupt ("IRQ")));
e compilare come questo
arm-linux-gcc -c -march=armv7-a -fpie -fno-builtin $< -o [email protected]
so che gcc passerà contesto per me da un po 'di spinta registers.Before so che questo, ho fatto manually.So io sono curioso di sapere come gcc lo fanno. Dopo lo smontaggio, ho trovato i codici come sotto
PUSH {r0-r4,r11,r12,lr}
Va contro la mia concezione su come cambiare contesto. In ARM Cortex-A8 documento ufficiale, è esplicito che R0-R12 è condivisa da modalità utente e IRQ mode.However lr in modalità utente è indipendente dalla IRQ mode.So, ho usato per cambiare contesto come questo
PUSH {r0-r12}
Va bene? Perché gcc push lr registra e perché non gcc push rigers r5-r10?