summaryrefslogtreecommitdiff
path: root/kernel/cpu
diff options
context:
space:
mode:
authorFreya Murphy <freya@freyacat.org>2025-04-15 22:49:12 -0400
committerFreya Murphy <freya@freyacat.org>2025-04-15 22:49:12 -0400
commit14538777ff7645d51d27a239739c5335180ae947 (patch)
treec17ebbe980aef026118afcbf9ed328e1b099b8fe /kernel/cpu
parentexpand memory manager work with userspace (more then one ctx) (diff)
downloadcomus-14538777ff7645d51d27a239739c5335180ae947.tar.gz
comus-14538777ff7645d51d27a239739c5335180ae947.tar.bz2
comus-14538777ff7645d51d27a239739c5335180ae947.zip
public cpu_print_regs fn
Diffstat (limited to 'kernel/cpu')
-rw-r--r--kernel/cpu/cpu.c63
-rw-r--r--kernel/cpu/idt.c65
2 files changed, 65 insertions, 63 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");
+}
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");