.macro ventry type .align 7 sub sp, sp, #272 // save 272 bytes of stack stp x0, x1, [sp, #0] // move stack mov x1, #\type // move type to x1 b common_trap_entry .endm .section .text.vectors .align 11 .global vectors vector_table: // EL1t (curr EL with SP0) ventry 0 // Sync ventry 1 // IRQ ventry 2 // FIQ ventry 3 // SError // EL1h (curr EL with SP1) ventry 4 // Sync ventry 5 // IRQ ventry 6 // FIQ ventry 7 // SError // EL0 (lower EL 64-bit from userspace) ventry 8 // Sync ventry 9 // IRQ ventry 10 // FIQ ventry 11 // SError // EL0 (lower EL 32-bit from userspace) ventry 12; ventry 13; ventry 14; ventry 15 common_trap_entry: stp x2, x3, [sp, #16 * 1] stp x4, x5, [sp, #16 * 2] stp x6, x7, [sp, #16 * 3] stp x8, x9, [sp, #16 * 4] stp x10, x11, [sp, #16 * 5] stp x12, x13, [sp, #16 * 6] stp x14, x15, [sp, #16 * 7] stp x16, x17, [sp, #16 * 8] stp x18, x19, [sp, #16 * 9] stp x20, x21, [sp, #16 * 10] stp x22, x23, [sp, #16 * 11] stp x24, x25, [sp, #16 * 12] stp x26, x27, [sp, #16 * 13] stp x28, x29, [sp, #16 * 14] mrs x21, elr_el1 mrs x22, spsr_el1 mrs x23, esr_el1 stp x30, x21, [sp, #16 * 15] stp x22, x23, [sp, #16 * 16] mov x0, sp bl swift_trap_handler ldp x22, x23, [sp, #16 * 16] msr spsr_el1, x22 ldp x30, x21, [sp, #16 * 15] msr elr_el1, x21 ldp x28, x29, [sp, #16 * 14] ldp x26, x27, [sp, #16 * 13] ldp x24, x25, [sp, #16 * 12] ldp x22, x23, [sp, #16 * 11] ldp x20, x21, [sp, #16 * 10] ldp x18, x19, [sp, #16 * 9] ldp x16, x17, [sp, #16 * 8] ldp x14, x15, [sp, #16 * 7] ldp x12, x13, [sp, #16 * 6] ldp x10, x11, [sp, #16 * 5] ldp x8, x9, [sp, #16 * 4] ldp x6, x7, [sp, #16 * 3] ldp x4, x5, [sp, #16 * 2] ldp x2, x3, [sp, #16 * 1] ldp x0, x1, [sp, #0] add sp, sp, #272 eret