From a316d054f56c6ab21a2b948689d95277d63a262f Mon Sep 17 00:00:00 2001 From: Matheus Date: Fri, 29 Jul 2022 09:37:09 -0300 Subject: [PATCH] Unify the arch_regs structs I was doing something stupid and keeping a separate version for the cpu registers. oh well, I fixed it now --- src/arch/x86_64/include/arch/cls.h | 2 +- src/arch/x86_64/include/arch/isr.h | 6 +++--- src/arch/x86_64/include/arch/panic.h | 2 +- src/arch/x86_64/include/arch/regs.h | 6 +----- src/arch/x86_64/isr.asm | 4 ++++ src/arch/x86_64/isr.c | 6 +++--- src/arch/x86_64/panic.c | 2 +- 7 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/arch/x86_64/include/arch/cls.h b/src/arch/x86_64/include/arch/cls.h index a4266997..6d2b7f56 100644 --- a/src/arch/x86_64/include/arch/cls.h +++ b/src/arch/x86_64/include/arch/cls.h @@ -13,7 +13,7 @@ typedef struct{ gdt_t gdt; ist_t ist; - arch_regserror *laststate; + arch_regs *laststate; vmm_context *context; } cls_t; diff --git a/src/arch/x86_64/include/arch/isr.h b/src/arch/x86_64/include/arch/isr.h index 7879c2a0..3f478b45 100644 --- a/src/arch/x86_64/include/arch/isr.h +++ b/src/arch/x86_64/include/arch/isr.h @@ -3,9 +3,9 @@ #include -extern void asmisr_general(arch_regsnoerror*); -extern void asmisr_except(arch_regserror*); -extern void asmisr_pagefault(arch_regserror*); +extern void asmisr_general(arch_regs*); +extern void asmisr_except(arch_regs*); +extern void asmisr_pagefault(arch_regs*); #endif diff --git a/src/arch/x86_64/include/arch/panic.h b/src/arch/x86_64/include/arch/panic.h index be854c85..cfc7e535 100644 --- a/src/arch/x86_64/include/arch/panic.h +++ b/src/arch/x86_64/include/arch/panic.h @@ -3,6 +3,6 @@ #include -__attribute__((noreturn)) void _panic(char *reason, arch_regserror *reg); +__attribute__((noreturn)) void _panic(char *reason, arch_regs *reg); #endif diff --git a/src/arch/x86_64/include/arch/regs.h b/src/arch/x86_64/include/arch/regs.h index 25192d86..6ca67b76 100644 --- a/src/arch/x86_64/include/arch/regs.h +++ b/src/arch/x86_64/include/arch/regs.h @@ -5,11 +5,7 @@ typedef struct{ uint64_t cr2,gs,fs,es,ds,rax,rbx,rcx,rdx,r8,r9,r10,r11,r12,r13,r14,r15,rdi,rsi,rbp,error,rip,cs,rflags,rsp,ss; -} arch_regserror; - -typedef struct{ - uint64_t cr2,gs,fs,es,ds,rax,rbx,rcx,rdx,r8,r9,r10,r11,r12,r13,r14,r15,rdi,rsi,rbp,rip,cs,rflags,rsp,ss; -} arch_regsnoerror; +} arch_regs; #endif diff --git a/src/arch/x86_64/isr.asm b/src/arch/x86_64/isr.asm index 7b12992f..29c4741e 100644 --- a/src/arch/x86_64/isr.asm +++ b/src/arch/x86_64/isr.asm @@ -83,6 +83,8 @@ section .text global %1 %1: + + push qword 0 ; error code for regs struct pushregs @@ -93,6 +95,8 @@ section .text call %2 popregs + + add rsp,8 ; remove error code iretq diff --git a/src/arch/x86_64/isr.c b/src/arch/x86_64/isr.c index 0d549bc5..8d0950e5 100644 --- a/src/arch/x86_64/isr.c +++ b/src/arch/x86_64/isr.c @@ -2,17 +2,17 @@ #include #include -void isr_general(arch_regsnoerror *reg){ +void isr_general(arch_regs *reg){ _panic("Unhandled interrupt", 0); asm("hlt"); } -void isr_except(arch_regserror *reg){ +void isr_except(arch_regs *reg){ _panic("CPU Exception", reg); asm("hlt;"); } -void isr_pagefault(arch_regserror *reg){ +void isr_pagefault(arch_regs *reg){ if(!vmm_dealwithrequest(reg->cr2)) _panic("Page fault!\n", 0); diff --git a/src/arch/x86_64/panic.c b/src/arch/x86_64/panic.c index 813c9a00..d6371e0c 100644 --- a/src/arch/x86_64/panic.c +++ b/src/arch/x86_64/panic.c @@ -18,7 +18,7 @@ static void tracestack(uint64_t** addr){ } } -__attribute((noreturn)) void _panic(char* reason, arch_regserror *reg){ +__attribute((noreturn)) void _panic(char* reason, arch_regs *reg){ printf("PANIC: %s.\n", reason);