*参照元 [#q121ee50] #backlinks *説明 [#e3585a78] -パス: [[linux-2.6.33/]] -パス: [[linux-2.6.33/arch/arm/kernel/entry-armv.S]] -FIXME: これは何? --説明 **引数 [#aec93045] - -- **返り値 [#f5191226] - -- **参考 [#n690a81c] *実装 [#m893f637] .macro svc_entry, stack_hole=0 UNWIND(.fnstart ) - --[[linux-2.6.33/UNWIND()]] UNWIND(.save {r0 - pc} ) sub sp, sp, #(S_FRAME_SIZE + \stack_hole - 4) - --[[linux-2.6.33/S_FRAME_SIZE]] #ifdef CONFIG_THUMB2_KERNEL - --[[linux-2.6.33/CONFIG_THUMB2_KERNEL]] SPFIX( str r0, [sp] ) @ temporarily saved SPFIX( mov r0, sp ) SPFIX( tst r0, #4 ) @ test original stack alignment SPFIX( ldr r0, [sp] ) @ restored - --[[linux-2.6.33/SPFIX()]] #else SPFIX( tst sp, #4 ) #endif SPFIX( subeq sp, sp, #4 ) stmia sp, {r1 - r12} ldmia r0, {r1 - r3} add r5, sp, #S_SP - 4 @ here for interlock avoidance mov r4, #-1 @ "" "" "" "" add r0, sp, #(S_FRAME_SIZE + \stack_hole - 4) SPFIX( addeq r0, r0, #4 ) str r1, [sp, #-4]! @ save the "real" r0 copied @ from the exception stack mov r1, lr @ @ We are now ready to fill in the remaining blanks on the stack: @ @ r0 - sp_svc @ r1 - lr_svc @ r2 - lr_<exception>, already fixed up for correct return/restart @ r3 - spsr_<exception> @ r4 - orig_r0 (see pt_regs definition in ptrace.h) @ stmia r5, {r0 - r4} asm_trace_hardirqs_off - --[[linux-2.6.33/asm_trace_hardirqs_off()]] .endm *コメント [#tf09d646]