refactor: decouple i386 specific instruction invocation
authorMinep <lunaixsky@qq.com>
Tue, 25 Jul 2023 18:24:03 +0000 (19:24 +0100)
committerMinep <lunaixsky@qq.com>
Tue, 25 Jul 2023 18:24:03 +0000 (19:24 +0100)
refactor: re-organize the directory structure

54 files changed:
lunaix-os/arch/i386/boot/boot.S [moved from lunaix-os/arch/i386/boot.S with 94% similarity]
lunaix-os/arch/i386/boot/hhk.c [moved from lunaix-os/arch/i386/hhk.c with 95% similarity]
lunaix-os/arch/i386/cpu.c [new file with mode: 0644]
lunaix-os/hal/apic.c
lunaix-os/hal/cpu.c [deleted file]
lunaix-os/hal/ioapic.c
lunaix-os/includes/arch/abi.h
lunaix-os/includes/arch/i386/boot/multiboot.h [moved from lunaix-os/includes/arch/x86/boot/multiboot.h with 100% similarity]
lunaix-os/includes/arch/i386/gdt.h [moved from lunaix-os/includes/arch/x86/gdt.h with 100% similarity]
lunaix-os/includes/arch/i386/i386_abi.h [moved from lunaix-os/includes/arch/x86/i386_abi.h with 92% similarity]
lunaix-os/includes/arch/i386/i386_asm.h [moved from lunaix-os/includes/arch/x86/i386_asm.h with 100% similarity]
lunaix-os/includes/arch/i386/idt.h [moved from lunaix-os/includes/arch/x86/idt.h with 100% similarity]
lunaix-os/includes/arch/i386/interrupt.S.inc [moved from lunaix-os/includes/arch/x86/interrupt.S.inc with 100% similarity]
lunaix-os/includes/arch/i386/interrupts.h [moved from lunaix-os/includes/arch/x86/interrupts.h with 79% similarity]
lunaix-os/includes/arch/i386/intrhnds.h [moved from lunaix-os/includes/arch/x86/intrhnds.h with 100% similarity]
lunaix-os/includes/arch/i386/tss.h [moved from lunaix-os/includes/arch/x86/tss.h with 100% similarity]
lunaix-os/includes/arch/i386/vectors.h [moved from lunaix-os/includes/arch/x86/vectors.h with 100% similarity]
lunaix-os/includes/hal/acpi/acpi.h
lunaix-os/includes/hal/cpu.h
lunaix-os/includes/lunaix/compiler.h [new file with mode: 0644]
lunaix-os/includes/lunaix/isrm.h
lunaix-os/includes/lunaix/process.h
lunaix-os/includes/lunaix/spike.h
lunaix-os/includes/lunaix/syscall.h
lunaix-os/includes/lunaix/types.h
lunaix-os/includes/sdbg/gdbstub.h
lunaix-os/includes/sdbg/lsdbg.h
lunaix-os/kernel/asm/i386/gdt.c [moved from lunaix-os/kernel/asm/x86/gdt.c with 92% similarity]
lunaix-os/kernel/asm/i386/i386_isrm.c [moved from lunaix-os/kernel/asm/x86/i386_isrm.c with 100% similarity]
lunaix-os/kernel/asm/i386/interrupt.S [moved from lunaix-os/kernel/asm/x86/interrupt.S with 97% similarity]
lunaix-os/kernel/asm/i386/interrupts.c [moved from lunaix-os/kernel/asm/x86/interrupts.c with 94% similarity]
lunaix-os/kernel/asm/i386/intr_routines.c [moved from lunaix-os/kernel/asm/x86/intr_routines.c with 98% similarity]
lunaix-os/kernel/asm/i386/intrhnds.S [moved from lunaix-os/kernel/asm/x86/intrhnds.S with 100% similarity]
lunaix-os/kernel/asm/i386/intrhnds.c [moved from lunaix-os/kernel/asm/x86/intrhnds.c with 99% similarity]
lunaix-os/kernel/asm/i386/pfault.c [moved from lunaix-os/kernel/asm/x86/pfault.c with 93% similarity]
lunaix-os/kernel/asm/i386/proc.c [new file with mode: 0644]
lunaix-os/kernel/asm/i386/prologue.S [moved from lunaix-os/kernel/asm/x86/prologue.S with 97% similarity]
lunaix-os/kernel/asm/i386/syscall.S [moved from lunaix-os/kernel/asm/x86/syscall.S with 100% similarity]
lunaix-os/kernel/asm/i386/tss.c [moved from lunaix-os/kernel/asm/x86/tss.c with 65% similarity]
lunaix-os/kernel/device/builtin/devrand.c
lunaix-os/kernel/exe/exec.c
lunaix-os/kernel/kinit.c [moved from lunaix-os/kernel/k_init.c with 85% similarity]
lunaix-os/kernel/mm/mmap.c
lunaix-os/kernel/mm/vmm.c
lunaix-os/kernel/peripheral/ps2kbd.c
lunaix-os/kernel/proc0.c
lunaix-os/kernel/process/process.c
lunaix-os/kernel/process/sched.c
lunaix-os/kernel/spike.c
lunaix-os/kernel/syscall.c
lunaix-os/kernel/time/timer.c
lunaix-os/link/linker.ld
lunaix-os/makeinc/toolchain.mkinc
lunaix-os/scripts/x86_idt_generator.py

similarity index 94%
rename from lunaix-os/arch/i386/boot.S
rename to lunaix-os/arch/i386/boot/boot.S
index f6550cde788b5920bd924c78f0496237f735ad3d..452a9835d7afc75e7b515edae2dc726cd35b760c 100644 (file)
@@ -1,5 +1,5 @@
 #define __ASM__ 1
-#include <arch/x86/boot/multiboot.h>
+#include <arch/i386/boot/multiboot.h>
 
 #define MB_FLAGS    (MULTIBOOT_MEMORY_INFO | MULTIBOOT_PAGE_ALIGN)
 #define KPG_SIZE    10*4096
@@ -9,7 +9,7 @@
     .long MB_FLAGS
     .long CHECKSUM(MB_FLAGS)
 
-.section .bss
+.section .hhk_init_bss
     .global mb_info
     .align 16
     /* 为Multiboot info struct 预留空间 */
@@ -35,7 +35,7 @@
         .skip KPG_SIZE, 0
 
 
-.section .hhk_init
+.section .hhk_init_text
     .global start_
     .type start_, @function     /* Optional, this just give the 
                                  * linker more knowledge about the label 
@@ -50,7 +50,7 @@
 
         /* 
             将咱们的 multiboot_info 挪个地儿,就是上述预留的空间里
-            而后在_hhk_init里,我们会对所有的高半核初始化代码(arch/x86下的所有)进行Identity map
+            而后在_hhk_init里,我们会对所有的高半核初始化代码(arch/i386下的所有)进行Identity map
             这样,我们能够保证当分页与虚拟地址开启后,我们的内核能够访问到multiboot info table
          */
 
