diff options
Diffstat (limited to 'stage3')
-rw-r--r-- | stage3/main.c | 12 |
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; + } } } |