打印

u-boot 第一阶段代码求解

[复制链接]
1360|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jy02326166|  楼主 | 2013-6-4 22:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
.macro get_bad_stack
        ldr        r13, _armboot_start                @ setup our mode stack
        sub        r13, r13, #(CONFIG_STACKSIZE+CFG_MALLOC_LEN)
        sub        r13, r13, #(CFG_GBL_DATA_SIZE+8) @ reserved a couple spots in abort stack

        str        lr, [r13]                        @ save caller lr / spsr
        mrs        lr, spsr            @ spsr to lr
        str lr, [r13, #4]

        mov        r13, #MODE_SVC                @ prepare SVC-Mode   MODE_SVC = 0x13
        @ msr        spsr_c, r13
        msr        spsr, r13           @ r13 to spsr
        mov        lr, pc
        movs        pc, lr
        .endm

.macro        bad_save_user_regs
        sub        sp, sp, #S_FRAME_SIZE
        stmia        sp, {r0 - r12}                        @ Calling r0-r12
        ldr        r2, _armboot_start
        sub        r2, r2, #(CONFIG_STACKSIZE+CFG_MALLOC_LEN)
        sub        r2, r2, #(CFG_GBL_DATA_SIZE+8)  @ set base 2 words into abort stack
        ldmia        r2, {r2 - r3}                        @ get pc, cpsr
        add        r0, sp, #S_FRAME_SIZE                @ restore sp_SVC

        add        r5, sp, #S_SP
        mov        r1, lr
        stmia        r5, {r0 - r3}                        @ save sp_SVC, lr_SVC, pc, cpsr
        mov        r0, sp
        .endm

异常时这样顺序执行,红色部分的sp值时多少,我一直没弄清楚.如果sp是R13的话那不就是MODE_SVC = 0x13吗?显然不对啊~

相关帖子

沙发
Xplain| | 2013-6-8 22:13 | 只看该作者
每个模式的SP值是一上电就设好了的,异常时进到这里的时候SP值就是刚上电的时候设置的值,如果上电的时候没设,那就是0咯,像uboot一般不用中断,MODE_IRQ的SP不设置也没关系

使用特权

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

本版积分规则

35

主题

105

帖子

0

粉丝