similarity index 95%
rename from lunaix-os/arch/i386/hhk.c
rename to lunaix-os/arch/i386/boot/hhk.c
index 4250f79b4810745f83e240e6914364714c6cd16e..d97fc9128b7ce28d1c0316ba3ff73117d0f24a3f 100644 (file)
@@ -1,5 +1,5 @@
-#include <arch/x86/boot/multiboot.h>
-#include <arch/x86/idt.h>
+#include <arch/i386/boot/multiboot.h>
+#include <arch/i386/idt.h>
 #include <lunaix/common.h>
 #include <lunaix/mm/page.h>
 
@@ -32,7 +32,10 @@ extern u8_t __ktext_end;
 extern u8_t __init_hhk_end;
 extern u8_t _k_stack;
 
-void
+#define boot_text __attribute__((section(".hhk_init_text")))
+#define boot_data __attribute__((section(".hhk_init_data")))
+
+void boot_text
 _init_page(x86_page_table* ptd)
 {
     ptd->entry[0] = NEW_L1_ENTRY(PG_PREM_RW, (ptd_t*)ptd + PG_MAX_ENTRIES);
@@ -102,7 +105,7 @@ _init_page(x86_page_table* ptd)
     ptd->entry[PG_MAX_ENTRIES - 1] = NEW_L1_ENTRY(T_SELF_REF_PERM, ptd);
 }
 
-u32_t
+u32_t boot_text
 __save_subset(u8_t* destination, u8_t* base, unsigned int size)
 {
     unsigned int i = 0;
@@ -112,7 +115,7 @@ __save_subset(u8_t* destination, u8_t* base, unsigned int size)
     return i;
 }
 
-void
+void boot_text
 _save_multiboot_info(multiboot_info_t* info, u8_t* destination)
 {
     u32_t current = 0;
@@ -133,7 +136,7 @@ _save_multiboot_info(multiboot_info_t* info, u8_t* destination)
     }
 }
 
