Initial commit of kernel only
[tpg/acess2.git] / Kernel / arch / x86 / errors.c
1 /*
2  * Acess2 - x86 Architecture
3  * arch/x86/errors.c
4  * - CPU Error Handler
5  */
6 #include <common.h>
7
8 // === IMPORTS ===
9 extern void     MM_PageFault(Uint Addr, Uint ErrorCode, tRegs *Regs);
10 extern void Proc_DumpThreads();
11
12 // === CODE ===
13 /**
14  * \fn void ErrorHandler(tRegs *Regs)
15  * \brief General Error Handler
16  */
17 void ErrorHandler(tRegs *Regs)
18 {
19         Uint    cr;
20         __asm__ __volatile__ ("cli");
21         
22         if(Regs->int_num == 14)
23         {
24                 __asm__ __volatile__ ("mov %%cr2, %0":"=r"(cr));
25                 MM_PageFault( cr, Regs->err_code, Regs );
26                 return ;
27         }
28         
29         Warning("CPU Error %i, Code: 0x%x", Regs->int_num, Regs->err_code);
30         Warning(" CS:EIP = 0x%04x:%08x", Regs->cs, Regs->eip);
31         Warning(" SS:ESP = 0x%04x:%08x", Regs->ss, Regs->esp);
32         Warning(" EFLAGS = 0x%08x", Regs->eflags);
33         Warning(" EAX %08x EBX %08x", Regs->eax, Regs->ebx);
34         Warning(" ECX %08x EDX %08x", Regs->ecx, Regs->edx);
35         Warning(" ESP %08x EBP %08x", Regs->esp, Regs->ebp);
36         Warning(" ESI %08x EDI %08x", Regs->esi, Regs->edi);
37         Warning(" DS %04x ES %04x", Regs->ds, Regs->es);
38         Warning(" FS %04x GS %04x", Regs->fs, Regs->gs);
39         
40         // Control Registers
41         __asm__ __volatile__ ("mov %%cr0, %0":"=r"(cr));
42         Warning(" CR0: 0x%08x", cr);
43         __asm__ __volatile__ ("mov %%cr2, %0":"=r"(cr));
44         Warning(" CR2: 0x%08x", cr);
45         __asm__ __volatile__ ("mov %%cr3, %0":"=r"(cr));
46         Warning(" CR3: 0x%08x", cr);
47         
48         // Dump running threads
49         Proc_DumpThreads();
50         
51         for(;;) __asm__ __volatile__ ("hlt");
52 }

UCC git Repository :: git.ucc.asn.au