From 22df3f473c00946e5c814de7e274ad72cc7b4910 Mon Sep 17 00:00:00 2001 From: trimill Date: Sat, 3 Feb 2024 21:40:17 -0500 Subject: print registers on fatal exception --- src/arch/amd64/cpu/debugger.c | 111 ++---------------------------------------- 1 file changed, 3 insertions(+), 108 deletions(-) (limited to 'src/arch/amd64/cpu/debugger.c') diff --git a/src/arch/amd64/cpu/debugger.c b/src/arch/amd64/cpu/debugger.c index 48c4740..57b90d5 100644 --- a/src/arch/amd64/cpu/debugger.c +++ b/src/arch/amd64/cpu/debugger.c @@ -4,69 +4,8 @@ #include #include "debugger.h" - -struct dr6 { - uint64_t b0 : 1, - b1 : 1, - b2 : 1, - b3 : 1, - : 7, - bld : 1, - : 1, - bd : 1, - bs : 1, - bt : 1, - rtm : 1, - : 47; -}; - -struct dr7 { - uint64_t l0 : 1, - g0 : 1, - l1 : 1, - g1 : 1, - l2 : 1, - g2 : 1, - l3 : 1, - g3 : 1, - : 8, - rw0 : 2, - len0 : 2, - rw1 : 2, - len1 : 2, - rw2 : 2, - len2 : 2, - rw3 : 2, - len3 : 2, - : 32; -}; - -struct rflags { - uint64_t cf : 1, - : 1, - pf : 1, - : 1, - af : 1, - : 1, - zf : 1, - sf : 1, - - tf : 1, - if_ : 1, - df : 1, - of : 1, - iopl : 2, - nt : 1, - md : 1, - - rf : 1, - vm : 1, - ac : 1, - vif : 1, - vip : 1, - id : 1, - : 42; -}; +#include "registers.h" +#include "idt.h" struct breakpoint { uint64_t addr; @@ -138,50 +77,6 @@ static void debugger_msg(int cause, struct dr6 dr6) { kputs("\n"); } -static void debugger_print_regs(struct isr_regs *state) { - kprintf("rax: %#016lx (%lu)\n", state->rax, state->rax); - kprintf("rbx: %#016lx (%lu)\n", state->rbx, state->rbx); - kprintf("rcx: %#016lx (%lu)\n", state->rcx, state->rcx); - kprintf("rdx: %#016lx (%lu)\n", state->rdx, state->rdx); - kprintf("rsi: %#016lx (%lu)\n", state->rsi, state->rsi); - kprintf("rdi: %#016lx (%lu)\n", state->rdi, state->rdi); - kprintf("rsp: %#016lx (%lu)\n", state->rsp, state->rsp); - kprintf("rbp: %#016lx (%lu)\n", state->rbp, state->rbp); - kprintf("r8 : %#016lx (%lu)\n", state->r8 , state->r8 ); - kprintf("r9 : %#016lx (%lu)\n", state->r9 , state->r9 ); - kprintf("r10: %#016lx (%lu)\n", state->r10, state->r10); - kprintf("r11: %#016lx (%lu)\n", state->r11, state->r11); - kprintf("r12: %#016lx (%lu)\n", state->r12, state->r12); - kprintf("r13: %#016lx (%lu)\n", state->r13, state->r13); - kprintf("r14: %#016lx (%lu)\n", state->r14, state->r14); - kprintf("r15: %#016lx (%lu)\n", state->r15, state->r15); - kputs("---\n"); - kprintf("rip: %#016lx (%lu)\n", state->rip, state->rip); - kputs("---\n"); - kprintf("rflags: %#016lx (%lu)\n", state->rflags, state->rflags); - struct rflags *rflags = (struct rflags *)state->rflags; - kputs("rflags: "); - if (rflags->cf) kputs("CF "); - if (rflags->pf) kputs("PF "); - if (rflags->af) kputs("AF "); - if (rflags->zf) kputs("ZF "); - if (rflags->sf) kputs("SF "); - if (rflags->tf) kputs("TF "); - if (rflags->if_) kputs("IF "); - if (rflags->df) kputs("DF "); - if (rflags->of) kputs("OF "); - if (rflags->iopl) kputs("IOPL "); - if (rflags->nt) kputs("NT "); - if (rflags->md) kputs("MD "); - if (rflags->rf) kputs("RF "); - if (rflags->vm) kputs("VM "); - if (rflags->ac) kputs("AC "); - if (rflags->vif) kputs("VIF "); - if (rflags->vip) kputs("VIP "); - if (rflags->id) kputs("ID "); - kputs("\n"); -} - #define PROMPT_LEN 60 static int debugger_handle_bkp_cmd(char *msg) { @@ -324,7 +219,7 @@ static int debugger_prompt(struct isr_regs *state) { dbg_continue = 1; return 0; case 'r': // print registers - debugger_print_regs(state); + isr_print_regs(state); return 1; case 'k': // backtrace log_backtrace_ex((void *)state->rip, (void *)state->rbp); -- cgit v1.2.3-freya