超级调用swi 82的最初流程
xen/arch/arm/kernel/entry-armv.S __vectors_start: swi SYS_ERROR0 /* Reset */ b vector_undefined_instruction + stubs_offset ldr pc, .LCvswi + stubs_offset b vector_prefetch_abort + stubs_offset b vector_data_abort + stubs_offset b vector_addrexcptn + stubs_offset b vector_irq + stubs_offset b vector_fiq + stubs_offset .globl __vectors_end __vectors_end: /* * We group all the following data together to optimise * for CPUs with separate I & D caches. */ .align 5 .LCvswi: .word vector_swi -------------- xen/arch/arm/hypervisor/hypervisor.S ENTRY( vector_swi ) sub sp, sp, #S_FRAME_SIZE stmia sp, {r0 - r12} add r8, sp, #S_PC stmdb r8, {sp, lr}^ mrs r8, spsr str lr, [sp, #S_PC] str r8, [sp, #S_PSR] vcpu r8 add r8, r8, #(OFFSET_ARCH_VCPU + OFFSET_GUEST_CONTEXT) ldr r9, [r8, #(OFFSET_SYS_REGS+OFFSET_VPSR)] ldr r10, [sp, #S_SP] cmp r9, #PSR_MODE_USR streq r10, [r8, #(OFFSET_SYS_REGS+OFFSET_VUSP)] strne r10, [r8, #(OFFSET_SYS_REGS+OFFSET_VKSP)] ldr r8, [sp, #S_PSR] bic r8...