From 48445f12acf0c45c039df0f75b0cfb9ef87a3f42 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Sat, 22 Apr 2023 18:17:44 +0300 Subject: [PATCH] Kernel: More proper paging in Elf loading --- kernel/kernel/Process.cpp | 5 ++++- kernel/kernel/Thread.cpp | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/kernel/kernel/Process.cpp b/kernel/kernel/Process.cpp index 56394ae5..fc9a777a 100644 --- a/kernel/kernel/Process.cpp +++ b/kernel/kernel/Process.cpp @@ -64,6 +64,9 @@ namespace Kernel break; case LibELF::PT_LOAD: { + uint8_t flags = MMU::Flags::UserSupervisor | MMU::Flags::Present; + if (elf_program_header.p_flags & LibELF::PF_W) + flags |= MMU::Flags::ReadWrite; size_t page_start = elf_program_header.p_vaddr / 4096; size_t page_end = BAN::Math::div_round_up(elf_program_header.p_vaddr + elf_program_header.p_memsz, 4096); MUST(process->m_allocated_pages.reserve(page_end - page_start + 1)); @@ -71,7 +74,7 @@ namespace Kernel { auto paddr = Memory::Heap::get().take_free_page(); MUST(process->m_allocated_pages.push_back(paddr)); - process->m_mmu->map_page_at(paddr, page * 4096, MMU::Flags::UserSupervisor | MMU::Flags::ReadWrite | MMU::Flags::Present); + process->m_mmu->map_page_at(paddr, page * 4096, flags); } process->m_mmu->load(); memcpy((void*)elf_program_header.p_vaddr, elf->data() + elf_program_header.p_offset, elf_program_header.p_filesz); diff --git a/kernel/kernel/Thread.cpp b/kernel/kernel/Thread.cpp index 666fb46b..ca365fd7 100644 --- a/kernel/kernel/Thread.cpp +++ b/kernel/kernel/Thread.cpp @@ -74,7 +74,7 @@ namespace Kernel Thread::~Thread() { - dprintln("thread {} exit", tid()); + dprintln("thread {} ({}) exit", tid(), m_process->pid()); kfree(m_stack_base); }