From 14538777ff7645d51d27a239739c5335180ae947 Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Tue, 15 Apr 2025 22:49:12 -0400 Subject: public cpu_print_regs fn --- kernel/cpu/cpu.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ kernel/cpu/idt.c | 65 ++------------------------------------------------------ 2 files changed, 65 insertions(+), 63 deletions(-) (limited to 'kernel/cpu') diff --git a/kernel/cpu/cpu.c b/kernel/cpu/cpu.c index a77baac..df0b34f 100644 --- a/kernel/cpu/cpu.c +++ b/kernel/cpu/cpu.c @@ -1,3 +1,5 @@ +#include +#include #include "fpu.h" #include "pic.h" @@ -9,3 +11,64 @@ void cpu_init(void) idt_init(); fpu_init(); } + +void cpu_print_regs(struct cpu_regs *regs) +{ + kprintf("rax: %#016lx (%lu)\n", regs->rax, regs->rax); + kprintf("rbx: %#016lx (%lu)\n", regs->rbx, regs->rbx); + kprintf("rcx: %#016lx (%lu)\n", regs->rcx, regs->rcx); + kprintf("rdx: %#016lx (%lu)\n", regs->rdx, regs->rdx); + kprintf("rsi: %#016lx (%lu)\n", regs->rsi, regs->rsi); + kprintf("rdi: %#016lx (%lu)\n", regs->rdi, regs->rdi); + kprintf("rsp: %#016lx (%lu)\n", regs->rsp, regs->rsp); + kprintf("rbp: %#016lx (%lu)\n", regs->rbp, regs->rbp); + kprintf("r8 : %#016lx (%lu)\n", regs->r8, regs->r8); + kprintf("r9 : %#016lx (%lu)\n", regs->r9, regs->r9); + kprintf("r10: %#016lx (%lu)\n", regs->r10, regs->r10); + kprintf("r11: %#016lx (%lu)\n", regs->r11, regs->r11); + kprintf("r12: %#016lx (%lu)\n", regs->r12, regs->r12); + kprintf("r13: %#016lx (%lu)\n", regs->r13, regs->r13); + kprintf("r14: %#016lx (%lu)\n", regs->r14, regs->r14); + kprintf("r15: %#016lx (%lu)\n", regs->r15, regs->r15); + kprintf("rip: %#016lx (%lu)\n", regs->rip, regs->rip); + kprintf("rflags: %#016lx (%lu)\n", (uint64_t)regs->rflags.raw, + (uint64_t)regs->rflags.raw); + kputs("rflags: "); + if (regs->rflags.cf) + kputs("CF "); + if (regs->rflags.pf) + kputs("PF "); + if (regs->rflags.af) + kputs("AF "); + if (regs->rflags.zf) + kputs("ZF "); + if (regs->rflags.sf) + kputs("SF "); + if (regs->rflags.tf) + kputs("TF "); + if (regs->rflags.if_) + kputs("IF "); + if (regs->rflags.df) + kputs("DF "); + if (regs->rflags.of) + kputs("OF "); + if (regs->rflags.iopl) + kputs("IOPL "); + if (regs->rflags.nt) + kputs("NT "); + if (regs->rflags.md) + kputs("MD "); + if (regs->rflags.rf) + kputs("RF "); + if (regs->rflags.vm) + kputs("VM "); + if (regs->rflags.ac) + kputs("AC "); + if (regs->rflags.vif) + kputs("VIF "); + if (regs->rflags.vip) + kputs("VIP "); + if (regs->rflags.id) + kputs("ID "); + kputs("\n"); +} diff --git a/kernel/cpu/idt.c b/kernel/cpu/idt.c index 4dbf4ba..250f939 100644 --- a/kernel/cpu/idt.c +++ b/kernel/cpu/idt.c @@ -70,67 +70,6 @@ void idt_init(void) __asm__ volatile("lidt %0" : : "m"(idtr)); } -static void isr_print_regs(regs_t *regs) -{ - kprintf("rax: %#016lx (%lu)\n", regs->rax, regs->rax); - kprintf("rbx: %#016lx (%lu)\n", regs->rbx, regs->rbx); - kprintf("rcx: %#016lx (%lu)\n", regs->rcx, regs->rcx); - kprintf("rdx: %#016lx (%lu)\n", regs->rdx, regs->rdx); - kprintf("rsi: %#016lx (%lu)\n", regs->rsi, regs->rsi); - kprintf("rdi: %#016lx (%lu)\n", regs->rdi, regs->rdi); - kprintf("rsp: %#016lx (%lu)\n", regs->rsp, regs->rsp); - kprintf("rbp: %#016lx (%lu)\n", regs->rbp, regs->rbp); - kprintf("r8 : %#016lx (%lu)\n", regs->r8, regs->r8); - kprintf("r9 : %#016lx (%lu)\n", regs->r9, regs->r9); - kprintf("r10: %#016lx (%lu)\n", regs->r10, regs->r10); - kprintf("r11: %#016lx (%lu)\n", regs->r11, regs->r11); - kprintf("r12: %#016lx (%lu)\n", regs->r12, regs->r12); - kprintf("r13: %#016lx (%lu)\n", regs->r13, regs->r13); - kprintf("r14: %#016lx (%lu)\n", regs->r14, regs->r14); - kprintf("r15: %#016lx (%lu)\n", regs->r15, regs->r15); - kprintf("rip: %#016lx (%lu)\n", regs->rip, regs->rip); - kprintf("rflags: %#016lx (%lu)\n", (uint64_t)regs->rflags.raw, - (uint64_t)regs->rflags.raw); - kputs("rflags: "); - if (regs->rflags.cf) - kputs("CF "); - if (regs->rflags.pf) - kputs("PF "); - if (regs->rflags.af) - kputs("AF "); - if (regs->rflags.zf) - kputs("ZF "); - if (regs->rflags.sf) - kputs("SF "); - if (regs->rflags.tf) - kputs("TF "); - if (regs->rflags.if_) - kputs("IF "); - if (regs->rflags.df) - kputs("DF "); - if (regs->rflags.of) - kputs("OF "); - if (regs->rflags.iopl) - kputs("IOPL "); - if (regs->rflags.nt) - kputs("NT "); - if (regs->rflags.md) - kputs("MD "); - if (regs->rflags.rf) - kputs("RF "); - if (regs->rflags.vm) - kputs("VM "); - if (regs->rflags.ac) - kputs("AC "); - if (regs->rflags.vif) - kputs("VIF "); - if (regs->rflags.vip) - kputs("VIP "); - if (regs->rflags.id) - kputs("ID "); - kputs("\n"); -} - #define EX_DEBUG 0x01 #define EX_BREAKPOINT 0x03 #define EX_PAGE_FAULT 0x0e @@ -171,7 +110,7 @@ char *EXCEPTIONS[] = { "Reserved", }; -void idt_exception_handler(uint64_t exception, uint64_t code, regs_t *state) +void idt_exception_handler(uint64_t exception, uint64_t code, struct cpu_regs *state) { uint64_t cr2; @@ -193,7 +132,7 @@ void idt_exception_handler(uint64_t exception, uint64_t code, regs_t *state) kputs("\n"); - isr_print_regs(state); + cpu_print_regs(state); kputs("\n"); -- cgit v1.2.3-freya