diff options
Diffstat (limited to 'kernel/cpu/cpu.c')
-rw-r--r-- | kernel/cpu/cpu.c | 63 |
1 files changed, 63 insertions, 0 deletions
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 <lib.h> +#include <comus/cpu.h> #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"); +} |