summaryrefslogtreecommitdiff
path: root/kernel/elf.c
diff options
context:
space:
mode:
authorAnton Kling <anton@kling.gg>2024-04-13 21:07:02 +0200
committerAnton Kling <anton@kling.gg>2024-04-13 21:07:02 +0200
commit92f848244796881994c1f147633123c45da219b6 (patch)
tree4ad209b6ede26b8475b7f0c6afb2382336dbbac7 /kernel/elf.c
parent008b84bf5308d2f180905130653a656bfedccf8c (diff)
Kernel: Don't hard fail if the kernel can't allocate memory.
Currently this is just a improvement of error handling but it should also try to free up memory where it is possible.
Diffstat (limited to 'kernel/elf.c')
-rw-r--r--kernel/elf.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/kernel/elf.c b/kernel/elf.c
index 3d03335..01f1e53 100644
--- a/kernel/elf.c
+++ b/kernel/elf.c
@@ -6,7 +6,6 @@
#include <typedefs.h>
void *load_elf_file(const char *f, u32 *ds) {
- // ELFHeader *header = kmalloc(sizeof(ELFHeader));
ELFHeader header;
int fd = vfs_open(f, O_RDONLY, 0);
if (fd < 0) {
@@ -46,10 +45,10 @@ void *load_elf_file(const char *f, u32 *ds) {
pages_to_allocate -= p_vaddr - (p_vaddr % 0x1000);
pages_to_allocate /= 0x1000;
- mmu_allocate_region((void *)p_vaddr, pages_to_allocate * 0x1000,
- MMU_FLAG_RW, NULL);
-
- flush_tlb();
+ if(!mmu_allocate_region((void *)p_vaddr, pages_to_allocate * 0x1000,
+ MMU_FLAG_RW, NULL)) {
+ return NULL;
+ }
uintptr_t e = program_header.p_vaddr + program_header.p_memsz;
if (e > end_of_code) {