- 论坛徽章:
- 0
|
下面这段代码是从entry-armv.s中的摘抄的,其中vector_\name后进入的是中断的通用代码
- .macro vector_stub, name, mode, correction=0
- .align 5
- vector_\name:
- .if \correction
- sub lr, lr, #\correction
- .endif
- @
- @ Save r0, lr_ (parent PC) and spsr_
- @ (parent CPSR)
- @
- stmia sp, {r0, lr} @ save r0, lr
- mrs lr, spsr
- str lr, [sp, #8] @ save spsr
- @
- @ Prepare for SVC32 mode. IRQs remain disabled.
- @
- mrs r0, cpsr
- eor r0, r0, #(\mode ^ SVC_MODE)
- msr spsr_cxsf, r0 @为后面进入svc模式做准备
复制代码
我不太明白的是这句 stmia sp, {r0, lr} @ save r0, lr , 按照arm手册上说stmia操作后相应的寄存器地址向上增长,而Linux内核的堆栈是向下增长的。
请求高手指点。 |
|