Add stack frame to panic
This commit is contained in:
parent
b337e5193b
commit
cfcb806ebf
16 changed files with 169 additions and 103 deletions
|
|
@ -1,5 +1,6 @@
|
|||
#include "idt.h"
|
||||
#include "error.h"
|
||||
#include "smp.h"
|
||||
#include "timer.h"
|
||||
#include <kprint.h>
|
||||
#include <lock.h>
|
||||
|
|
@ -200,15 +201,30 @@ char *exception_messages[] =
|
|||
"Reserved"
|
||||
};
|
||||
|
||||
extern void *next_frame(void *addr);
|
||||
|
||||
void interrupt_handler(interrupt_frame *r){
|
||||
|
||||
if(r->int_no < 32){
|
||||
kprintf("\nOh no! Received interrupt {d}, '{s}'. Below is the provided stack frame{n}{n}", r->int_no, exception_messages[r->int_no]);
|
||||
kprintf("error code 0x{xn}", r->err);
|
||||
kprintf("rax 0x{x} | rbx 0x{x} | rcx 0x{x} | rdx 0x{xn}", r->rax, r->rbx, r->rcx, r->rdx);
|
||||
kprintf("rdi 0x{x} | rsi 0x{x} | rbp 0x{xn}", r->rdi, r->rsi, r->rbp);
|
||||
kprintf("r8 0x{x} | r9 0x{x} | r10 0x{x} | r11 0x{x} | r12 0x{x} | r13 0x{x} | r14 0x{x} | r15 0x{xn}", r->r8, r->r9, r->r10, r->r11, r->r12, r->r13, r->r14, r->r15);
|
||||
kprintf("rip 0x{x} | cs 0x{x} | ss 0x{x} | rsp 0x{x} | rflags 0x{xn}", r->rip, r->cs, r->ss, r->rsp, r->rflags);
|
||||
kprintf("\nOh no! Received interrupt {d}, '{s}'. Below is the provided stack frame\n\n", r->int_no, exception_messages[r->int_no]);
|
||||
|
||||
if(r->err != 0){
|
||||
kprintf("error code 0x{xn}", r->err);
|
||||
}
|
||||
kprintf("rax 0x{x} | rbx 0x{x} | rcx 0x{x} | rdx 0x{x}\n", r->rax, r->rbx, r->rcx, r->rdx);
|
||||
kprintf("rdi 0x{x} | rsi 0x{x} | rbp 0x{x}\n", r->rdi, r->rsi, r->rbp);
|
||||
kprintf("r8 0x{x} | r9 0x{x} | r10 0x{x} | r11 0x{x} | r12 0x{x} | r13 0x{x} | r14 0x{x} | r15 0x{x}\n", r->r8, r->r9, r->r10, r->r11, r->r12, r->r13, r->r14, r->r15);
|
||||
kprintf("rip 0x{x} | cs 0x{x} | ss 0x{x} | rsp 0x{x} | rflags 0x{x}\n", r->rip, r->cs, r->ss, r->rsp, r->rflags);
|
||||
|
||||
kprintf("\nStack frame:\n");
|
||||
struct stack_frame *f = __builtin_frame_address(0);
|
||||
int i = 0;
|
||||
while(f != NULL && i < 10){
|
||||
kprintf("{d}: 0x{x}\n", i, f->rip);
|
||||
f = (stack_frame *)f->rbp;
|
||||
i++;
|
||||
}
|
||||
|
||||
kkill();
|
||||
for(;;);
|
||||
}
|
||||
|
|
@ -220,6 +236,12 @@ void interrupt_handler(interrupt_frame *r){
|
|||
if(r->int_no == 69){
|
||||
apic_timer_handler();
|
||||
}
|
||||
|
||||
if(r->int_no == 69 && get_cpu_struct_initialized()
|
||||
&& get_cpu_struct()->scheduler_initialized){
|
||||
enter_scheduler();
|
||||
}
|
||||
|
||||
if(r->int_no == 70){
|
||||
for(;;){
|
||||
asm("cli;hlt");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue