dynamic memory manager (malloc & free)
[lunaix-os.git] / lunaix-os / linker.ld
index 79dd63a0ee4bccaaebd3398bb92abbeb88769fb2..a81dad551c1dce19da6e2cea25ce1984b6c00ea0 100644 (file)
@@ -1,23 +1,65 @@
 ENTRY(start_)
 
+/*
+    FUTURE: Use disk reader
+    A bit of messy here.
+    We will pull our higher half kernel out of this shit
+      and load it separately once we have our disk reader.
+*/
+
 SECTIONS {
     . = 0x100000;
 
-    .text BLOCK(4K) : {
+    /* 这里是我们的高半核初始化代码段和数据段 */
+
+    .hhk_init_text BLOCK(4K) : {
         * (.multiboot)
-        * (.text)
+        build/obj/arch/x86/*.o (.hhk_init)
+        build/obj/arch/x86/*.o (.text)
+    }
+
+    .hhk_init_bss BLOCK(4K) : {
+        build/obj/arch/x86/*.o (.bss)
+    }
+
+    .hhk_init_data BLOCK(4K) : {
+        build/obj/arch/x86/*.o (.data)
+    }
+
+    .hhk_init_rodata BLOCK(4K) : {
+        build/obj/arch/x86/*.o (.rodata)
+    }
+    __init_hhk_end = ALIGN(4K);
+
+    /* Relocation of our higher half kernel */
+    . += 0xC0000000;
+
+    /* 好了,我们的内核…… */
+    .text BLOCK(4K) : AT ( ADDR(.text) - 0xC0000000 ) {
+        __kernel_start = .;
+        build/obj/kernel/*.o (.text)
+        build/obj/hal/*.o (.text)
     }
 
-    .bss BLOCK(4K) : {
-        * (COMMON)
-        * (.bss)
+    .bss BLOCK(4K) : AT ( ADDR(.bss) - 0xC0000000 ) {
+        build/obj/kernel/*.o (.bss)
+        build/obj/hal/*.o (.bss)
     }
 
-    .data BLOCK(4k) : {
-        * (.data)
+    .data BLOCK(4k) : AT ( ADDR(.data) - 0xC0000000 ) {
+        build/obj/kernel/*.o (.data)
+        build/obj/hal/*.o (.data)
     }
 
-    .rodata BLOCK(4K) : {
-        * (.rodata)
+    .rodata BLOCK(4K) : AT ( ADDR(.rodata) - 0xC0000000 ) {
+        build/obj/kernel/*.o (.rodata)
+        build/obj/hal/*.o (.rodata)
     }
+
+    .kpg BLOCK(4K) : AT ( ADDR(.kpg) - 0xC0000000 ) {
+        build/obj/arch/x86/*.o (.kpg)
+    }
+
+    __kernel_end = ALIGN(4K);
+    __kernel_heap_start = ALIGN(4K);    /* 内核结束的地方即堆开始的地方 */
 }
\ No newline at end of file