From 00ea2b1b3b6ef38bc3dc740f6b21cb1149fd75c0 Mon Sep 17 00:00:00 2001 From: Max Wash Date: Sun, 8 Feb 2026 11:36:16 +0000 Subject: [PATCH] x86_64: adjust formatting --- arch/x86_64/include/arch/gdt.h | 24 +- arch/x86_64/include/mango/machine/cpu.h | 12 +- arch/x86_64/include/mango/machine/init.h | 9 +- arch/x86_64/init.c | 24 +- arch/x86_64/irq.c | 512 +++++++++++------------ arch/x86_64/panic.c | 104 +++-- arch/x86_64/thread_switch.S | 12 +- 7 files changed, 366 insertions(+), 331 deletions(-) diff --git a/arch/x86_64/include/arch/gdt.h b/arch/x86_64/include/arch/gdt.h index 3b4d9b1..d12e97e 100644 --- a/arch/x86_64/include/arch/gdt.h +++ b/arch/x86_64/include/arch/gdt.h @@ -9,19 +9,19 @@ extern "C" { #endif -#define NR_GDT_ENTRIES 5 +#define NR_GDT_ENTRIES 5 -#define GDT_A_PRESENT (1 << 7) -#define GDT_A_USER (3 << 5) -#define GDT_A_CODE (3 << 3) -#define GDT_A_DATA (8 << 1) -#define GDT_A_RPLK (1 << 5) -#define GDT_A_CODEREAD (1 << 1) -#define GDT_A_DATAWRITE (1 << 1) -#define GDT_A_GROWUP (1 << 5) -#define GDT_F_64BIT (0x2F) -#define GDT_F_32BIT (0x4F) -#define GDT_F_16BIT (0xF) +#define GDT_A_PRESENT (1 << 7) +#define GDT_A_USER (3 << 5) +#define GDT_A_CODE (3 << 3) +#define GDT_A_DATA (8 << 1) +#define GDT_A_RPLK (1 << 5) +#define GDT_A_CODEREAD (1 << 1) +#define GDT_A_DATAWRITE (1 << 1) +#define GDT_A_GROWUP (1 << 5) +#define GDT_F_64BIT (0x2F) +#define GDT_F_32BIT (0x4F) +#define GDT_F_16BIT (0xF) struct gdt_entry { uint16_t ge_limit_low; diff --git a/arch/x86_64/include/mango/machine/cpu.h b/arch/x86_64/include/mango/machine/cpu.h index 9d1ef16..f540bce 100644 --- a/arch/x86_64/include/mango/machine/cpu.h +++ b/arch/x86_64/include/mango/machine/cpu.h @@ -3,16 +3,24 @@ #include #include +#include +#include #ifdef __cplusplus extern "C" { #endif -#define ML_BIG_ENDIAN 0 +#define ML_BIG_ENDIAN 0 -#define ml_cpu_block_get_id(p) ((p)->c_cpu_id) +#define ml_cpu_block_get_id(p) ((p)->c_cpu_id) #define ml_cpu_block_get_data(p) ((p)->c_data) +#if 0 +#define ml_read_sp(sp, bp) \ + asm volatile("mov %%rsp, %0" : "=r"(sp)); \ + asm volatile("mov %%rbp, %0" : "=r"(bp)); +#endif + struct cpu_data; typedef struct ml_cpu_block { diff --git a/arch/x86_64/include/mango/machine/init.h b/arch/x86_64/include/mango/machine/init.h index 8048003..669f9fa 100644 --- a/arch/x86_64/include/mango/machine/init.h +++ b/arch/x86_64/include/mango/machine/init.h @@ -9,11 +9,12 @@ extern "C" { #endif #define __X2(x) #x -#define __X(x) __X2(x) +#define __X(x) __X2(x) -#define __define_initcall(fn, id) \ - static initcall_t __initcall_##fn##id __used \ - __section(".initcall" __X(id) ".init") = (fn) +#define __define_initcall(fn, id) \ + static initcall_t __initcall_##fn##id __used __section( \ + ".initcall" __X(id) ".init") \ + = (fn) extern int ml_init(uintptr_t arg); diff --git a/arch/x86_64/init.c b/arch/x86_64/init.c index 84316d8..9429416 100644 --- a/arch/x86_64/init.c +++ b/arch/x86_64/init.c @@ -102,16 +102,20 @@ int ml_init(uintptr_t arg) put_cpu(this_cpu); struct vm_zone_descriptor vm_zones[] = { - {.zd_id = VM_ZONE_DMA, - .zd_node = 0, - .zd_name = "dma", - .zd_base = 0x00, - .zd_limit = 0xffffff}, - {.zd_id = VM_ZONE_NORMAL, - .zd_node = 0, - .zd_name = "normal", - .zd_base = 0x1000000, - .zd_limit = UINTPTR_MAX}, + { + .zd_id = VM_ZONE_DMA, + .zd_node = 0, + .zd_name = "dma", + .zd_base = 0x00, + .zd_limit = 0xffffff, + }, + { + .zd_id = VM_ZONE_NORMAL, + .zd_node = 0, + .zd_name = "normal", + .zd_base = 0x1000000, + .zd_limit = UINTPTR_MAX, + }, }; vm_bootstrap(vm_zones, sizeof vm_zones / sizeof vm_zones[0]); diff --git a/arch/x86_64/irq.c b/arch/x86_64/irq.c index 235b2f6..f16c748 100644 --- a/arch/x86_64/irq.c +++ b/arch/x86_64/irq.c @@ -194,263 +194,263 @@ void unhook_irq(enum irq_vector vec, struct irq_hook *hook) queue_delete(hook_queue, &hook->irq_entry); } -extern void _isr0(); -extern void _isr1(); -extern void _isr2(); -extern void _isr3(); -extern void _isr4(); -extern void _isr5(); -extern void _isr6(); -extern void _isr7(); -extern void _isr8(); -extern void _isr9(); -extern void _isr10(); -extern void _isr11(); -extern void _isr12(); -extern void _isr13(); -extern void _isr14(); -extern void _isr15(); -extern void _isr16(); -extern void _isr17(); -extern void _isr18(); -extern void _isr19(); -extern void _isr20(); -extern void _isr21(); -extern void _isr22(); -extern void _isr23(); -extern void _isr24(); -extern void _isr25(); -extern void _isr26(); -extern void _isr27(); -extern void _isr28(); -extern void _isr29(); -extern void _isr30(); -extern void _isr31(); +extern void _isr0(void); +extern void _isr1(void); +extern void _isr2(void); +extern void _isr3(void); +extern void _isr4(void); +extern void _isr5(void); +extern void _isr6(void); +extern void _isr7(void); +extern void _isr8(void); +extern void _isr9(void); +extern void _isr10(void); +extern void _isr11(void); +extern void _isr12(void); +extern void _isr13(void); +extern void _isr14(void); +extern void _isr15(void); +extern void _isr16(void); +extern void _isr17(void); +extern void _isr18(void); +extern void _isr19(void); +extern void _isr20(void); +extern void _isr21(void); +extern void _isr22(void); +extern void _isr23(void); +extern void _isr24(void); +extern void _isr25(void); +extern void _isr26(void); +extern void _isr27(void); +extern void _isr28(void); +extern void _isr29(void); +extern void _isr30(void); +extern void _isr31(void); -extern void _irq0(); -extern void _irq1(); -extern void _irq2(); -extern void _irq3(); -extern void _irq4(); -extern void _irq5(); -extern void _irq6(); -extern void _irq7(); -extern void _irq8(); -extern void _irq9(); -extern void _irq10(); -extern void _irq11(); -extern void _irq12(); -extern void _irq13(); -extern void _irq14(); -extern void _irq15(); -extern void _irq16(); -extern void _irq17(); -extern void _irq18(); -extern void _irq19(); -extern void _irq20(); -extern void _irq21(); -extern void _irq22(); -extern void _irq23(); -extern void _irq24(); -extern void _irq25(); -extern void _irq26(); -extern void _irq27(); -extern void _irq28(); -extern void _irq29(); -extern void _irq30(); -extern void _irq31(); -extern void _irq32(); -extern void _irq33(); -extern void _irq34(); -extern void _irq35(); -extern void _irq36(); -extern void _irq37(); -extern void _irq38(); -extern void _irq39(); -extern void _irq40(); -extern void _irq41(); -extern void _irq42(); -extern void _irq43(); -extern void _irq44(); -extern void _irq45(); -extern void _irq46(); -extern void _irq47(); -extern void _irq48(); -extern void _irq49(); -extern void _irq50(); -extern void _irq51(); -extern void _irq52(); -extern void _irq53(); -extern void _irq54(); -extern void _irq55(); -extern void _irq56(); -extern void _irq57(); -extern void _irq58(); -extern void _irq59(); -extern void _irq60(); -extern void _irq61(); -extern void _irq62(); -extern void _irq63(); -extern void _irq64(); -extern void _irq65(); -extern void _irq66(); -extern void _irq67(); -extern void _irq68(); -extern void _irq69(); -extern void _irq70(); -extern void _irq71(); -extern void _irq72(); -extern void _irq73(); -extern void _irq74(); -extern void _irq75(); -extern void _irq76(); -extern void _irq77(); -extern void _irq78(); -extern void _irq79(); -extern void _irq80(); -extern void _irq81(); -extern void _irq82(); -extern void _irq83(); -extern void _irq84(); -extern void _irq85(); -extern void _irq86(); -extern void _irq87(); -extern void _irq88(); -extern void _irq89(); -extern void _irq90(); -extern void _irq91(); -extern void _irq92(); -extern void _irq93(); -extern void _irq94(); -extern void _irq95(); -extern void _irq96(); -extern void _irq97(); -extern void _irq98(); -extern void _irq99(); -extern void _irq100(); -extern void _irq101(); -extern void _irq102(); -extern void _irq103(); -extern void _irq104(); -extern void _irq105(); -extern void _irq106(); -extern void _irq107(); -extern void _irq108(); -extern void _irq109(); -extern void _irq110(); -extern void _irq111(); -extern void _irq112(); -extern void _irq113(); -extern void _irq114(); -extern void _irq115(); -extern void _irq116(); -extern void _irq117(); -extern void _irq118(); -extern void _irq119(); -extern void _irq120(); -extern void _irq121(); -extern void _irq122(); -extern void _irq123(); -extern void _irq124(); -extern void _irq125(); -extern void _irq126(); -extern void _irq127(); -extern void _irq128(); -extern void _irq129(); -extern void _irq130(); -extern void _irq131(); -extern void _irq132(); -extern void _irq133(); -extern void _irq134(); -extern void _irq135(); -extern void _irq136(); -extern void _irq137(); -extern void _irq138(); -extern void _irq139(); -extern void _irq140(); -extern void _irq141(); -extern void _irq142(); -extern void _irq143(); -extern void _irq144(); -extern void _irq145(); -extern void _irq146(); -extern void _irq147(); -extern void _irq148(); -extern void _irq149(); -extern void _irq150(); -extern void _irq151(); -extern void _irq152(); -extern void _irq153(); -extern void _irq154(); -extern void _irq155(); -extern void _irq156(); -extern void _irq157(); -extern void _irq158(); -extern void _irq159(); -extern void _irq160(); -extern void _irq161(); -extern void _irq162(); -extern void _irq163(); -extern void _irq164(); -extern void _irq165(); -extern void _irq166(); -extern void _irq167(); -extern void _irq168(); -extern void _irq169(); -extern void _irq170(); -extern void _irq171(); -extern void _irq172(); -extern void _irq173(); -extern void _irq174(); -extern void _irq175(); -extern void _irq176(); -extern void _irq177(); -extern void _irq178(); -extern void _irq179(); -extern void _irq180(); -extern void _irq181(); -extern void _irq182(); -extern void _irq183(); -extern void _irq184(); -extern void _irq185(); -extern void _irq186(); -extern void _irq187(); -extern void _irq188(); -extern void _irq189(); -extern void _irq190(); -extern void _irq191(); -extern void _irq192(); -extern void _irq193(); -extern void _irq194(); -extern void _irq195(); -extern void _irq196(); -extern void _irq197(); -extern void _irq198(); -extern void _irq199(); -extern void _irq200(); -extern void _irq201(); -extern void _irq202(); -extern void _irq203(); -extern void _irq204(); -extern void _irq205(); -extern void _irq206(); -extern void _irq207(); -extern void _irq208(); -extern void _irq209(); -extern void _irq210(); -extern void _irq211(); -extern void _irq212(); -extern void _irq213(); -extern void _irq214(); -extern void _irq215(); -extern void _irq216(); -extern void _irq217(); -extern void _irq218(); -extern void _irq219(); -extern void _irq220(); -extern void _irq221(); -extern void _irq222(); -extern void _irq223(); +extern void _irq0(void); +extern void _irq1(void); +extern void _irq2(void); +extern void _irq3(void); +extern void _irq4(void); +extern void _irq5(void); +extern void _irq6(void); +extern void _irq7(void); +extern void _irq8(void); +extern void _irq9(void); +extern void _irq10(void); +extern void _irq11(void); +extern void _irq12(void); +extern void _irq13(void); +extern void _irq14(void); +extern void _irq15(void); +extern void _irq16(void); +extern void _irq17(void); +extern void _irq18(void); +extern void _irq19(void); +extern void _irq20(void); +extern void _irq21(void); +extern void _irq22(void); +extern void _irq23(void); +extern void _irq24(void); +extern void _irq25(void); +extern void _irq26(void); +extern void _irq27(void); +extern void _irq28(void); +extern void _irq29(void); +extern void _irq30(void); +extern void _irq31(void); +extern void _irq32(void); +extern void _irq33(void); +extern void _irq34(void); +extern void _irq35(void); +extern void _irq36(void); +extern void _irq37(void); +extern void _irq38(void); +extern void _irq39(void); +extern void _irq40(void); +extern void _irq41(void); +extern void _irq42(void); +extern void _irq43(void); +extern void _irq44(void); +extern void _irq45(void); +extern void _irq46(void); +extern void _irq47(void); +extern void _irq48(void); +extern void _irq49(void); +extern void _irq50(void); +extern void _irq51(void); +extern void _irq52(void); +extern void _irq53(void); +extern void _irq54(void); +extern void _irq55(void); +extern void _irq56(void); +extern void _irq57(void); +extern void _irq58(void); +extern void _irq59(void); +extern void _irq60(void); +extern void _irq61(void); +extern void _irq62(void); +extern void _irq63(void); +extern void _irq64(void); +extern void _irq65(void); +extern void _irq66(void); +extern void _irq67(void); +extern void _irq68(void); +extern void _irq69(void); +extern void _irq70(void); +extern void _irq71(void); +extern void _irq72(void); +extern void _irq73(void); +extern void _irq74(void); +extern void _irq75(void); +extern void _irq76(void); +extern void _irq77(void); +extern void _irq78(void); +extern void _irq79(void); +extern void _irq80(void); +extern void _irq81(void); +extern void _irq82(void); +extern void _irq83(void); +extern void _irq84(void); +extern void _irq85(void); +extern void _irq86(void); +extern void _irq87(void); +extern void _irq88(void); +extern void _irq89(void); +extern void _irq90(void); +extern void _irq91(void); +extern void _irq92(void); +extern void _irq93(void); +extern void _irq94(void); +extern void _irq95(void); +extern void _irq96(void); +extern void _irq97(void); +extern void _irq98(void); +extern void _irq99(void); +extern void _irq100(void); +extern void _irq101(void); +extern void _irq102(void); +extern void _irq103(void); +extern void _irq104(void); +extern void _irq105(void); +extern void _irq106(void); +extern void _irq107(void); +extern void _irq108(void); +extern void _irq109(void); +extern void _irq110(void); +extern void _irq111(void); +extern void _irq112(void); +extern void _irq113(void); +extern void _irq114(void); +extern void _irq115(void); +extern void _irq116(void); +extern void _irq117(void); +extern void _irq118(void); +extern void _irq119(void); +extern void _irq120(void); +extern void _irq121(void); +extern void _irq122(void); +extern void _irq123(void); +extern void _irq124(void); +extern void _irq125(void); +extern void _irq126(void); +extern void _irq127(void); +extern void _irq128(void); +extern void _irq129(void); +extern void _irq130(void); +extern void _irq131(void); +extern void _irq132(void); +extern void _irq133(void); +extern void _irq134(void); +extern void _irq135(void); +extern void _irq136(void); +extern void _irq137(void); +extern void _irq138(void); +extern void _irq139(void); +extern void _irq140(void); +extern void _irq141(void); +extern void _irq142(void); +extern void _irq143(void); +extern void _irq144(void); +extern void _irq145(void); +extern void _irq146(void); +extern void _irq147(void); +extern void _irq148(void); +extern void _irq149(void); +extern void _irq150(void); +extern void _irq151(void); +extern void _irq152(void); +extern void _irq153(void); +extern void _irq154(void); +extern void _irq155(void); +extern void _irq156(void); +extern void _irq157(void); +extern void _irq158(void); +extern void _irq159(void); +extern void _irq160(void); +extern void _irq161(void); +extern void _irq162(void); +extern void _irq163(void); +extern void _irq164(void); +extern void _irq165(void); +extern void _irq166(void); +extern void _irq167(void); +extern void _irq168(void); +extern void _irq169(void); +extern void _irq170(void); +extern void _irq171(void); +extern void _irq172(void); +extern void _irq173(void); +extern void _irq174(void); +extern void _irq175(void); +extern void _irq176(void); +extern void _irq177(void); +extern void _irq178(void); +extern void _irq179(void); +extern void _irq180(void); +extern void _irq181(void); +extern void _irq182(void); +extern void _irq183(void); +extern void _irq184(void); +extern void _irq185(void); +extern void _irq186(void); +extern void _irq187(void); +extern void _irq188(void); +extern void _irq189(void); +extern void _irq190(void); +extern void _irq191(void); +extern void _irq192(void); +extern void _irq193(void); +extern void _irq194(void); +extern void _irq195(void); +extern void _irq196(void); +extern void _irq197(void); +extern void _irq198(void); +extern void _irq199(void); +extern void _irq200(void); +extern void _irq201(void); +extern void _irq202(void); +extern void _irq203(void); +extern void _irq204(void); +extern void _irq205(void); +extern void _irq206(void); +extern void _irq207(void); +extern void _irq208(void); +extern void _irq209(void); +extern void _irq210(void); +extern void _irq211(void); +extern void _irq212(void); +extern void _irq213(void); +extern void _irq214(void); +extern void _irq215(void); +extern void _irq216(void); +extern void _irq217(void); +extern void _irq218(void); +extern void _irq219(void); +extern void _irq220(void); +extern void _irq221(void); +extern void _irq222(void); +extern void _irq223(void); static uintptr_t int_entry_points[NR_IDT_ENTRIES] = { [0] = (uintptr_t)_isr0, [1] = (uintptr_t)_isr1, diff --git a/arch/x86_64/panic.c b/arch/x86_64/panic.c index faa6098..66889a8 100644 --- a/arch/x86_64/panic.c +++ b/arch/x86_64/panic.c @@ -1,24 +1,25 @@ -#include "mango/machine/panic.h" -#include "mango/vm.h" -#include -#include #include +#include +#include +#include +#include +#include -#define R_CF 0 -#define R_PF 2 -#define R_AF 4 -#define R_ZF 6 -#define R_SF 7 -#define R_TF 8 -#define R_IF 9 -#define R_DF 10 -#define R_OF 11 -#define R_NT 14 -#define R_VM 17 -#define R_AC 18 +#define R_CF 0 +#define R_PF 2 +#define R_AF 4 +#define R_ZF 6 +#define R_SF 7 +#define R_TF 8 +#define R_IF 9 +#define R_DF 10 +#define R_OF 11 +#define R_NT 14 +#define R_VM 17 +#define R_AC 18 #define R_VIF 19 #define R_VIP 20 -#define R_ID 21 +#define R_ID 21 #define R_MAX 21 struct stack_frame { @@ -82,7 +83,11 @@ static void print_rflags(uintptr_t rflags) if (rflags & (1 << i)) { const char *name = pf_rfl_name(i); if (name) { - buf_i += snprintf(buf + buf_i, sizeof(buf) - buf_i, " %s", name); + buf_i += snprintf( + buf + buf_i, + sizeof(buf) - buf_i, + " %s", + name); } } } @@ -96,25 +101,38 @@ void ml_print_cpu_state(struct ml_cpu_context *ctx) printk("cpu state:"); if (ctx) { printk(" rax %016llx rbx %016llx rcx %016llx", - ctx->rax, ctx->rbx, ctx->rcx); + ctx->rax, + ctx->rbx, + ctx->rcx); printk(" rdx %016llx rsi %016llx rdi %016llx", - ctx->rdx, ctx->rsi, ctx->rdi); + ctx->rdx, + ctx->rsi, + ctx->rdi); printk(" rsp %016llx rbp %016llx r8 %016llx", - ctx->rsp, ctx->rbp, ctx->r8); + ctx->rsp, + ctx->rbp, + ctx->r8); printk(" r9 %016llx r10 %016llx r11 %016llx", - ctx->r9, ctx->r10, ctx->r11); + ctx->r9, + ctx->r10, + ctx->r11); printk(" r12 %016llx r13 %016llx r14 %016llx", - ctx->r12, ctx->r13, ctx->r14); + ctx->r12, + ctx->r13, + ctx->r14); printk(" r15 %016llx rip %016llx cs %04x ss %04x", - ctx->r15, ctx->rip, ctx->cs, ctx->ss); + ctx->r15, + ctx->rip, + ctx->cs, + ctx->ss); print_rflags(ctx->rflags); } uintptr_t cr0 = 0, cr2 = 0, cr3 = 0, cr4 = 0; - asm volatile("mov %%cr0, %%rax" : "=a" (cr0)); - asm volatile("mov %%cr2, %%rax" : "=a" (cr2)); - asm volatile("mov %%cr3, %%rax" : "=a" (cr3)); - asm volatile("mov %%cr4, %%rax" : "=a" (cr4)); + asm volatile("mov %%cr0, %%rax" : "=a"(cr0)); + asm volatile("mov %%cr2, %%rax" : "=a"(cr2)); + asm volatile("mov %%cr3, %%rax" : "=a"(cr3)); + asm volatile("mov %%cr4, %%rax" : "=a"(cr4)); printk(" cr0 %016llx cr2 %016llx", cr0, cr2); printk(" cr3 %016llx cr4 %016llx", cr3, cr4); } @@ -124,22 +142,27 @@ static void print_stack_item(uintptr_t addr) if (!addr) { return; } - + char buf[64]; size_t i = 0; - + i += snprintf(buf, sizeof(buf), " [<%p>] ", addr); - + size_t offset = 0; char name[128]; int found = -1; - + if (found == 0 && name[0] != '\0') { - i += snprintf(buf + i, sizeof(buf) - i, "%s+0x%lx", name, offset); + i += snprintf( + buf + i, + sizeof(buf) - i, + "%s+0x%lx", + name, + offset); } else { i += snprintf(buf + i, sizeof(buf) - i, "?"); } - + printk("%s", buf); } @@ -147,20 +170,19 @@ static void print_stack_trace(uintptr_t ip, uintptr_t *bp) { struct stack_frame *stk = (struct stack_frame *)bp; printk("call trace:"); - + print_stack_item(ip); int max_frames = 10, current_frame = 0; while (1) { - if (!vm_virt_to_phys(stk) || - bp == NULL || - current_frame > max_frames) { + if (!vm_virt_to_phys(stk) || bp == NULL + || current_frame > max_frames) { break; } - + uintptr_t addr = stk->rip; print_stack_item(addr); - + stk = (struct stack_frame *)stk->rbp; current_frame++; } @@ -169,7 +191,7 @@ static void print_stack_trace(uintptr_t ip, uintptr_t *bp) void ml_print_stack_trace(uintptr_t ip) { uintptr_t *bp; - asm volatile("mov %%rbp, %0" : "=r" (bp)); + asm volatile("mov %%rbp, %0" : "=r"(bp)); print_stack_trace(ip, bp); } diff --git a/arch/x86_64/thread_switch.S b/arch/x86_64/thread_switch.S index 793dd20..f4bd690 100644 --- a/arch/x86_64/thread_switch.S +++ b/arch/x86_64/thread_switch.S @@ -1,9 +1,9 @@ - .code64 +.code64 - .extern THREAD_sp - - .global switch_to - .type switch_to, @function +.extern THREAD_sp + +.global switch_to +.type switch_to, @function // %rdi = (struct thread *) current thread. // %rsi = (struct thread *) next thread. @@ -26,7 +26,7 @@ switch_to: push %r13 push %r14 push %r15 - + movq %rsp, THREAD_sp(%rdi) movq THREAD_sp(%rsi), %rsp