*参照元 [#d93c4696] #backlinks *説明 [#o0230bfb] -パス: [[linux-2.6.33/arch/arm/kernel/entry-armv.S]] -FIXME: これは何? --説明 **引数 [#f9777e1a] - -- **返り値 [#sf08a25c] - -- **参考 [#xd8791f8] *実装 [#j3cf837d] .macro usr_entry UNWIND(.fnstart ) UNWIND(.cantunwind ) @ don't unwind the user space - --[[linux-2.6.33/UNWIND()]] sub sp, sp, #S_FRAME_SIZE - --[[linux-2.6.33/S_FRAME_SIZE]] ARM( stmib sp, {r1 - r12} ) THUMB( stmia sp, {r0 - r12} ) - --[[linux-2.6.33/ARM()]] - --[[linux-2.6.33/THUMB()]] ldmia r0, {r1 - r3} add r0, sp, #S_PC @ here for interlock avoidance mov r4, #-1 @ "" "" "" "" str r1, [sp] @ save the "real" r0 copied @ from the exception stack @ @ We are now ready to fill in the remaining blanks on the stack: @ @ r2 - lr_<exception>, already fixed up for correct return/restart @ r3 - spsr_<exception> @ r4 - orig_r0 (see pt_regs definition in ptrace.h) @ @ Also, separately save sp_usr and lr_usr @ stmia r0, {r2 - r4} ARM( stmdb r0, {sp, lr}^ ) THUMB( store_user_sp_lr r0, r1, S_SP - S_PC ) - --[[linux-2.6.33/store_user_sp_lr()]] @ @ Enable the alignment trap while in kernel mode @ alignment_trap r0 - --[[linux-2.6.33/alignment_trap()]] @ @ Clear FP to mark the first stack frame @ zero_fp - --[[linux-2.6.33/zero_fp()]] asm_trace_hardirqs_off - --[[linux-2.6.33/asm_trace_hardirqs_off()]] .endm *コメント [#a61077d3]