Implement syscalls, hello world from userspace

This commit is contained in:
2025-09-02 23:51:14 +02:00
parent 920de10025
commit 8a12f23b69
24 changed files with 313 additions and 44 deletions

View File

@ -133,7 +133,7 @@ void intr_dumpframe(IntrStackFrame *frame) {
asm volatile("mov %%cr3, %0" : "=r"(cr3));
uint64_t cr4;
asm volatile("mov %%cr4, %0" : "=r"(cr4));
kprintf_unsafe("rax=%016lx rcx=%016lx rdx=%016lx\n"
kprintf("rax=%016lx rcx=%016lx rdx=%016lx\n"
"rsi=%016lx rdi=%016lx r8 =%016lx\n"
"r9 =%016lx r10=%016lx r11=%016lx\n"
"rip=%016lx rfl=%016lx rsp=%016lx\n"
@ -150,11 +150,14 @@ void intr_dumpframe(IntrStackFrame *frame) {
}
void intr_handleintr(IntrStackFrame *frame) {
if (frame->trapnum >= 0 && frame->trapnum <= 31) {
// EXCEPTION
kprintf_unsafe("ERROR %s, 0x%lX\n", exceptions[frame->trapnum], frame->errnum);
if (frame->trapnum <= 31) {
if (frame->trapnum == 14 && frame->errnum & 0x4) {
proc_killself();
proc_sched((void *)frame);
}
kprintf("ERROR %s, 0x%lX\n", exceptions[frame->trapnum], frame->errnum);
intr_dumpframe(frame);
hal_hang();
hal_hang();
} else if (frame->trapnum >= 32 && frame->trapnum <= 47) {
if (frame->trapnum == INTR_TIMER) {
io_out8(PIC2_CMD, 0x20);