From: Amelia Coutard <eliottulio.coutard@gmail.com>
Date: Sun, 8 May 2022 19:45:23 +0000 (+0200)
Subject: Moved the past_the_end page of the page allocator to the c++ code, and made it and... 
X-Git-Url: https://git.ameliathe1st.gay/?a=commitdiff_plain;h=887a12176f5502e2924bc673fa591c293624acef;p=voyage-au-centre-des-fichiers.git

Moved the past_the_end page of the page allocator to the c++ code, and made it and the page allocator globals
---

diff --git a/src/boot.S b/src/boot.S
index 1bdfdba..f113d37 100644
--- a/src/boot.S
+++ b/src/boot.S
@@ -94,8 +94,6 @@ PDPT_high: .skip 0x1000 - 16
 
 .section .bss
 .align 0x1000
-.globl page_list_one_past_end
-page_list_one_past_end: .skip 0x1000
 PML4T: .skip 0x1000
 phys_mem_map: .skip 0x1000 * 128 - 8
 .align 16
diff --git a/src/kernel.cpp b/src/kernel.cpp
index b1293dd..5799f46 100644
--- a/src/kernel.cpp
+++ b/src/kernel.cpp
@@ -28,6 +28,10 @@ void remove_some_mem(os::phys_ptr<os::paging::page> mem_start,
 	}
 }
 
+os::paging::page one_past_end_page_for_page_allocator;
+os::paging::page_allocator page_allocator(os::phys_ptr<os::paging::page>(reinterpret_cast<uintptr_t>(&one_past_end_page_for_page_allocator) - 0xFFFFFFFF80000000));
+
+
 extern "C" void kmain(unsigned long magic, os::phys_ptr<const multiboot2::info_start> info) {
 	os::assert(magic == 0x36D76289, "Incorrect magic number: wasn't booted with multiboot2.");
 
@@ -35,11 +39,6 @@ extern "C" void kmain(unsigned long magic, os::phys_ptr<const multiboot2::info_s
 		os::halt();
 	}
 
-	os::paging::page_allocator page_allocator{([]() {
-		os::phys_ptr<os::paging::page> ram_ptr = nullptr;
-		asm("mov $page_list_one_past_end - 0xFFFFFFFF80000000,%0" : "=ri"(ram_ptr));
-		return ram_ptr;
-	})()};
 	const os::phys_ptr<os::paging::page> kernel_start = ([]() {
 		os::phys_ptr<os::paging::page> ptr = nullptr;
 		asm("mov $_kernel_phys_start,%0" : "=ri"(ptr));
@@ -87,10 +86,10 @@ extern "C" void kmain(unsigned long magic, os::phys_ptr<const multiboot2::info_s
 					if (s < e) {
 						remove_some_mem(
 						s, e, kernel_start, kernel_end,
-						[&page_allocator, info_start, info_end] (auto s, auto e) {
+						[info_start, info_end] (auto s, auto e) {
 							remove_some_mem(
 							s, e, info_start, info_end,
-							[&page_allocator] (auto s, auto e) {
+							[] (auto s, auto e) {
 								page_allocator.deallocate({.ptr = s, .size = (e.get_phys_addr() - s.get_phys_addr()) / 0x1000});
 							}
 							);
diff --git a/src/paging.hpp b/src/paging.hpp
index 76024d7..9013fb5 100644
--- a/src/paging.hpp
+++ b/src/paging.hpp
@@ -133,7 +133,7 @@ struct __attribute__((aligned(0x1000))) paging_table {
 
 template<>
 struct paging_table<-1> {
-	std::uint8_t contents[0x1000];
+	std::uint8_t contents[0x1000] = {0};
 };
 
 using PML4T = paging_table<3>;