-void
+void boot_text
 _hhk_init(x86_page_table* ptd, u32_t kpg_size)
 {
 
diff --git a/lunaix-os/arch/i386/cpu.c b/lunaix-os/arch/i386/cpu.c
new file mode 100644 (file)
index 0000000..371d947
--- /dev/null
@@ -0,0 +1,153 @@
+#include <arch/i386/vectors.h>
+#include <cpuid.h>
+#include <hal/cpu.h>
+#include <lunaix/types.h>
+
+#define BRAND_LEAF 0x80000000UL
+
+void
+cpu_get_model(char* model_out)
+{
+    u32_t* out = (u32_t*)model_out;
+    u32_t eax = 0, ebx = 0, edx = 0, ecx = 0;
+
+    __get_cpuid(0, &eax, &ebx, &ecx, &edx);
+
+    out[0] = ebx;
+    out[1] = edx;
+    out[2] = ecx;
+    model_out[12] = '\0';
+}
+
+int
+cpu_brand_string_supported()
+{
+    u32_t supported = __get_cpuid_max(BRAND_LEAF, 0);
+    return (supported >= 0x80000004UL);
+}
+
+void
+cpu_get_id(char* id_out)
+{
+    if (!cpu_brand_string_supported()) {
+        id_out[0] = '?';
+        id_out[1] = '\0';
+    }
+    u32_t* out = (u32_t*)id_out;
+    u32_t eax = 0, ebx = 0, edx = 0, ecx = 0;
+    for (u32_t i = 2, j = 0; i < 5; i++) {
+        __get_cpuid(BRAND_LEAF + i, &eax, &ebx, &ecx, &edx);
+        out[j] = eax;
+        out[j + 1] = ebx;
+        out[j + 2] = ecx;
+        out[j + 3] = edx;
+        j += 4;
+    }
+    id_out[48] = '\0';
+}
+
+u32_t
+cpu_ldstate()
+{
+    ptr_t val;
+    asm volatile("pushf\n"
+                 "popl %0\n"
+                 : "=r"(val)::);
+    return val;
+}
+
+u32_t
+cpu_ldconfig()
+{
+    ptr_t val;
+    asm volatile("movl %%cr0,%0" : "=r"(val));
+    return val;
+}
+
+void
+cpu_chconfig(u32_t val)
+{
+    asm("mov %0, %%cr0" ::"r"(val));
+}
+
+u32_t
+cpu_ldvmspace()
+{
+    ptr_t val;
+    asm volatile("movl %%cr3,%0" : "=r"(val));
+    return val;
+}
+
+void
+cpu_chvmspace(u32_t val)
+{
+    asm("mov %0, %%cr3" ::"r"(val));
+}
+
+void
+cpu_flush_page(ptr_t va)
+{
+    asm volatile("invlpg (%0)" ::"r"(va) : "memory");
+}
+
+void
+cpu_flush_vmspace()
+{
+    asm("movl %%cr3, %%eax\n"
+        "movl %%eax, %%cr3" ::
+          : "eax");
+}
+
+void
+cpu_enable_interrupt()
+{
+    asm volatile("sti");
+}
+
+void
+cpu_disable_interrupt()
+{
+    asm volatile("cli");
+}
+
+void
+cpu_trap_sched()
+{
+    asm("int %0" ::"i"(LUNAIX_SCHED));
+}
+
+void
+cpu_trap_panic(char* message)
+{
+    asm("int %0" ::"i"(LUNAIX_SYS_PANIC), "D"(message));
+}
+
+void
+cpu_wait()
+{
+    asm("hlt");
+}
+
+ptr_t
+cpu_ldeaddr()
+{
+    ptr_t val;
+    asm volatile("movl %%cr2,%0" : "=r"(val));
+    return val;
+}
+
+void
+cpu_rdmsr(u32_t msr_idx, u32_t* reg_high, u32_t* reg_low)
+{
+    u32_t h = 0, l = 0;
+    asm volatile("rdmsr" : "=d"(h), "=a"(l) : "c"(msr_idx));
+
+    *reg_high = h;
+    *reg_low = l;
+}
+
+void
+cpu_wrmsr(u32_t msr_idx, u32_t reg_high, u32_t reg_low)
+{
+    asm volatile("wrmsr" : : "d"(reg_high), "a"(reg_low), "c"(msr_idx));
+}
\ No newline at end of file
index 44385a475ca9b28ad020aff07ae0fbecec9f583c..29794eb11d74e715ecd663506d2d10fb77c8c422 100644 (file)
@@ -13,7 +13,7 @@
 #include <hal/pic.h>
 #include <hal/rtc.h>
 
-#include <arch/x86/interrupts.h>
+#include <arch/i386/interrupts.h>
 
 #include <lunaix/mm/mmio.h>
 #include <lunaix/spike.h>
@@ -34,7 +34,9 @@ apic_init()
 
     // Make sure the APIC is there
     //  FUTURE: Use 8259 as fallback
-    assert_msg(cpu_has_apic(), "No APIC detected!");
+
+    // FIXME apic abstraction as local interrupt controller
+    // assert_msg(cpu_has_apic(), "No APIC detected!");
 
     // As we are going to use APIC, disable the old 8259 PIC
     pic_disable();
diff --git a/lunaix-os/hal/cpu.c b/lunaix-os/hal/cpu.c
deleted file mode 100644 (file)
index 77059b6..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-#include <cpuid.h>
-#include <hal/cpu.h>
-#include <hal/rnd.h>
-#include <stdint.h>
-
-void
-cpu_get_model(char* model_out)
-{
-    u32_t* out = (u32_t*)model_out;
-    reg32 eax = 0, ebx = 0, edx = 0, ecx = 0;
-
-    __get_cpuid(0, &eax, &ebx, &ecx, &edx);
-
-    out[0] = ebx;
-    out[1] = edx;
-    out[2] = ecx;
-    model_out[12] = '\0';
-}
-
-#define BRAND_LEAF 0x80000000UL
-
-int
-cpu_brand_string_supported()
-{
-    reg32 supported = __get_cpuid_max(BRAND_LEAF, 0);
-    return (supported >= 0x80000004UL);
-}
-
-void
-cpu_get_brand(char* brand_out)
-{
-    if (!cpu_brand_string_supported()) {
-        brand_out[0] = '?';
-        brand_out[1] = '\0';
-    }
-    u32_t* out = (u32_t*)brand_out;
-    reg32 eax = 0, ebx = 0, edx = 0, ecx = 0;
-    for (u32_t i = 2, j = 0; i < 5; i++) {
-        __get_cpuid(BRAND_LEAF + i, &eax, &ebx, &ecx, &edx);
-        out[j] = eax;
-        out[j + 1] = ebx;
-        out[j + 2] = ecx;
-        out[j + 3] = edx;
-        j += 4;
-    }
-    brand_out[48] = '\0';
-}
-
-int
-cpu_has_apic()
-{
-    // reference: Intel manual, section 10.4.2
-    reg32 eax = 0, ebx = 0, edx = 0, ecx = 0;
-    __get_cpuid(1, &eax, &ebx, &ecx, &edx);
-
-    return (edx & 0x100);
-}
-
-void
-cpu_rdmsr(u32_t msr_idx, u32_t* reg_high, u32_t* reg_low)
-{
-    u32_t h = 0, l = 0;
-    asm volatile("rdmsr" : "=d"(h), "=a"(l) : "c"(msr_idx));
-
-    *reg_high = h;
-    *reg_low = l;
-}
-
-void
-cpu_wrmsr(u32_t msr_idx, u32_t reg_high, u32_t reg_low)
-{
-    asm volatile("wrmsr" : : "d"(reg_high), "a"(reg_low), "c"(msr_idx));
-}
-
-int
-rnd_is_supported()
-{
-    reg32 eax = 0, ebx = 0, ecx = 0, edx = 0;
-    __get_cpuid(0x01, &eax, &ebx, &ecx, &edx);
-    return (ecx & (1 << 30));
-}
\ No newline at end of file
index 3e64f524c8ef02b3768f11a0d937a3407909d46b..bfde8a115a2b7029ec3206cd3067dc162516a9ba 100644 (file)
@@ -1,4 +1,4 @@
-#include <arch/x86/interrupts.h>
+#include <arch/i386/interrupts.h>
 #include <hal/acpi/acpi.h>
 #include <hal/ioapic.h>
 #include <lunaix/common.h>
index baf7ff6c693f9d5ec4a8672de201ca517de4588d..8515974c6ec47b87e943422a17144d7c6de6d4dd 100644 (file)
@@ -9,9 +9,9 @@
 #endif
 
 #ifdef __ARCH_IA32
-    #include "x86/i386_asm.h"
+    #include "i386/i386_asm.h"
     #ifndef __ASM__
-        #include "x86/i386_abi.h"
+        #include "i386/i386_abi.h"
     #endif
 #endif
 
similarity index 92%
rename from lunaix-os/includes/arch/x86/i386_abi.h
rename to lunaix-os/includes/arch/i386/i386_abi.h
index 8bc8cd20701e0d2e27dc4a2da63fc1b5474d7893..0383031fd1ca53cb0342e035058b52feb31feefb 100644 (file)
@@ -5,6 +5,11 @@
 
 #define store_retval_to(proc, retval) (proc)->intr_ctx->registers.eax = (retval)
 
+#define eret_target(proc) (proc)->intr_ctx->execp->eip
+#define eret_stack(proc) (proc)->intr_ctx->execp->esp
+#define intr_ivec(proc) (proc)->intr_ctx->execp->vector
+#define intr_ierr(proc) (proc)->intr_ctx->execp->err_code
+
 #define j_usr(sp, pc)                                                          \
     asm volatile("movw %0, %%ax\n"                                             \
                  "movw %%ax, %%es\n"                                           \
similarity index 79%
rename from lunaix-os/includes/arch/x86/interrupts.h
rename to lunaix-os/includes/arch/i386/interrupts.h
index 0d7c815b541cfcb61b7050aeeea5656937ae6cd3..632e60d89dd36bcc4c31f886b5e145f04578341c 100644 (file)
@@ -10,17 +10,17 @@ struct exec_param;
 
 struct regcontext
 {
-    reg32 eax;
-    reg32 ebx;
-    reg32 ecx;
-    reg32 edx;
-    reg32 edi;
-    reg32 ebp;
-    reg32 esi;
-    reg32 ds;
-    reg32 es;
-    reg32 fs;
-    reg32 gs;
+    u32_t eax;
+    u32_t ebx;
+    u32_t ecx;
+    u32_t edx;
+    u32_t edi;
+    u32_t ebp;
+    u32_t esi;
+    u32_t ds;
+    u32_t es;
+    u32_t fs;
+    u32_t gs;
 } __attribute__((packed));
 
 typedef struct
@@ -29,7 +29,7 @@ typedef struct
     struct regcontext registers;
     union
     {
-        reg32 esp;
+        u32_t esp;
         volatile struct exec_param* execp;
     };
 } __attribute__((packed)) isr_param;
index 0e93f20d4ceb7386f67b746a7a047a1b43640df2..f5ef5235616b941f8a8de913fab993b8563a6222 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef __LUNAIX_ACPI_ACPI_H
 #define __LUNAIX_ACPI_ACPI_H
 
-#include <arch/x86/boot/multiboot.h>
+#include <arch/i386/boot/multiboot.h>
 #include <stddef.h>
 #include <stdint.h>
 
index 3b77c7eb12aeca27205d8406f738ae5c8a17f0c2..c68bb95b64b584870d044779198ae238f3af944d 100644 (file)
 
 #include <lunaix/types.h>
 
-#define SEL_RPL(selector) ((selector)&0x3)
-
-typedef unsigned int reg32;
-typedef unsigned short reg16;
-
-typedef struct
-{
-    reg32 eax;
-    reg32 ebx;
-    reg32 ecx;
-    reg32 edx;
-    reg32 edi;
-    reg32 ebp;
-    reg32 esi;
-    reg32 esp;
-} __attribute__((packed)) gp_regs;
-
-typedef struct
-{
-    reg16 ds;
-    reg16 es;
-    reg16 fs;
-    reg16 gs;
-} __attribute__((packed)) sg_reg;
+/**
+ * @brief Get processor ID string
+ *
+ * @param id_out
+ */
+void
+cpu_get_id(char* id_out);
+
+/**
+ * @brief Load current processor state
+ *
+ * @return u32_t
+ */
+u32_t
+cpu_ldstate();
+
+/**
+ * @brief Load current processor config
+ *
+ * @return u32_t
+ */
+u32_t
+cpu_ldconfig();
+
+/**
+ * @brief Change current processor state
+ *
+ * @return u32_t
+ */
+void
+cpu_chconfig(u32_t val);
+
+/**
+ * @brief Load current virtual memory space
+ *
+ * @return u32_t
+ */
+u32_t
+cpu_ldvmspace();
+
+/**
+ * @brief Change current virtual memory space
+ *
+ * @return u32_t
+ */
+void
+cpu_chvmspace(u32_t val);
+
+/**
+ * @brief Flush TLB
+ *
+ * @return u32_t
+ */
+void
+cpu_flush_page(ptr_t va);
+
+void
+cpu_flush_vmspace();
+
+void
+cpu_enable_interrupt();
+
+void
+cpu_disable_interrupt();
 
 void
-cpu_get_brand(char* brand_out);
-
-int
-cpu_has_apic();
-
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wreturn-type"
-static inline reg32
-cpu_rcr0()
-{
-    ptr_t val;
-    asm volatile("movl %%cr0,%0" : "=r"(val));
-    return val;
-}
-
-static inline reg32
-cpu_rcr2()
-{
-    ptr_t val;
-    asm volatile("movl %%cr2,%0" : "=r"(val));
-    return val;
-}
-
-static inline reg32
-cpu_rcr3()
-{
-    ptr_t val;
-    asm volatile("movl %%cr3,%0" : "=r"(val));
-    return val;
-}
-
-static inline reg32
-cpu_rcr4()
-{
-    ptr_t val;
-    asm volatile("movl %%cr4,%0" : "=r"(val));
-    return val;
-}
-
-static inline reg32
-cpu_reflags()
-{
-    ptr_t val;
-    asm volatile("pushf\n"
-                 "popl %0\n"
-                 : "=r"(val)::);
-    return val;
-}
-#pragma GCC diagnostic pop
-
-static inline void
-cpu_lcr0(reg32 v)
-{
-    asm("mov %0, %%cr0" ::"r"(v));
-}
-
-static inline void
-cpu_lcr2(reg32 v)
-{
-    asm("mov %0, %%cr2" ::"r"(v));
-}
-
-static inline void
-cpu_lcr3(reg32 v)
-{
-    asm("mov %0, %%cr3" ::"r"(v));
-}
-
-static inline void
-cpu_invplg(ptr_t va)
-{
-    asm volatile("invlpg (%0)" ::"r"(va) : "memory");
-}
-
-static inline void
-cpu_enable_interrupt()
-{
-    asm volatile("sti");
-}
-
-static inline void
-cpu_disable_interrupt()
-{
-    asm volatile("cli");
-}
-
-static inline void
-cpu_invtlb()
-{
-    reg32 interm;
-    asm("movl %%cr3, %0\n"
-        "movl %0, %%cr3"
-        : "=r"(interm)
-        : "r"(interm));
-}
-
-static inline void
-cpu_int(int vect)
-{
-    asm("int %0" ::"i"(vect));
-}
+cpu_trap_sched();
 
 void
-cpu_rdmsr(u32_t msr_idx, u32_t* reg_high, u32_t* reg_low);
+cpu_trap_panic(char* message);
 
 void
-cpu_wrmsr(u32_t msr_idx, u32_t reg_high, u32_t reg_low);
+cpu_wait();
 
-static inline void
-cpu_ldvmspace(ptr_t vms)
-{
-    cpu_lcr3(vms);
-}
+ptr_t
+cpu_ldeaddr();
 
-#endif
\ No newline at end of file
+#endif /* __LUNAIX_CPU_H */
diff --git a/lunaix-os/includes/lunaix/compiler.h b/lunaix-os/includes/lunaix/compiler.h
new file mode 100644 (file)
index 0000000..da376c1
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef __LUNAIX_COMPILER_H
+#define __LUNAIX_COMPILER_H
+
+#define likely(x) __builtin_expect((x), 1)
+
+#define weak_alias(name) __attribute__((weak, alias(name)))
+
+#endif /* __LUNAIX_COMPILER_H */
index c7be5ad2f0326b4b595d34937d6d98c066beb273..94b8de3cb6d83dfca2a41cc339ccb17a734f4d99 100644 (file)
@@ -11,7 +11,7 @@
 #ifndef __LUNAIX_ISRM_H
 #define __LUNAIX_ISRM_H
 
-#include <arch/x86/interrupts.h>
+#include <arch/i386/interrupts.h>
 #include <lunaix/types.h>
 
 #define IV_BASE 32
index 1453e71634a72b5ee562f97131899693928ebb12..5371e833925ff529128411ba52f3bfd64dabc7c1 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef __LUNAIX_PROCESS_H
 #define __LUNAIX_PROCESS_H
 
-#include <arch/x86/interrupts.h>
+#include <arch/i386/interrupts.h>
 #include <lunaix/clock.h>
 #include <lunaix/ds/waitq.h>
 #include <lunaix/fs.h>
@@ -74,7 +74,7 @@ struct proc_info
 {
     /*
         Any change to *critical section*, including layout, size
-        must be reflected in arch/x86/interrupt.S.inc to avoid
+        must be reflected in arch/i386/interrupt.S.inc to avoid
         disaster!
      */
 
@@ -195,4 +195,10 @@ proc_setsignal(struct proc_info* proc, int signum);
 void
 proc_clear_signal(struct proc_info* proc);
 
+// enable interrupt upon transfer
+#define TRANSFER_IE 1
+
+void
+proc_init_transfer(struct proc_info* proc, ptr_t stop, ptr_t target, int flags);
+
 #endif /* __LUNAIX_PROCESS_H */
index 2d718f5bda460e5f707d2ebdf4d4b65ab0c9236e..e663a030a2bfa0320a50f939b8947fcfde081683 100644 (file)
@@ -20,8 +20,6 @@
 #define MIN(a, b) ((a) < (b) ? (a) : (b))
 #define MAX(a, b) ((a) > (b) ? (a) : (b))
 
-#define likely(x) __builtin_expect((x), 1)
-
 /**
  * @brief Fast log base 2 for integer, utilizing constant unfolding.
  * Adopted from
index 4a101fa73c280f31c47a369149b927c4b092fb4e..919f93a0c2efdf748d94af1ea055dddae86286db 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef __LUNAIX_SYSCALL_H
 #define __LUNAIX_SYSCALL_H
 
-#include <arch/x86/vectors.h>
+#include <arch/i386/vectors.h>
 #include <usr/lunaix/syscallid.h>
 
 #ifndef __ASM__
index fc0ef1ceeedce13b2a66702ba2ae9ffa1877da58..1d6556b804cb4a10dadc5a5920dfd3a65f412407 100644 (file)
@@ -1,6 +1,7 @@
 #ifndef __LUNAIX_TYPES_H
 #define __LUNAIX_TYPES_H
 
+#include <lunaix/compiler.h>
 #include <stdarg.h>
 #include <stddef.h>
 #include <usr/lunaix/types.h>
index 58e48ab7dbfeac817c5c34a55f68ae5f63801166..d2e329e937a75f4d9888381c481cf290362e22a7 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef __LUNAIX_GDBSTUB_H
 #define __LUNAIX_GDBSTUB_H
 
-#include <arch/x86/interrupts.h>
+#include <arch/i386/interrupts.h>
 
 void
 gdbstub_loop(isr_param* param);
index 1667f314670465c23889a81f5d72ce20d39664cd..16999b08271d539a8392b4b41a37c753385cc2db 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef __LUNAIX_LSDBG_H
 #define __LUNAIX_LSDBG_H
 
-#include <arch/x86/interrupts.h>
+#include <arch/i386/interrupts.h>
 
 #define SDBG_CLNT_HI 0x10
 #define SDBG_CLNT_QUIT 0xff
similarity index 92%
rename from lunaix-os/kernel/asm/x86/gdt.c
rename to lunaix-os/kernel/asm/i386/gdt.c
index f84df20cca47ce7c32585a60070858aee425cca1..92e31d130edb41052f021ee333a7273dc510177c 100644 (file)
@@ -1,5 +1,5 @@
-#include <arch/x86/gdt.h>
-#include <arch/x86/tss.h>
+#include <arch/i386/gdt.h>
+#include <arch/i386/tss.h>
 #include <lunaix/types.h>
 
 #define GDT_ENTRY 6
similarity index 97%
rename from lunaix-os/kernel/asm/x86/interrupt.S
rename to lunaix-os/kernel/asm/i386/interrupt.S
index f308503c7aac3722a39f721afcae32f1462259e4..064e19e933679b7bb58f1244886d045fc9707c63 100644 (file)
@@ -1,9 +1,9 @@
 #define __ASM__
-#include <arch/x86/interrupts.h>
-#include <arch/x86/i386_asm.h>
-#include <arch/x86/tss.h>
+#include <arch/i386/interrupts.h>
+#include <arch/i386/i386_asm.h>
+#include <arch/i386/tss.h>
 #include <lunaix/syscall.h>
-#include <arch/x86/interrupt.S.inc>
+#include <arch/i386/interrupt.S.inc>
 
 #define __ASM_INTR_DIAGNOSIS
 
similarity index 94%
rename from lunaix-os/kernel/asm/x86/interrupts.c
rename to lunaix-os/kernel/asm/i386/interrupts.c
index 9f86cf25c480355f836c2568695a08478ca7af52..17bde71ec85d4b2d0187131c469a4be05a98d57e 100644 (file)
@@ -1,5 +1,5 @@
-#include <arch/x86/interrupts.h>
-#include <arch/x86/tss.h>
+#include <arch/i386/interrupts.h>
+#include <arch/i386/tss.h>
 
 #include <hal/apic.h>
 #include <hal/cpu.h>
similarity index 98%
rename from lunaix-os/kernel/asm/x86/intr_routines.c
rename to lunaix-os/kernel/asm/i386/intr_routines.c
index ea7a3243b5b4786bc159c33777a2ba433d1da5bb..678998da9073092466ce5a5aec369b2209917cb0 100644 (file)
@@ -1,4 +1,4 @@
-#include <arch/x86/interrupts.h>
+#include <arch/i386/interrupts.h>
 
 #include <lunaix/isrm.h>
 #include <lunaix/lxconsole.h>
similarity index 99%
rename from lunaix-os/kernel/asm/x86/intrhnds.c
rename to lunaix-os/kernel/asm/i386/intrhnds.c
index 70b597f7982554bb8192b13d13f9d156e9f087df..b3232717f52fe51866a4f7cf650d7be887d8bea3 100644 (file)
@@ -1,6 +1,6 @@
 
-#include <arch/x86/idt.h>
-#include <arch/x86/intrhnds.h>
+#include <arch/i386/idt.h>
+#include <arch/i386/intrhnds.h>
 #include <lunaix/types.h>
 
 #define IDT_ENTRY 256
similarity index 93%
rename from lunaix-os/kernel/asm/x86/pfault.c
rename to lunaix-os/kernel/asm/i386/pfault.c
index f527e12c3dcc0f81c292c3761c78c125943faa80..edff52599807134fe65482006bc5572ba0ddfea0 100644 (file)
@@ -1,4 +1,4 @@
-#include <arch/x86/interrupts.h>
+#include <arch/i386/interrupts.h>
 #include <lunaix/common.h>
 #include <lunaix/mm/mm.h>
 #include <lunaix/mm/pmm.h>
@@ -42,7 +42,7 @@ void
 intr_routine_page_fault(const isr_param* param)
 {
     uint32_t errcode = param->execp->err_code;
-    ptr_t ptr = cpu_rcr2();
+    ptr_t ptr = cpu_ldeaddr();
     if (!ptr) {
         goto segv_term;
     }
@@ -52,9 +52,7 @@ intr_routine_page_fault(const isr_param* param)
         goto segv_term;
     }
 
-    if (!SEL_RPL(param->execp->cs)) {
-        // TODO if kernel pfault
-    }
+    // XXX do kernel trigger pfault?
 
     vm_regions_t* vmr = (vm_regions_t*)&__current->mm.regions;
     struct mm_region* hit_region = region_get(vmr, ptr);
@@ -76,7 +74,7 @@ intr_routine_page_fault(const isr_param* param)
         }
         if ((hit_region->attr & COW_MASK) == COW_MASK) {
             // normal page fault, do COW
-            cpu_invplg((ptr_t)pte);
+            cpu_flush_page((ptr_t)pte);
 
             ptr_t pa = (ptr_t)vmm_dup_page(__current->pid, PG_ENTRY_ADDR(*pte));
 
@@ -93,7 +91,7 @@ intr_routine_page_fault(const isr_param* param)
     //   -> a new page need to be alloc
     if ((hit_region->attr & REGION_ANON)) {
         if (!PG_IS_PRESENT(*pte)) {
-            cpu_invplg((ptr_t)pte);
+            cpu_flush_page((ptr_t)pte);
 
             ptr_t pa = pmm_alloc_page(__current->pid, 0);
             if (!pa) {
@@ -122,7 +120,7 @@ intr_routine_page_fault(const isr_param* param)
             goto oom;
         }
 
-        cpu_invplg((ptr_t)pte);
+        cpu_flush_page((ptr_t)pte);
         *pte = (*pte & 0xFFF) | pa | get_ptattr(hit_region);
 
         memset((void*)ptr, 0, PG_SIZE);
@@ -167,6 +165,6 @@ segv_term:
         ;
 
 resolved:
-    cpu_invplg(ptr);
+    cpu_flush_page(ptr);
     return;
 }
\ No newline at end of file
diff --git a/lunaix-os/kernel/asm/i386/proc.c b/lunaix-os/kernel/asm/i386/proc.c
new file mode 100644 (file)
index 0000000..67f3f73
--- /dev/null
@@ -0,0 +1,28 @@
+#include <lunaix/process.h>
+
+void
+proc_init_transfer(struct proc_info* proc,
+                   ptr_t stack_top,
+                   ptr_t target,
+                   int flags)
+{
+    struct exec_param* execp =
+      (struct exec_param*)(stack_top - sizeof(struct exec_param));
+    isr_param* isrp = (isr_param*)((ptr_t)execp - sizeof(isr_param));
+
+    *execp = (struct exec_param){
+        .cs = KCODE_SEG, .ss = KDATA_SEG, .eip = target, .eflags = cpu_ldstate()
+    };
+
+    *isrp = (isr_param){ .registers = { .ds = KDATA_SEG,
+                                        .es = KDATA_SEG,
+                                        .fs = KDATA_SEG,
+                                        .gs = KDATA_SEG },
+                         .execp = execp };
+
+    if ((flags & TRANSFER_IE)) {
+        execp->eflags |= 0x200;
+    }
+
+    proc->intr_ctx = isrp;
+}
\ No newline at end of file
similarity index 97%
rename from lunaix-os/kernel/asm/x86/prologue.S
rename to lunaix-os/kernel/asm/i386/prologue.S
index 4c183fb16150c57073e1b6fe83ea44f3978c2ff9..572401b0dc6393d76c66afeff0cb88646de2b9ea 100644 (file)
@@ -1,7 +1,7 @@
 /* 高半核入口点 - 0xC0000000 */
 
 #define __ASM__
-#include <arch/x86/i386_asm.h>
+#include <arch/i386/i386_asm.h>
 
 .section .text
     .global hhk_entry_
similarity index 65%
rename from lunaix-os/kernel/asm/x86/tss.c
rename to lunaix-os/kernel/asm/i386/tss.c
index 603eca658db411c0a06f30d51ac7aee97dfd6c1e..cee33ada4e2793e0c7031bdab3e66ce21b6acf59 100644 (file)
@@ -1,4 +1,4 @@
-#include <arch/x86/tss.h>
+#include <arch/i386/tss.h>
 #include <lunaix/common.h>
 #include <lunaix/process.h>
 
index 7526601a84a4311a9b2a551b1734bc7ad2d3adb1..ce85c39beced31ff0ffbc8d801d04bea4084c540 100644 (file)
@@ -7,21 +7,22 @@ LOG_MODULE("rand")
 int
 __rand_rd_pg(struct device* dev, void* buf, size_t offset)
 {
-    rnd_fill(buf, PG_SIZE);
+    // rnd_fill(buf, PG_SIZE);
     return PG_SIZE;
 }
 
 int
 __rand_rd(struct device* dev, void* buf, size_t offset, size_t len)
 {
-    rnd_fill(buf, len);
+    // rnd_fill(buf, len);
     return len;
 }
 
 void
 devbuiltin_init_rand()
 {
-    if (!rnd_is_supported()) {
+    // TODO rnd device need better abstraction
+    if (1) {
         kprintf(KWARN "not supported.\n");
         return;
     }
index 21814d16c042ffb50e96fbe8d7ebb89cee846a80..8a14c4ad0f8059694430f3cc65b98956f586e6ba 100644 (file)
@@ -220,9 +220,8 @@ __DEFINE_LXSYSCALL3(int,
 
     // we will jump to new entry point (_u_start) upon syscall's
     // return so execve 'will not return' from the perspective of it's invoker
-    volatile struct exec_param* execp = __current->intr_ctx->execp;
-    execp->esp = container.stack_top;
-    execp->eip = container.exe.entry;
+    eret_target(__current) = container.exe.entry;
+    eret_stack(__current) = container.stack_top;
 
     // these become meaningless once execved!
     __current->ustack_top = 0;
similarity index 85%
rename from lunaix-os/kernel/k_init.c
rename to lunaix-os/kernel/kinit.c
index 2dc39e63eb3314a7fa880af5b6b856c5418e246f..726295c5c827942ea8fc09256c6dc4e31f8c6148 100644 (file)
@@ -17,9 +17,9 @@
 #include <lunaix/tty/tty.h>
 #include <lunaix/types.h>
 
-#include <arch/x86/boot/multiboot.h>
-#include <arch/x86/idt.h>
-#include <arch/x86/interrupts.h>
+#include <arch/abi.h>
+#include <arch/i386/boot/multiboot.h>
+#include <arch/i386/interrupts.h>
 
 #include <klibc/stdio.h>
 #include <klibc/string.h>
@@ -137,7 +137,7 @@ spawn_proc0()
     proc0->page_table = vmm_dup_vmspace(proc0->pid);
 
     // 直接切换到新的拷贝,进行配置。
-    cpu_ldvmspace(proc0->page_table);
+    cpu_chvmspace(proc0->page_table);
 
     // 为内核创建一个专属栈空间。
     for (size_t i = 0; i < (KSTACK_SIZE >> PG_SIZE_BITS); i++) {
@@ -149,21 +149,7 @@ spawn_proc0()
                         VMAP_NULL);
     }
 
-    struct exec_param* execp =
-      (struct exec_param*)(KSTACK_TOP - sizeof(struct exec_param));
-    isr_param* isrp = (isr_param*)((ptr_t)execp - sizeof(isr_param));
-
-    *execp = (struct exec_param){ .cs = KCODE_SEG,
-                                  .eip = (ptr_t)__proc0,
-                                  .ss = KDATA_SEG,
-                                  .eflags = cpu_reflags() };
-    *isrp = (isr_param){ .registers = { .ds = KDATA_SEG,
-                                        .es = KDATA_SEG,
-                                        .fs = KDATA_SEG,
-                                        .gs = KDATA_SEG },
-                         .execp = execp };
-
-    proc0->intr_ctx = isrp;
+    proc_init_transfer(proc0, KSTACK_TOP, (ptr_t)__proc0, 0);
 
     // 向调度器注册进程。
     commit_process(proc0);
index f23ff60ab895702ee90271bcc5bc57e177db4bde..77e1264d2926661d78ea1ff335e030a250f5ccc5 100644 (file)
@@ -177,7 +177,7 @@ mem_sync_pages(ptr_t mnt,
 
             *mapping.pte &= ~PG_DIRTY;
 
-            cpu_invplg((ptr_t)mapping.pte);
+            cpu_flush_page((ptr_t)mapping.pte);
         } else if ((options & MS_INVALIDATE)) {
             goto invalidate;
         }
@@ -191,7 +191,7 @@ mem_sync_pages(ptr_t mnt,
     invalidate:
         *mapping.pte &= ~PG_PRESENT;
         pmm_free_page(KERNEL_PID, mapping.pa);
-        cpu_invplg((ptr_t)mapping.pte);
+        cpu_flush_page((ptr_t)mapping.pte);
     }
 }
 
index 3340f114c895ea05bc153aed0f52a9ac88589d2a..5a868d41734ce9b3aba898cd49c5c9b87764a8a0 100644 (file)
@@ -55,7 +55,7 @@ vmm_set_mapping(ptr_t mnt, ptr_t va, ptr_t pa, pt_attr attr, int options)
           NEW_L1_ENTRY(attr | PG_WRITE | PG_PRESENT, new_l1pt_pa);
 
         // make sure our new l2 table is visible to CPU
-        cpu_invplg((ptr_t)l2pt);
+        cpu_flush_page((ptr_t)l2pt);
 
         memset((void*)l2pt, 0, PG_SIZE);
     } else {
@@ -66,7 +66,7 @@ vmm_set_mapping(ptr_t mnt, ptr_t va, ptr_t pa, pt_attr attr, int options)
     }
 
     if (mnt == VMS_SELF) {
-        cpu_invplg(va);
+        cpu_flush_page(va);
     }
 
     if ((options & VMAP_NOMAP)) {
@@ -98,7 +98,7 @@ vmm_del_mapping(ptr_t mnt, ptr_t va)
         x86_page_table* l2pt = (x86_page_table*)(mnt | (l1_index << 12));
         x86_pte_t l2pte = l2pt->entry[l2_index];
 
-        cpu_invplg(va);
+        cpu_flush_page(va);
         l2pt->entry[l2_index] = PTE_NULL;
 
         return PG_ENTRY_ADDR(l2pte);
@@ -184,7 +184,7 @@ vmm_mount_pd(ptr_t mnt, ptr_t pde)
 {
     x86_page_table* l1pt = (x86_page_table*)L1_BASE_VADDR;
     l1pt->entry[(mnt >> 22)] = NEW_L1_ENTRY(T_SELF_REF_PERM, pde);
-    cpu_invplg(mnt);
+    cpu_flush_page(mnt);
     return mnt;
 }
 
@@ -193,6 +193,6 @@ vmm_unmount_pd(ptr_t mnt)
 {
     x86_page_table* l1pt = (x86_page_table*)L1_BASE_VADDR;
     l1pt->entry[(mnt >> 22)] = 0;
-    cpu_invplg(mnt);
+    cpu_flush_page(mnt);
     return mnt;
 }
\ No newline at end of file
index c31d73666b84fa4e7d849b97d80ef98720a562f3..02e3b679c06f5c024b0d584f02b0d43f563b2fae 100644 (file)
@@ -8,7 +8,7 @@
 #include <lunaix/syslog.h>
 #include <lunaix/timer.h>
 
-#include <arch/x86/interrupts.h>
+#include <arch/i386/interrupts.h>
 #include <hal/cpu.h>
 #include <klibc/string.h>
 
index bb9b3d9293e0d784774c4321170951923154029d..15afae4c8b5daa724aa592872ec35b19d1483c55 100644 (file)
@@ -26,7 +26,7 @@
 #include <hal/pci.h>
 #include <hal/rtc.h>
 
-#include <arch/x86/boot/multiboot.h>
+#include <arch/i386/boot/multiboot.h>
 
 #include <klibc/string.h>
 
index 63fc7ad081f597ebbea5f2b71263d86be17c801c..0ba6c6352db3c6a76835bb6b0597da684bebf9c1 100644 (file)
@@ -177,12 +177,12 @@ __mark_region(ptr_t start_vpn, ptr_t end_vpn, int attr)
         x86_pte_t* curproc = &PTE_MOUNTED(VMS_SELF, i);
         x86_pte_t* newproc = &PTE_MOUNTED(VMS_MOUNT_1, i);
 
-        cpu_invplg((ptr_t)newproc);
+        cpu_flush_page((ptr_t)newproc);
 
         if ((attr & REGION_MODE_MASK) == REGION_RSHARED) {
             // 如果读共享,则将两者的都标注为只读,那么任何写入都将会应用COW策略。
-            cpu_invplg((ptr_t)curproc);
-            cpu_invplg((ptr_t)(i << 12));
+            cpu_flush_page((ptr_t)curproc);
+            cpu_flush_page((ptr_t)(i << 12));
 
             *curproc = *curproc & ~PG_WRITE;
             *newproc = *newproc & ~PG_WRITE;
@@ -272,7 +272,7 @@ copy_kernel_stack(struct proc_info* proc, ptr_t usedMnt)
             In the name of Celestia our glorious goddess, I will fucking HATE
            the TLB for the rest of my LIFE!
         */
-        cpu_invplg((ptr_t)ppte);
+        cpu_flush_page((ptr_t)ppte);
 
         x86_pte_t p = *ppte;
         ptr_t ppa = vmm_dup_page(pid, PG_ENTRY_ADDR(p));
index acf04b72111d6136cf77fbcc2a0e2fa329346bc9..2fa5ca686bd85d17a8d9f7bec584d59f98cb2212 100644 (file)
@@ -1,5 +1,5 @@
 #include <arch/abi.h>
-#include <arch/x86/interrupts.h>
+#include <arch/i386/interrupts.h>
 
 #include <hal/apic.h>
 #include <hal/cpu.h>
@@ -60,29 +60,13 @@ sched_init_dummy()
     extern void my_dummy();
     static char dummy_stack[DUMMY_STACK_SIZE] __attribute__((aligned(16)));
 
-    struct exec_param* execp =
-      (void*)dummy_stack + DUMMY_STACK_SIZE - sizeof(struct exec_param);
+    ptr_t stktop = (ptr_t)dummy_stack + DUMMY_STACK_SIZE;
 
-    isr_param* isrp = (void*)execp - sizeof(isr_param);
-
-    *execp = (struct exec_param){
-        .cs = KCODE_SEG,
-        .eflags = cpu_reflags() | 0x0200,
-        .eip = (ptr_t)my_dummy,
-        .ss = KDATA_SEG,
-    };
-
-    *isrp = (isr_param){ .registers = { .ds = KDATA_SEG,
-                                        .es = KDATA_SEG,
-                                        .fs = KDATA_SEG,
-                                        .gs = KDATA_SEG },
-                         .execp = execp };
-
-    // memset to 0
     dummy_proc = (struct proc_info){};
-    dummy_proc.intr_ctx = isrp;
 
-    dummy_proc.page_table = cpu_rcr3();
+    proc_init_transfer(&dummy_proc, stktop, (ptr_t)my_dummy, TRANSFER_IE);
+
+    dummy_proc.page_table = cpu_ldvmspace();
     dummy_proc.state = PS_READY;
     dummy_proc.parent = &dummy_proc;
     dummy_proc.pid = KERNEL_PID;
@@ -209,7 +193,7 @@ void
 sched_yieldk()
 {
     cpu_enable_interrupt();
-    cpu_int(LUNAIX_SCHED);
+    cpu_trap_sched();
 }
 
 __DEFINE_LXSYSCALL1(unsigned int, sleep, unsigned int, seconds)
index 4686b12ce3667f3b51f26ae609b78a0acf246a1c..09f82b31911661c0ad1fd2f19faff30aea4191a5 100644 (file)
@@ -1,4 +1,4 @@
-#include <arch/x86/interrupts.h>
+#include <arch/i386/interrupts.h>
 #include <klibc/stdio.h>
 #include <lunaix/spike.h>
 
@@ -13,7 +13,7 @@ __assert_fail(const char* expr, const char* file, unsigned int line)
     //  This is a convention we made that the LUNAIX_SYS_PANIC syscall will
     //  print the panic message passed via %edi. (see
     //  kernel/asm/x86/interrupts.c)
-    asm("int %0" ::"i"(LUNAIX_SYS_PANIC), "D"(buffer));
+    cpu_trap_panic(buffer);
 
     DO_SPIN // never reach
 }
@@ -21,7 +21,7 @@ __assert_fail(const char* expr, const char* file, unsigned int line)
 void
 panick(const char* msg)
 {
-    asm("int %0" ::"i"(LUNAIX_SYS_PANIC), "D"(msg));
+    cpu_trap_panic(msg);
     DO_SPIN
 }
 
index 6f0a2ba25997060774fdb54390631fded5bc0180..d62464d313b685c6d219dbbefca274e8c4366383 100644 (file)
@@ -1,4 +1,4 @@
-#include <arch/x86/interrupts.h>
+#include <arch/i386/interrupts.h>
 #include <lunaix/isrm.h>
 #include <lunaix/process.h>
 #include <lunaix/sched.h>
index 46b2e79920e548dc0972bce0c8d390a52b7c1046..2aca8d588014eba5517808863523226651958c58 100644 (file)
@@ -9,7 +9,7 @@
  * @copyright Copyright (c) 2022
  *
  */
-#include <arch/x86/interrupts.h>
+#include <arch/i386/interrupts.h>
 #include <hal/apic.h>
 #include <hal/rtc.h>
 
index d2d39f0d276bf1a03081ee2fe80be710f658fe96..937777b37c523a38f7d7d239db8d4cc67d2e5e28 100644 (file)
@@ -11,23 +11,21 @@ SECTIONS {
     . = 0x100000;
 
     /* 这里是我们的高半核初始化代码段和数据段 */
-
     .hhk_init_text BLOCK(4K) : {
-        * (.multiboot)
-        arch/*.o (.hhk_init)
-        arch/*.o (.text)
+        *(.multiboot)
+        *(.hhk_init_text)
     }
 
     .hhk_init_bss BLOCK(4K) : {
-        arch/*.o (.bss)
+        *(.hhk_init_bss)
     }
 
     .hhk_init_data BLOCK(4K) : {
-        arch/*.o (.data)
+        *(.hhk_init_data)
     }
 
     .hhk_init_rodata BLOCK(4K) : {
-        arch/*.o (.rodata)
+        *(.hhk_init_rodata)
     }
     __init_hhk_end = ALIGN(4K);
 
@@ -39,37 +37,25 @@ SECTIONS {
         __kernel_start = .;
         PROVIDE(__ktext_start = .);
         
-        kernel/*.o (.text)
-        hal/*.o (.text)
-        debug/*.o (.text)
-        libs/*.o (.text)
+        *(.text)
 
         PROVIDE(__ktext_end = .);
     }
 
     .data BLOCK(4K) : AT ( ADDR(.data) - 0xC0000000 ) {
-        kernel/*.o (.data)
-        hal/*.o (.data)
-        debug/*.o (.data)
-        libs/*.o (.data)
+        *(.data)
     }
 
     .rodata BLOCK(4K) : AT ( ADDR(.rodata) - 0xC0000000 ) {
-        kernel/*.o (.rodata)
-        hal/*.o (.rodata)
-        debug/*.o (.rodata)
-        libs/*.o (.rodata)
+        *(.rodata)
     }
 
     .kpg BLOCK(4K) : AT ( ADDR(.kpg) - 0xC0000000 ) {
-        arch/*.o (.kpg)
+        *(.kpg)
     }
 
     .bss BLOCK(4K) : AT ( ADDR(.bss) - 0xC0000000 ) {
-        kernel/*.o (.bss)
-        hal/*.o (.bss)
-        debug/*.o (.bss)
-        libs/*.o (.bss)
+        *(.bss)
     }
 
     __kernel_end = ALIGN(4K);
index 9496c5c15c1bd17d8f3fe36a210dad3ebadb19fc..fffd1828a15789c9439f2aabd38496cda893b4df 100644 (file)
@@ -19,7 +19,6 @@ OFLAGS := -fno-gcse\
                  -fno-cse-skip-blocks\
                  -fno-optimize-strlen\
                  -fno-inline-functions-called-once \
-                 -fno-inline-functions \
                  -fno-inline-small-functions \
                  -fno-indirect-inlining
 
index b00d266fcac21af992cd477f359ff3a160cc666f..38fab801048ba6536eede1f565563e383afd4d68 100644 (file)
@@ -1,6 +1,6 @@
 from pathlib import Path
 
-intr_handler_h = "arch/x86/intrhnds.h"
+intr_handler_h = "arch/i386/intrhnds.h"
 intr_handler_c = "kernel/asm/x86/intrhnds.c"
 intr_handler_s = "kernel/asm/x86/intrhnds.S"
 
@@ -81,7 +81,7 @@ def export_c(src: Path):
     code = '\n'.join(expr_list)
     with cfile.open(mode='w+') as f:
         f.write(f'''
-#include <arch/x86/idt.h>
+#include <arch/i386/idt.h>
 #include <stdint.h>
 #include <{intr_handler_h}>