1.6.2. cal reg value and store

	sub	r2, r2, #(CONFIG_STACKSIZE+CFG_MALLOC_LEN)1
	sub	r2, r2, #(CFG_GBL_DATA_SIZE+8)  @ set base 2 words into abort stack2
	ldmia	r2, {r2 - r3}			@ get pc, cpsr3
	add	r0, sp, #S_FRAME_SIZE		@ restore sp_SVC4
	add	r5, sp, #S_SP5
	mov	r1, lr6
	stmia	r5, {r0 - r3}			@ save sp_SVC, lr_SVC, pc, cpsr7
	mov	r0, sp8
	.endm9
        

1

此处:

r2

= r2 - ( CONFIG_STACKSIZE+CFG_MALLOC_LEN)

= r2 – (128*1024 + 256*1024)

= 0x33D00000 - 384KB

= 0x33CA0000

2

此处:

r2

= r2 - (CFG_GBL_DATA_SIZE + 8)

= 0x33CA0000 – (128 + 8)

= 0x33C9FF78

3

分别将地址为r2和r2+4的内容,即地址为0x33C9FF780x33C9FF7C中的内容,load载入给r2和r3寄存器。

4

将sp的值,加上72,送给r0

5

前面的定义是:

#define S_SP		52

所以此处就是将sp的值,加上52,送给r5

6

将lr给r1

7

然后将r0到r3中的内容,存储到地址为r5-r5+12中的位置去。

8

将sp再赋值给r0

9

结束宏bad_save_user_regs