summaryrefslogtreecommitdiff
path: root/stage3/main.c
diff options
context:
space:
mode:
authorLizzy Fleckenstein <lizzy@vlhl.dev>2024-01-09 21:40:46 +0100
committerLizzy Fleckenstein <lizzy@vlhl.dev>2024-01-09 21:40:46 +0100
commitd8d31c16138a4d6dc1ff3d33b3172c151c221767 (patch)
treea8da8a4088e8a3b0ff2766024f76aaf581e10e0d /stage3/main.c
parentc6e1454fbb872aed5d445d458958943556271529 (diff)
downloadcuddles-d8d31c16138a4d6dc1ff3d33b3172c151c221767.tar.xz
properly remove the 1M-2M area from mmap
Diffstat (limited to 'stage3/main.c')
-rw-r--r--stage3/main.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/stage3/main.c b/stage3/main.c
index 9d2c43f..5f6756f 100644
--- a/stage3/main.c
+++ b/stage3/main.c
@@ -64,9 +64,15 @@ void kmain()
#define MMAP for (MemRegion *mreg = (void *) 0x500; mreg->start != nil; mreg++)
MMAP {
- if (mreg->start == (void *) 0x100000) {
- mreg->start = (void *) 0x200000;
- mreg->size -= 0x100000;
+ // remove anything between 0x100000 and 0x200000. it has already been mapped
+ usize start = (usize) mreg->start;
+ if (start >= 0x100000 && start < 0x200000) {
+ if (start + mreg->size <= 0x200000) {
+ mreg->size = 0; // kill it
+ } else {
+ mreg->size = start + mreg->size - 0x200000;
+ mreg->start = (void *) 0x200000;
+ }
}
}