fix bugs found in brk & add simple security checks on lx_free
[lunaix-os.git] / lunaix-os / kernel / asm / x86 / interrupts.c
1 #include <arch/x86/interrupts.h>
2 #include <lunaix/tty/tty.h>
3 #include <libc/stdio.h>
4
5 void panic_msg(const char* msg) {
6     tty_set_theme(VGA_COLOR_WHITE, VGA_COLOR_RED);
7     tty_clear_line(10);
8     tty_clear_line(11);
9     tty_clear_line(12);
10     tty_set_cpos(0, 11);
11     printf("  %s", msg);
12 }
13
14 void panic (const char* msg, isr_param* param) {
15     char buf[1024];
16     sprintf(buf, "INT %u: (%x) [%p: %p] %s", param->vector, param->err_code, param->cs, param->eip, msg);
17     panic_msg(buf);
18     while(1);
19 }
20
21 void 
22 interrupt_handler(isr_param* param) {
23     switch (param->vector)
24     {
25         case 0:
26             panic("Division by 0", param);
27             break;  // never reach
28         case FAULT_GENERAL_PROTECTION:
29             panic("General Protection", param);
30             break;  // never reach
31         case FAULT_PAGE_FAULT:
32             panic("Page Fault", param);
33             break;  // never reach
34         case LUNAIX_SYS_PANIC:
35             panic_msg((char*)(param->registers.edi));
36             while(1);
37             break;  // never reach
38         default:
39             panic("Unknown Interrupt", param);
40             break;  // never reach
41     }
42 }