]> git.dujemihanovic.xyz Git - nameless-os.git/blobdiff - kernel/linker.ld
Refactor Makefile, linker script, properly set up stack
[nameless-os.git] / kernel / linker.ld
index 90292e6c2ce2d99b9d3bfb4af9cbb0de4c8ebd5c..645a82421029a638d8ea58a86e8282852af09936 100644 (file)
@@ -4,8 +4,29 @@ OUTPUT_FORMAT(binary)
 SECTIONS
 {
        . = 0x100000;
+       __KERNEL_BASE__ = .;
 
-       .text : { *(.text) }
-       .data : { *(.data) }
-       .bss : { *(.bss) }
+       .text : ALIGN(4K) { 
+               kernel/entry.o (.text)
+               *(.text) 
+       }
+       .rodata : ALIGN(4K) { *(.rodata) }
+
+       /* .rodata is put after .text so that the read-only entry in the program
+        * header covers .rodata as well. When .rodata is after .data, that entry
+        * only covers .text, leaving .rodata in the writable program header
+        * entry. The problem with this approach is that the program header
+        * entry where .text and .rodata are is marked as executable, which
+        * would mean that .rodata should be executable too, but that doesn't
+        * matter yet because we (currently) assume that the NX bit is not
+        * supported anyway. */
+
+       .data : ALIGN(4K) { *(.data) }
+       .bss : ALIGN(4K) { 
+               *(.bss)
+               /* Reserving 16KiB for the stack. A __STACK_TOP__ is not really
+                * needed (yet). */
+               . += 16K; 
+               __STACK_BOTTOM__ = .;
+       }
 }