U-Boot的问题.
在U-Boot 的FIQ中断处理中有如下压栈程序:01 .macro irq_save_user_regs
02 sub sp, sp, #S_FRAME_SIZE
03 stmia sp, {r0 - r12} @ Calling r0-r12
04 add r8, sp, #S_PC
05 stmdb r8, {sp, lr}^ @ Calling SP, LR
06 str lr, @ Save calling PC
07 mrs r6, spsr
08 str r6, @ Save CPSR
09 str r0, @ Save OLD_R0
10 mov r0, sp
11 .endm
而对应的出栈程序如下:
12 .macro irq_restore_user_regs
13 ldmia sp, {r0 - lr}^ @ Calling r0 - lr
14 mov r0, r0
15 ldr lr, @ Get PC
16 add sp, sp, #S_FRAME_SIZE
17 subs pc, lr, #4 @ return & move spsr_svc into cpsr
18.endm
其中第03行在FIQ中断中, 则导致将FIQ的R8..R14入栈.
而第13行时, 直接将R8..R14恢复到User模式的R8..R14中,
这是否会破坏User模式下的堆栈啊????
页:
[1]