1/* 2 * Trap Handlers 3 */ 4 5.extern trap_entry 6 7.text 8 9.macro TRAP_NOEC TRAPNUM 10trap\TRAPNUM: 11 # Push top of the trap frame 12 pushq %rax 13 pushq $\TRAPNUM 14 pushq %rax 15 xorq %rax, %rax 16 movw %ds, %ax 17 pushq %rax 18 jmp trap_common 19.endm 20 21.macro TRAP_EC TRAPNUM 22trap\TRAPNUM: 23 # Push top of the trap frame 24 pushq $\TRAPNUM 25 pushq %rax 26 xorq %rax, %rax 27 movw %ds, %ax 28 pushq %rax 29 jmp trap_common 30.endm 31 32.globl trap_table 33trap_table: 34.quad trap0 35.quad trap1 36.quad trap2 37.quad trap3 38.quad trap4 39.quad trap5 40.quad trap6 41.quad trap7 42.quad trap8 43.quad trap9 44.quad trap10 45.quad trap11 46.quad trap12 47.quad trap13 48.quad trap14 49.quad trap15 50.quad trap16 51.quad trap17 52.quad trap18 53.quad trap19 54.quad trap20 55.quad trap21 56.quad trap22 57.quad trap23 58.quad trap24 59.quad trap25 60.quad trap26 61.quad trap27 62.quad trap28 63.quad trap29 64.quad trap30 65.quad trap31 66.quad trap32 67.quad trap33 68.quad trap34 69.quad trap35 70.quad trap36 71.quad trap37 72.quad trap38 73.quad trap39 74.quad trap40 75.quad trap41 76.quad trap42 77.quad trap43 78.quad trap44 79.quad trap45 80.quad trap46 81.quad trap47 82.quad trap48 83.quad trap49 84.quad trap50 85.quad trap51 86.quad trap52 87.quad trap53 88.quad trap54 89.quad trap55 90.quad trap56 91.quad trap57 92.quad trap58 93.quad trap59 94.quad trap60 95.quad trap61 96.quad trap62 97.quad trap63 98 99TRAP_NOEC 0 // DE 100TRAP_NOEC 1 // DB 101TRAP_NOEC 2 // NMI 102TRAP_NOEC 3 // BP 103TRAP_NOEC 4 // OF 104TRAP_NOEC 5 // BR 105TRAP_NOEC 6 // UD 106TRAP_NOEC 7 // NM 107TRAP_EC 8 // DF 108TRAP_NOEC 9 109TRAP_EC 10 // TS 110TRAP_EC 11 // NP 111TRAP_EC 12 // SS 112TRAP_EC 13 // GP 113TRAP_EC 14 // PF 114TRAP_NOEC 15 115TRAP_NOEC 16 // MF 116TRAP_EC 17 // AC 117TRAP_NOEC 18 // MC 118TRAP_NOEC 19 // XF 119TRAP_NOEC 20 // VE 120TRAP_NOEC 21 121TRAP_NOEC 22 122TRAP_NOEC 23 123TRAP_NOEC 24 124TRAP_NOEC 25 125TRAP_NOEC 26 126TRAP_NOEC 27 127TRAP_NOEC 28 128TRAP_NOEC 29 129TRAP_NOEC 30 130TRAP_NOEC 31 131TRAP_NOEC 32 // IRQ 0 132TRAP_NOEC 33 133TRAP_NOEC 34 134TRAP_NOEC 35 135TRAP_NOEC 36 136TRAP_NOEC 37 137TRAP_NOEC 38 138TRAP_NOEC 39 139TRAP_NOEC 40 140TRAP_NOEC 41 141TRAP_NOEC 42 142TRAP_NOEC 43 143TRAP_NOEC 44 144TRAP_NOEC 45 145TRAP_NOEC 46 146TRAP_NOEC 47 // IRQ 15 147TRAP_NOEC 48 // IRQ 16 (PCI) 148TRAP_NOEC 49 149TRAP_NOEC 50 150TRAP_NOEC 51 151TRAP_NOEC 52 152TRAP_NOEC 53 153TRAP_NOEC 54 154TRAP_NOEC 55 // IRQ 23 (PCI) 155TRAP_NOEC 56 // LAPIC Spurious 156TRAP_NOEC 57 // LAPIC Error 157TRAP_NOEC 58 // LAPIC Thermal 158TRAP_NOEC 59 159TRAP_NOEC 60 // System Call 160TRAP_NOEC 61 161TRAP_NOEC 62 162TRAP_NOEC 63 163 164trap_common: 165 # Create the rest of the trap frame 166 pushq %rbx 167 pushq %rcx 168 pushq %rdx 169 pushq %rsi 170 pushq %rdi 171 pushq %rbp 172 pushq %r8 173 pushq %r9 174 pushq %r10 175 pushq %r11 176 pushq %r12 177 pushq %r13 178 pushq %r14 179 pushq %r15 180 181 # Pass the trap frame as an argument to trap_entry 182 movq %rsp, %rdi 183 call trap_entry 184.globl trap_return 185trap_return: 186 popq %r15 187 popq %r14 188 popq %r13 189 popq %r12 190 popq %r11 191 popq %r10 192 popq %r9 193 popq %r8 194 popq %rbp 195 popq %rdi 196 popq %rsi 197 popq %rdx 198 popq %rcx 199 popq %rbx 200 popq %rax 201 movw %ax, %ds 202 popq %rax 203 204 # Skip error code and vector number 205 addq $16, %rsp 206 207 # Return to userspace 208 iretq 209 210.globl Trap_Pop 211Trap_Pop: 212 movq %rdi, %rsp 213 jmp trap_return 214 215