diff options
| author | Matteo Gmür <matteo.gmuer1@ost.ch> | 2025-05-12 13:51:12 +0000 |
|---|---|---|
| committer | Matteo Gmür <matteo.gmuer1@ost.ch> | 2025-05-12 13:51:12 +0000 |
| commit | 29e067867e7a437d12351b481024d4bab431b202 (patch) | |
| tree | 97479edda8e06ea5b09ee77096ab117b4cfe8499 /arch/x86_64/src/memory/main.cpp | |
| parent | ee4c61f7313fedd23d01c69ea5036fa38ef6248a (diff) | |
| download | teachos-29e067867e7a437d12351b481024d4bab431b202.tar.xz teachos-29e067867e7a437d12351b481024d4bab431b202.zip | |
Fix crashes because of are frame allocator copy
Diffstat (limited to 'arch/x86_64/src/memory/main.cpp')
| -rw-r--r-- | arch/x86_64/src/memory/main.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/arch/x86_64/src/memory/main.cpp b/arch/x86_64/src/memory/main.cpp index 5e671ac..2746a71 100644 --- a/arch/x86_64/src/memory/main.cpp +++ b/arch/x86_64/src/memory/main.cpp @@ -18,22 +18,23 @@ namespace teachos::arch::memory static std::optional<allocator::area_frame_allocator> frame_allocator; auto create_frame_allocator(multiboot::memory_information const & memory_information) - -> allocator::area_frame_allocator + -> allocator::area_frame_allocator & { frame_allocator.emplace(memory_information); return frame_allocator.value(); } - auto get_frame_allocator() -> allocator::area_frame_allocator + auto get_frame_allocator() -> allocator::area_frame_allocator & { - exception_handling::assert(frame_allocator.has_value(), "[Memory main] Frame allocator has not been created yet"); + exception_handling::assert(frame_allocator.has_value(), + "[Initialization] Frame allocator has not been created yet"); return frame_allocator.value(); } } // namespace auto remap_heap(std::size_t heap_start, std::size_t heap_size, paging::entry::bitset additional_flags = {}) -> void { - auto allocator = get_frame_allocator(); + decltype(auto) allocator = get_frame_allocator(); decltype(auto) active_table = paging::active_page_table::create_or_get(); auto const start_page = paging::virtual_page::containing_address(heap_start); auto const end_page = ++(paging::virtual_page::containing_address(heap_start + heap_size - 1)); @@ -59,7 +60,7 @@ namespace teachos::arch::memory has_been_called = true; auto const memory_information = multiboot::read_multiboot2(); - auto allocator = create_frame_allocator(memory_information); + decltype(auto) allocator = create_frame_allocator(memory_information); kernel::cpu::set_cr0_bit(kernel::cpu::cr0_flags::WRITE_PROTECT); kernel::cpu::set_efer_bit(kernel::cpu::efer_flags::NXE); |
