#include "arch/memory.hpp" // #include "noarch/error.hpp" // #include "noarch/print.hpp" // #include "x86_64/bootstrap/mutiboot.hpp" // #include "x86_64/memory/frame_allocator.hpp" // #include "x86_64/memory/mbi_frame_allocator.hpp" // #include // #include // #include // #include namespace teachos::arch::memory { // namespace // { // /** // * @brief Remap the kernel according to the ELF information. // * // * After initial bootup, a basic identity mapping of the lower 1GiB is set up. This mapping allows execution // from, // * as well as read and write access to, the mapped memory. In order to protect the kernel, remap it according to // the // * information supplied by the ELF file. This means remapping code sections as read-only and data sections as // * no-execute (and read only for .rodata). // * // * @param sections Information about the sections in the loaded kernel binary. // * @param allocator The frame allocator used to create new page mappings. // */ // auto remap_kernel(elf::section_header_table const & sections, x86_64::memory::frame_allocator & allocator) -> // void // { // static_cast(sections); // static_cast(allocator); // } // } // namespace auto init() -> void { // kernel::println("Initializing memory"); // if (!x86_64::bootstrap::multiboot_information_pointer->has()) // { // kernel::panic("Received no memory map from the boot loader!"); // } // if (!x86_64::bootstrap::multiboot_information_pointer->has()) // { // kernel::panic("Received no ELF symbol information from the boot loader!"); // } // auto memory_map = x86_64::bootstrap::multiboot_information_pointer->memory_map(); // auto elf_symbols = x86_64::bootstrap::multiboot_information_pointer->elf_symbols(); // auto section_header_table = elf::section_header_table{elf_symbols.data(), elf::file_class::bits_64}; // auto allocator = x86_64::memory::mbi_frame_allocator{memory_map, section_header_table}; // remap_kernel(section_header_table, allocator); } } // namespace teachos::arch::memory