aboutsummaryrefslogtreecommitdiff
path: root/kernel/src/test_support/page_mapper.cpp
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2026-04-01 20:59:55 +0200
committerFelix Morgner <felix.morgner@ost.ch>2026-04-01 20:59:55 +0200
commitdc64b1cba4677b40c9dda31ecd5109507837b817 (patch)
tree9954f6d3bb07c78daa12e807eef8e828dc9b5fe0 /kernel/src/test_support/page_mapper.cpp
parent825d8bafef152a52cd76851764913fb12cdc685d (diff)
downloadteachos-dc64b1cba4677b40c9dda31ecd5109507837b817.tar.xz
teachos-dc64b1cba4677b40c9dda31ecd5109507837b817.zip
kernel/tests: don't rely on vector for fake memory
Diffstat (limited to 'kernel/src/test_support/page_mapper.cpp')
-rw-r--r--kernel/src/test_support/page_mapper.cpp20
1 files changed, 18 insertions, 2 deletions
diff --git a/kernel/src/test_support/page_mapper.cpp b/kernel/src/test_support/page_mapper.cpp
index 5a1b747..805998b 100644
--- a/kernel/src/test_support/page_mapper.cpp
+++ b/kernel/src/test_support/page_mapper.cpp
@@ -7,6 +7,7 @@
#include <cstddef>
#include <format>
#include <stdexcept>
+#include <sys/mman.h>
namespace kernel::tests
{
@@ -20,10 +21,25 @@ namespace kernel::tests
page_mappings.insert({page.number(), frame});
auto page_address = page.start_address();
+ auto sandbox_start = memory.heap_base();
+ auto sandbox_end = sandbox_start + memory.heap_size();
- if (page_address >= kapi::memory::mmio_base)
+ if (page_address >= sandbox_start && page_address < sandbox_end)
{
- throw std::invalid_argument{"MMIO mapping not yet supported in testing!"};
+ auto virtual_target = static_cast<std::byte *>(page_address);
+ auto physical_offset = frame.number() * kapi::memory::frame::size;
+ auto mapped_ptr = mmap(virtual_target, kapi::memory::page::size.value, PROT_READ | PROT_WRITE,
+ MAP_SHARED | MAP_FIXED, memory.memory_descriptor(), physical_offset.value);
+ if (mapped_ptr == MAP_FAILED)
+ {
+ throw std::runtime_error("Failed to map page");
+ }
+
+ return static_cast<std::byte *>(mapped_ptr);
+ }
+ else if (page_address >= kapi::memory::mmio_base)
+ {
+ throw std::runtime_error("MMIO mapping not yet supported in testing!");
}
else if (page_address >= kapi::memory::higher_half_direct_map_base)
{