]> git.dujemihanovic.xyz Git - nameless-os.git/blobdiff - kernel/linker.ld
Merge branch 'drive'
[nameless-os.git] / kernel / linker.ld
index d68e9f2c96af541f9042df444d10f7803ff1e7fb..645a82421029a638d8ea58a86e8282852af09936 100644 (file)
@@ -3,9 +3,30 @@ OUTPUT_FORMAT(binary)
 
 SECTIONS
 {
-       . = 0x1000;
+       . = 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__ = .;
+       }
 }