longwuyi 发表于 2012-5-9 13:40:36

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]
查看完整版本: U-Boot的问题.