- .text : ALIGN(0x1000) { *(.text) }
- .data : ALIGN(0x1000) { *(.data) }
- .bss : ALIGN(0x1000) { *(.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__ = .;
+ }