summaryrefslogtreecommitdiff
path: root/src/arch/amd64/cpu/debugger.c
diff options
context:
space:
mode:
authortrimill <trimill@trimillxyz.org>2024-02-03 21:40:17 -0500
committertrimill <trimill@trimillxyz.org>2024-02-03 21:40:55 -0500
commit22df3f473c00946e5c814de7e274ad72cc7b4910 (patch)
tree38996116308a4a7d131312932617d5953f265aa4 /src/arch/amd64/cpu/debugger.c
parentspacing (diff)
downloadcorn-22df3f473c00946e5c814de7e274ad72cc7b4910.tar.gz
corn-22df3f473c00946e5c814de7e274ad72cc7b4910.tar.bz2
corn-22df3f473c00946e5c814de7e274ad72cc7b4910.zip
print registers on fatal exception
Diffstat (limited to '')
-rw-r--r--src/arch/amd64/cpu/debugger.c111
1 files changed, 3 insertions, 108 deletions
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 <serial.h>
#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);