multiboot1: allocate kernel and modules using proper type

This prevents the code from allocating over the kernel and modules when
allocating memory.
The type is changed to usable when preparing the memory map.
This commit is contained in:
Kacper Słomiński 2021-06-30 19:46:18 +02:00
parent 2f08116acb
commit f84b33650e

View File

@ -59,12 +59,12 @@ void multiboot1_load(char *config, char *cmdline) {
switch (bits) {
case 32:
if (elf32_load(kernel, &entry_point, MEMMAP_USABLE))
if (elf32_load(kernel, &entry_point, MEMMAP_KERNEL_AND_MODULES))
panic("multiboot1: ELF32 load failure");
break;
case 64: {
uint64_t e;
if (elf64_load(kernel, &e, NULL, MEMMAP_USABLE, false, true))
if (elf64_load(kernel, &e, NULL, MEMMAP_KERNEL_AND_MODULES, false, true))
panic("multiboot1: ELF64 load failure");
entry_point = e;
@ -102,7 +102,7 @@ void multiboot1_load(char *config, char *cmdline) {
char *cmdline = config_get_value(config, i, "MODULE_STRING");
m->begin = (uint32_t)(size_t)freadall(&f, MEMMAP_USABLE);
m->begin = (uint32_t)(size_t)freadall(&f, MEMMAP_KERNEL_AND_MODULES);
m->end = m->begin + f.size;
m->cmdline = (uint32_t)(size_t)cmdline;
m->pad = 0;
@ -193,7 +193,8 @@ void multiboot1_load(char *config, char *cmdline) {
for (size_t i = 0; i < memmap_entries; i++ ){
mmap[i].size = sizeof(*mmap) - 4;
if (memmap[i].type == MEMMAP_BOOTLOADER_RECLAIMABLE)
if (memmap[i].type == MEMMAP_BOOTLOADER_RECLAIMABLE
|| memmap[i].type == MEMMAP_KERNEL_AND_MODULES)
memmap[i].type = MEMMAP_USABLE;
if (memmap[i].type == MEMMAP_USABLE) {