From: Amelia Coutard Date: Sun, 26 Mar 2023 02:24:29 +0000 (+0200) Subject: Made types a bit better X-Git-Url: https://git.ameliathe1st.gay/?a=commitdiff_plain;h=86ec72ad0751750f384061b85cdad032117754bf;p=voyage-au-centre-des-fichiers.git Made types a bit better --- diff --git a/kernel/src/elf64.cpp b/kernel/src/elf64.cpp index 70d9e1a..9f96106 100644 --- a/kernel/src/elf64.cpp +++ b/kernel/src/elf64.cpp @@ -13,7 +13,7 @@ #include "elf64.hpp" -os::process os::elf::load_elf(void* start, std::size_t length, const paging::PML4T& original_PML4T) { +os::process os::elf::load_elf(std::byte* start, std::size_t length, const paging::PML4T& original_PML4T) { os::assert(length >= sizeof(os::elf::header), "Elf file isn't big enough to contain a header: there is an error."); // TODO: Check that the elf file sections are all fully inside the file. @@ -44,7 +44,7 @@ os::process os::elf::load_elf(void* start, std::size_t length, const paging::PML for (std::size_t i = 0; i < elf_header.entry_count_program_header_table; i++) { const os::elf::program_header program_header = *(os::elf::program_header*)( - reinterpret_cast(start) + elf_header.program_header_table + start + elf_header.program_header_table + i * elf_header.entry_size_program_header_table ); if (program_header.type != 1) { // Segment shouldn't be loaded. @@ -61,7 +61,7 @@ os::process os::elf::load_elf(void* start, std::size_t length, const paging::PML for (std::size_t i = 0; i < nb_pages; i++) { std::byte* const page = os::paging::setup_page(*result.PML4T, program_header.p_vaddr + i * 0x1000, (program_header.flags & 2) >> 1, 1); - memcpy(page, (std::byte*)start + program_header.p_offset, clamp(0ul, program_header.p_filesz - i * 0x1000, 0x1000ul)); + memcpy(page, start + program_header.p_offset, clamp(0ul, program_header.p_filesz - i * 0x1000, 0x1000ul)); } } diff --git a/kernel/src/elf64.hpp b/kernel/src/elf64.hpp index b3eaa12..7f348b8 100644 --- a/kernel/src/elf64.hpp +++ b/kernel/src/elf64.hpp @@ -56,5 +56,5 @@ namespace os { namespace elf { }; static_assert(sizeof(program_header) == 56); - process load_elf(void* start, std::size_t length, const paging::PML4T& original_PML4T); + process load_elf(std::byte* start, std::size_t length, const paging::PML4T& original_PML4T); } } // namespace os::elf diff --git a/kernel/src/kernel.cpp b/kernel/src/kernel.cpp index a83504c..e31457a 100644 --- a/kernel/src/kernel.cpp +++ b/kernel/src/kernel.cpp @@ -77,10 +77,10 @@ extern "C" void kmain(unsigned long magic, os::phys_ptr{}: {}\n", multiboot2::modules_mod_start(it) / 0x1000 * 0x1000, multiboot2::modules_mod_end(it) / 0x1000 * 0x1000, multiboot2::modules_string(it)); + os::print("{}->{}: {}\n", multiboot2::modules_mod_start(it), multiboot2::modules_mod_end(it), multiboot2::modules_string(it)); os::assert(test_module_process.PML4T == nullptr, "Multiple modules specified in the multiboot. This is unsupported."); test_module_process = - os::elf::load_elf(&*os::phys_ptr(multiboot2::modules_mod_start(it)), + os::elf::load_elf((std::byte*)multiboot2::modules_mod_start(it), multiboot2::modules_mod_end(it) - multiboot2::modules_mod_start(it), PML4T); break; diff --git a/kernel/src/lib/multiboot2.hpp b/kernel/src/lib/multiboot2.hpp index 6a42639..bb196f4 100644 --- a/kernel/src/lib/multiboot2.hpp +++ b/kernel/src/lib/multiboot2.hpp @@ -114,11 +114,11 @@ return *reinterpret_cast(&ptr->rest[8 + memory_map_entry_size(ptr) * index + 16]); } - inline std::uint32_t modules_mod_start(os::phys_ptr ptr) { - return *reinterpret_cast(&ptr->rest[0]); + inline os::phys_ptr modules_mod_start(os::phys_ptr ptr) { + return os::phys_ptr{*reinterpret_cast(&ptr->rest[0])}; } - inline std::uint32_t modules_mod_end(os::phys_ptr ptr) { - return *reinterpret_cast(&ptr->rest[4]); + inline os::phys_ptr modules_mod_end(os::phys_ptr ptr) { + return os::phys_ptr{*reinterpret_cast(&ptr->rest[4])}; } inline const char* modules_string(os::phys_ptr ptr) { return reinterpret_cast(&ptr->rest[8]);