From 3159a40bdb65f215f7ecce831998e8139e57cf02 Mon Sep 17 00:00:00 2001
From: dzwdz
Date: Sat, 17 Jul 2021 16:29:50 +0200
Subject: multiboot: manually address regions of the kernel

thanks to this, i can specify the region where the bss is - so GRUB
won't place any boot modules there
---
 linker.ld                 |  1 +
 src/arch/i386/multiboot.s | 20 ++++++++++++++------
 2 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/linker.ld b/linker.ld
index 92db365..d2aa8bd 100644
--- a/linker.ld
+++ b/linker.ld
@@ -16,6 +16,7 @@ SECTIONS
 	{
 		*(.data)
 	}
+	_data_end = .;
 	.bss BLOCK(4K) : ALIGN(4K)
 	{
 		*(COMMON)
diff --git a/src/arch/i386/multiboot.s b/src/arch/i386/multiboot.s
index 2194982..d67110f 100644
--- a/src/arch/i386/multiboot.s
+++ b/src/arch/i386/multiboot.s
@@ -1,11 +1,19 @@
 .set MAGIC, 0x1BADB002
-.set FLAG_ALIGN,   1<<0 /* align modules on page boundaries */
-.set FLAG_MEMINFO, 1<<1 /* memory map */
-.set FLAGS,        FLAG_ALIGN | FLAG_MEMINFO
+/* TODO set bss_end_addr, so the init module doesn't get overriden by the stack */
+
+/* 1<<0  - align modules on page boundaries.
+   1<<16 - enable manual addressing */
+.set FLAGS,        1<<0 | 1<<16
 .set CHECKSUM, -(MAGIC + FLAGS)
 
 .section .multiboot
 .align 4
-.long MAGIC
-.long FLAGS
-.long CHECKSUM
+multiboot_header:
+	.long MAGIC
+	.long FLAGS
+	.long CHECKSUM
+	.long multiboot_header // header_addr
+	.long multiboot_header // load_addr
+	.long _data_end        // load_end_addr
+	.long _kernel_end      // bss_end_addr
+	.long _start           // entry_addr
-- 
cgit v1.2.3