*参照元 [#t7daa8ba] #backlinks *説明 [#s432fffc] -パス: [[linux-2.6.33/arch/arm/kernel/entry-armv.S]] -FIXME: これは何? --説明 **引数 [#e5f9a80e] -なし **返り値 [#qbaf8ae9] -なし **参考 [#v4ce2bbe] *実装 [#n9f93845] .align 5 .align 5 -2^5 = 32バイト境界に配置する __dabt_svc: svc_entry - --[[linux-2.6.33/svc_entry()]] @ @ get ready to re-enable interrupts if appropriate @ mrs r9, cpsr tst r3, #PSR_I_BIT biceq r9, r9, #PSR_I_BIT - --[[linux-2.6.33/PSR_I_BIT]] @ @ Call the processor-specific abort handler: @ @ r2 - aborted context pc @ r3 - aborted context cpsr @ @ The abort handler must return the aborted address in r0, and @ the fault status register in r1. r9 must be preserved. @ #ifdef MULTI_DABORT - --[[linux-2.6.33/MULTI_DABORT --[[linux-2.6.33/MULTI_DABORT]] ldr r4, .LCprocfns - --[[linux-2.6.33/.LCprocfns()]] mov lr, pc ldr pc, [r4, #PROCESSOR_DABT_FUNC] - --[[linux-2.6.33/]] --[[linux-2.6.33/PROCESSOR_DABT_FUNC]] #else bl CPU_DABORT_HANDLER - --[[linux-2.6.33/CPU_DABORT_HANDLER()]] #endif @ @ set desired IRQ state, then call main handler @ msr cpsr_c, r9 mov r2, sp bl do_DataAbort - --[[linux-2.6.33/do_DataAbort()]] @ @ IRQs off again before pulling preserved data off the stack @ disable_irq - --[[linux-2.6.33/disable_irq()]] @ @ restore SPSR and restart the instruction @ ldr r2, [sp, #S_PSR] svc_exit r2 @ return from exception - --[[linux-2.6.33/svc_exit()]] UNWIND(.fnend ) - --[[linux-2.6.33/UNWIND()]] ENDPROC(__dabt_svc) - --[[linux-2.6.33/ENDPROC()]] *コメント [#f04b0dc3]