1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
#include "generic.h"
#include "../kprintf.h"
#include "../asm_inline.h"
void generic_interrupt(trapframe* f)
{
kprintf("!!!! INTERRUPT !!!!\n");
kprintf("ARG: %p\n", f);
switch(f->trapno)
{
case 0x0:
kprintf("NO: %s | ERR_ %lX\n", "Division Error", f->err);
break;
case 0x1:
kprintf("NO: %s | ERR_ %lX\n", "Debug", f->err);
break;
case 0x2:
kprintf("NO: %s | ERR_ %lX\n", "Non-Maskable", f->err);
break;
case 0x3:
kprintf("NO: %s | ERR_ %lX\n", "Breakpoint", f->err);
break;
case 0x4:
kprintf("NO: %s | ERR_ %lX\n", "Overflow", f->err);
break;
case 0x5:
kprintf("NO: %s | ERR_ %lX\n", "Bound Range Exceeded", f->err);
break;
case 0x6:
kprintf("NO: %s | ERR_ %lX\n", "Invalid Opcode", f->err);
break;
case 0x7:
kprintf("NO: %s | ERR_ %lX\n", "Device Not Available", f->err);
break;
case 0x8:
kprintf("NO: %s | ERR_ %lX\n", "Double Fault", f->err);
break;
case 0xA:
kprintf("NO: %s | ERR_ %lX\n", "Invalid TSS", f->err);
break;
case 0xB:
kprintf("NO: %s | ERR_ %lX\n", "Segment Not Present", f->err);
break;
case 0xC:
kprintf("NO: %s | ERR_ %lX\n", "Stack-Segment fault", f->err);
break;
case 0xD:
kprintf("NO: %s | ERR_ %lX\n", "General Protection Fault", f->err);
break;
case 0xE:
kprintf("NO: %s | ERR_ %lX\n", "Page Fault", f->err);
break;
case 0x10:
kprintf("NO: %s | ERR_ %lX\n", "x87 Floating Point Exception", f->err);
break;
case 0x11:
kprintf("NO: %s | ERR_ %lX\n", "Alignment Check", f->err);
break;
case 0x12:
kprintf("NO: %s | ERR_ %lX\n", "Machine Check", f->err);
break;
case 0x13:
kprintf("NO: %s | ERR_ %lX\n", "SIMD Floating Point Exception", f->err);
break;
case 0x14:
kprintf("NO: %s | ERR_ %lX\n", "Virtualization Exception", f->err);
break;
case 0x15:
kprintf("NO: %s | ERR_ %lX\n", "Control Protection Exception", f->err);
break;
case 0x1C:
kprintf("NO: %s | ERR_ %lX\n", "Hypervisor Injection Exception", f->err);
break;
case 0x1D:
kprintf("NO: %s | ERR_ %lX\n", "VMM Communication Exception", f->err);
break;
case 0x1E:
kprintf("NO: %s | ERR_ %lX\n", "Security Exception", f->err);
break;
default:
kprintf("NO: %lX | ERR: %lX\n", f->trapno, f->err);
}
kprintf("RAX: %lX | RBX: %lX | RCX: %lX | RDX: %lX\n", f->rax, f->rbx, f->rcx, f->rdx);
kprintf("RSI: %lX | RDI: %lX | RBP: %lX\n", f->rsi, f->rdi, f->rbp);
kprintf("R8: %lX | R9: %lX | R10: %lX | R11: %lX\n", f->r8, f->r9, f->r10, f->r11);
kprintf("R12: %lX | R13: %lX | R14: %lX | R15: %lX\n", f->r12, f->r13, f->r14, f->r15);
kprintf("===================\n");
hlt();
//if(f->err == 0xE)
//{
// hlt();
//}
}
|