From: Tulio A M Mendes Date: Tue, 10 Feb 2026 04:27:48 +0000 (-0300) Subject: refactor: move gdt.h/idt.h out of generic include/ into arch-specific paths X-Git-Url: https://projects.tadryanom.me/docs/static/gitweb.css?a=commitdiff_plain;h=c42c5d1cb7ffe458e604242b01156e2a8ddb1ad8;p=AdrOS.git refactor: move gdt.h/idt.h out of generic include/ into arch-specific paths gdt.h and idt.h are x86-only concepts (Global Descriptor Table, Interrupt Descriptor Table) that do not exist on ARM/RISC-V/MIPS. They should not live in the generic include/ directory. Changes: - Delete include/gdt.h wrapper; all 3 consumers (arch/x86/ and hal/x86/) now include arch/x86/gdt.h directly. - Delete include/idt.h wrapper; create include/interrupts.h as the generic abstraction (provides struct registers + isr_handler_t with arch-specific dispatch). - Generic kernel code (syscall.c, uaccess.c, process.h) now includes interrupts.h instead of idt.h. - x86-only code (idt.c, timer HAL, keyboard HAL, usermode, etc.) now includes arch/x86/idt.h directly. - Remove unused idt.h and io.h includes from kernel/main.c. Passes: make, cppcheck, QEMU smoke test. --- diff --git a/include/arch/x86/usermode.h b/include/arch/x86/usermode.h index 0f1b015..df82642 100644 --- a/include/arch/x86/usermode.h +++ b/include/arch/x86/usermode.h @@ -3,7 +3,7 @@ #include -#include "idt.h" +#include "arch/x86/idt.h" #if defined(__i386__) __attribute__((noreturn)) void x86_enter_usermode(uintptr_t user_eip, uintptr_t user_esp); diff --git a/include/gdt.h b/include/gdt.h deleted file mode 100644 index b2b7537..0000000 --- a/include/gdt.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef GDT_H -#define GDT_H - -#if defined(__i386__) || defined(__x86_64__) -#include "arch/x86/gdt.h" -#else - -#include -#include - -static inline void gdt_init(void) { } -static inline void tss_set_kernel_stack(uintptr_t esp0) { (void)esp0; } - -#endif - -#endif diff --git a/include/idt.h b/include/idt.h deleted file mode 100644 index 2897e40..0000000 --- a/include/idt.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef IDT_H -#define IDT_H - -#include - -#if defined(__i386__) || defined(__x86_64__) -#include "arch/x86/idt.h" -#else - -/* Non-x86: provide a minimal compatibility surface. - Interrupt controller specifics live in arch code. */ -struct registers { - uint32_t int_no; - uint32_t err_code; -}; - -typedef void (*isr_handler_t)(struct registers*); - -static inline void idt_init(void) { } -static inline void register_interrupt_handler(uint8_t n, isr_handler_t handler) { - (void)n; - (void)handler; -} - -#endif - -#endif diff --git a/include/interrupts.h b/include/interrupts.h new file mode 100644 index 0000000..c3f0b1c --- /dev/null +++ b/include/interrupts.h @@ -0,0 +1,27 @@ +#ifndef INTERRUPTS_H +#define INTERRUPTS_H + +#include + +#if defined(__i386__) || defined(__x86_64__) +#include "arch/x86/idt.h" +#else + +/* Non-x86: provide a minimal compatibility surface. + Interrupt controller specifics live in arch code. */ +struct registers { + uint32_t int_no; + uint32_t err_code; +}; + +typedef void (*isr_handler_t)(struct registers*); + +static inline void idt_init(void) { } +static inline void register_interrupt_handler(uint8_t n, isr_handler_t handler) { + (void)n; + (void)handler; +} + +#endif + +#endif /* INTERRUPTS_H */ diff --git a/include/process.h b/include/process.h index ba51960..324dad2 100644 --- a/include/process.h +++ b/include/process.h @@ -2,7 +2,7 @@ #define PROCESS_H #include -#include "idt.h" // For struct registers +#include "interrupts.h" // For struct registers #include "fs.h" #include "signal.h" diff --git a/src/arch/x86/arch_early_setup.c b/src/arch/x86/arch_early_setup.c index 5760bbd..346b981 100644 --- a/src/arch/x86/arch_early_setup.c +++ b/src/arch/x86/arch_early_setup.c @@ -2,8 +2,8 @@ #include "kernel/boot_info.h" -#include "gdt.h" -#include "idt.h" +#include "arch/x86/gdt.h" +#include "arch/x86/idt.h" #include "uart_console.h" #include "multiboot2.h" diff --git a/src/arch/x86/gdt.c b/src/arch/x86/gdt.c index a4fe0f4..2712d75 100644 --- a/src/arch/x86/gdt.c +++ b/src/arch/x86/gdt.c @@ -1,4 +1,4 @@ -#include "gdt.h" +#include "arch/x86/gdt.h" #include "uart_console.h" #include "utils.h" diff --git a/src/arch/x86/idt.c b/src/arch/x86/idt.c index 4e39b4b..2ef9b86 100644 --- a/src/arch/x86/idt.c +++ b/src/arch/x86/idt.c @@ -1,4 +1,4 @@ -#include "idt.h" +#include "arch/x86/idt.h" #include "io.h" #include "uart_console.h" #include "process.h" diff --git a/src/arch/x86/usermode.c b/src/arch/x86/usermode.c index d80e18e..3f3e36f 100644 --- a/src/arch/x86/usermode.c +++ b/src/arch/x86/usermode.c @@ -6,7 +6,7 @@ #include "uart_console.h" #include "utils.h" #include "arch/x86/usermode.h" -#include "idt.h" +#include "arch/x86/idt.h" #if defined(__i386__) diff --git a/src/hal/x86/cpu.c b/src/hal/x86/cpu.c index 1ebd6ef..36252d8 100644 --- a/src/hal/x86/cpu.c +++ b/src/hal/x86/cpu.c @@ -1,6 +1,6 @@ #include "hal/cpu.h" -#include "gdt.h" +#include "arch/x86/gdt.h" #if defined(__i386__) || defined(__x86_64__) diff --git a/src/hal/x86/keyboard.c b/src/hal/x86/keyboard.c index aefa2ce..9f39e2e 100644 --- a/src/hal/x86/keyboard.c +++ b/src/hal/x86/keyboard.c @@ -1,7 +1,7 @@ #include "hal/keyboard.h" #if defined(__i386__) -#include "idt.h" +#include "arch/x86/idt.h" #include "io.h" static hal_keyboard_char_cb_t g_cb = 0; diff --git a/src/hal/x86/timer.c b/src/hal/x86/timer.c index 710abb9..4825fb0 100644 --- a/src/hal/x86/timer.c +++ b/src/hal/x86/timer.c @@ -1,7 +1,7 @@ #include "hal/timer.h" #if defined(__i386__) -#include "idt.h" +#include "arch/x86/idt.h" #include "io.h" static hal_timer_tick_cb_t g_tick_cb = 0; diff --git a/src/kernel/main.c b/src/kernel/main.c index a89b560..cdbf105 100644 --- a/src/kernel/main.c +++ b/src/kernel/main.c @@ -5,8 +5,6 @@ #include "uart_console.h" #include "pmm.h" #include "vmm.h" -#include "idt.h" -#include "io.h" #include "process.h" #include "keyboard.h" #include "shell.h" diff --git a/src/kernel/syscall.c b/src/kernel/syscall.c index 75cd509..447f6f0 100644 --- a/src/kernel/syscall.c +++ b/src/kernel/syscall.c @@ -1,5 +1,5 @@ #include "syscall.h" -#include "idt.h" +#include "interrupts.h" #include "fs.h" #include "process.h" #include "spinlock.h" diff --git a/src/kernel/uaccess.c b/src/kernel/uaccess.c index 9ec48db..b47e57d 100644 --- a/src/kernel/uaccess.c +++ b/src/kernel/uaccess.c @@ -1,7 +1,7 @@ #include "uaccess.h" #include "errno.h" -#include "idt.h" +#include "interrupts.h" #include