打印

U-Boot的问题.

[复制链接]
1384|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
longwuyi|  楼主 | 2012-5-9 10:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在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, [r8, #0]                    @ Save calling PC
07   mrs     r6, spsr
08   str     r6, [r8, #4]                    @ Save CPSR
09   str     r0, [r8, #8]                    @ 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, [sp, #S_PC]   @ 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模式下的堆栈啊????

相关帖子

沙发
lifuhua666666| | 2012-5-11 13:35 | 只看该作者
入栈与出栈模式相同,没有问题。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

61

帖子

0

粉丝