spinlock #14

Merged
xamidev merged 4 commits from spinlock into main 2026-03-15 09:55:46 +01:00
3 changed files with 13 additions and 40 deletions
Showing only changes of commit 5eaf193d42 - Show all commits

View File

@@ -73,35 +73,17 @@ void panic(struct cpu_status_t* ctx, const char* str)
CLEAR_INTERRUPTS; CLEAR_INTERRUPTS;
panic_count += 1; panic_count += 1;
if (ctx == NULL) { if (ctx == NULL) {
DEBUG("\x1b[38;5;231m\x1b[48;5;196mKernel panic!!!\x1b[0m Something went horribly wrong! (no cpu ctx)"); printf("\r\n\x1b[38;5;231m\x1b[48;5;196mKernel panic!!!\x1b[48;5;232m Something went horribly wrong! (no cpu ctx)");
printf("\x1b[38;5;231m\x1b[48;5;27m"); printf("\r\n%s\r\n\x1b[38;5;231m\x1b[0m", str);
DIE_DEBUG(str);
printf("\x1b[0m");
skputc('\r');
skputc('\n');
DEBUG("\x1b[38;5;231m\x1b[48;5;196mend Kernel panic\x1b[0m");
if (init.terminal) {
printf("\r\n\x1b[38;5;231m\x1b[48;5;196mKernel panic!!!\x1b[48;5;232m Something went horribly wrong! (no cpu ctx)");
printf("\r\n%s\r\n\x1b[38;5;231mend Kernel panic\x1b[0m", str);
}
debug_stack_trace(100); debug_stack_trace(100);
hcf(); hcf();
} }
DEBUG("\x1b[38;5;231m\x1b[48;5;196mKernel panic!!!\x1b[0m at rip=%p\r\nSomething went horribly wrong! (%s) vect=0x%.2x errcode=0x%x\n\rrax=%p rbx=%p rcx=%p rdx=%p\n\rrsi=%p rdi=%p r8=%p r9=%p\n\rr10=%p r11=%p r12=%p r13=%p\n\rr14=%p r15=%p\n\n\rflags=%p\n\r\x1b[0m",
ctx->iret_rip, printf("\r\n\x1b[38;5;231m\x1b[48;5;196mKernel panic!!!\x1b[48;5;232mat rip=%p\r\nSomething went horribly wrong! (%s) vect=0x%.2x errcode=0x%x\n\rrax=%p rbx=%p rcx=%p rdx=%p\n\rrsi=%p rdi=%p r8=%p r9=%p\n\rr10=%p r11=%p r12=%p r13=%p\n\rr14=%p r15=%p\n\n\rflags=%p ",
str, ctx->iret_rip,
ctx->vector_number, ctx->error_code, ctx->rax, ctx->rbx, ctx->rcx, ctx->rdx, ctx->rsi, ctx->rdi, str,
ctx->r8, ctx->r9, ctx->r10, ctx->r11, ctx->r12, ctx->r13, ctx->r14, ctx->r15, ctx->iret_flags); ctx->vector_number, ctx->error_code, ctx->rax, ctx->rbx, ctx->rcx, ctx->rdx, ctx->rsi, ctx->rdi,
ctx->r8, ctx->r9, ctx->r10, ctx->r11, ctx->r12, ctx->r13, ctx->r14, ctx->r15, ctx->iret_flags);
if (init.terminal) {
printf("\r\n\x1b[38;5;231m\x1b[48;5;196mKernel panic!!!\x1b[48;5;232mat rip=%p\r\nSomething went horribly wrong! (%s) vect=0x%.2x errcode=0x%x\n\rrax=%p rbx=%p rcx=%p rdx=%p\n\rrsi=%p rdi=%p r8=%p r9=%p\n\rr10=%p r11=%p r12=%p r13=%p\n\rr14=%p r15=%p\n\n\rflags=%p ",
ctx->iret_rip,
str,
ctx->vector_number, ctx->error_code, ctx->rax, ctx->rbx, ctx->rcx, ctx->rdx, ctx->rsi, ctx->rdi,
ctx->r8, ctx->r9, ctx->r10, ctx->r11, ctx->r12, ctx->r13, ctx->r14, ctx->r15, ctx->iret_flags);
}
read_rflags(ctx->iret_flags); read_rflags(ctx->iret_flags);
debug_stack_trace(100); debug_stack_trace(100);

View File

@@ -19,10 +19,8 @@ extern struct init_status init;
*/ */
void debug_stack_trace(unsigned int max_frames) void debug_stack_trace(unsigned int max_frames)
{ {
DEBUG("*** begin stack trace ***"); printf("\r\n\x1b[48;5;232m\x1b[38;5;231m*** begin stack trace ***\r\n");
if (init.terminal) {
printf("\r\n\x1b[48;5;232m\x1b[38;5;231m*** begin stack trace ***\r\n");
}
// Thanks GCC :) // Thanks GCC :)
uintptr_t* rbp = (uintptr_t*)__builtin_frame_address(0); uintptr_t* rbp = (uintptr_t*)__builtin_frame_address(0);
@@ -31,11 +29,7 @@ void debug_stack_trace(unsigned int max_frames)
uintptr_t rip = rbp[1]; uintptr_t rip = rbp[1];
uintptr_t offset = 0; uintptr_t offset = 0;
const char* name = debug_find_symbol(rip, &offset); const char* name = debug_find_symbol(rip, &offset);
DEBUG("[%u] <0x%p> (%s+0x%x)", frame, (void*)rip, name, offset); printf("[%u] <0x%p> (%s+0x%x)\r\n", frame, (void*)rip, name, offset);
if (init.terminal) {
printf("[%u] <0x%p> (%s+0x%x)\r\n", frame, (void*)rip, name, offset);
}
uintptr_t* next_rbp = (uintptr_t*)rbp[0]; uintptr_t* next_rbp = (uintptr_t*)rbp[0];
@@ -46,10 +40,8 @@ void debug_stack_trace(unsigned int max_frames)
rbp = next_rbp; rbp = next_rbp;
} }
if (init.terminal) {
printf("*** end stack trace ***\r\nHalting system...\x1b[0m"); printf("*** end stack trace ***\r\n[end Kernel panic]\r\nHalting system...\x1b[0m");
}
DEBUG("*** end stack trace ***");
} }
typedef struct { typedef struct {

View File

@@ -126,6 +126,5 @@ void kmain()
scheduler_init(); scheduler_init();
kputs(PEPPEROS_SPLASH); kputs(PEPPEROS_SPLASH);
idle(); idle();
} }