From 5b6c2ca63b4a6e65ab9b93625407d42c33c9668e Mon Sep 17 00:00:00 2001 From: Amelia Coutard Date: Mon, 25 Dec 2023 02:06:33 +0100 Subject: [PATCH] =?utf8?q?D=C3=A9placement=20de=20memset=20et=20memcpy=20v?= =?utf8?q?ers=20la=20"librairie=20standard"?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- kernel/src/elf64.cpp | 6 +++--- kernel/src/kernel.cpp | 2 +- kernel/src/paging.hpp | 2 +- kernel/src/utils.cpp | 14 -------------- kernel/src/utils.hpp | 2 -- libcpp/memory.hpp | 14 ++++++++++++++ 6 files changed, 19 insertions(+), 21 deletions(-) diff --git a/kernel/src/elf64.cpp b/kernel/src/elf64.cpp index 239cb6b..d5df9d9 100644 --- a/kernel/src/elf64.cpp +++ b/kernel/src/elf64.cpp @@ -55,8 +55,8 @@ void os::elf::load_elf(os::process& result, amy::byte* start, amy::size length, result.r15 = 0; // Copy kernel mappings to the new virtual address space. - memset(result.PML4T->contents, 0, 256 * amy::byte_size()); - memcpy(result.PML4T->contents + 256, original_PML4T.contents + 256, 256 * amy::byte_size()); + amy::memset(result.PML4T->contents, 0, 256 * amy::byte_size()); + amy::memcpy(result.PML4T->contents + 256, original_PML4T.contents + 256, 256 * amy::byte_size()); for (amy::size i = 0; i < elf_header.entry_count_program_header_table; i++) { const os::elf::program_header program_header = *(os::elf::program_header*)( @@ -82,7 +82,7 @@ void os::elf::load_elf(os::process& result, amy::byte* start, amy::size length, .US = true, .PWT = false, .PCD = false, .A = false, .D = false, .PAT = false, .G = false, .AVL = 0, .NX = (program_header.flags & 1) == 0, }); - memcpy((void*)alloc.ptr, start + program_header.p_offset, clamp(0ul, program_header.p_filesz - i * 0x1000, 0x1000ul)); + amy::memcpy((void*)alloc.ptr, start + program_header.p_offset, clamp(0ul, program_header.p_filesz - i * 0x1000, 0x1000ul)); } } } diff --git a/kernel/src/kernel.cpp b/kernel/src/kernel.cpp index cc709be..233770e 100644 --- a/kernel/src/kernel.cpp +++ b/kernel/src/kernel.cpp @@ -180,7 +180,7 @@ extern "C" void kmain(unsigned long magic, os::phys_ptr> (12 + 9 * 3)) & 0x1FF; os::paging::global_PML4T.contents[index].paging_table_info({.RW = true, .US = false, .PWT = false, .PCD = false, .A = false, .AVL = 0, .NX = false}); const auto PDPT_alloc = os::paging::page_allocator.allocate(1); - os::memset((void*)PDPT_alloc.ptr, 0, 0x1000); + amy::memset((void*)PDPT_alloc.ptr, 0, 0x1000); os::paging::global_PML4T.contents[index].paging_table_ptr(os::phys_ptr(PDPT_alloc.ptr.get_phys_addr())); } diff --git a/kernel/src/paging.hpp b/kernel/src/paging.hpp index 7b8087d..ede7e3b 100644 --- a/kernel/src/paging.hpp +++ b/kernel/src/paging.hpp @@ -230,7 +230,7 @@ void map_page(paging_table& paging_table, page const* vaddr } else { auto const alloc = page_allocator.allocate(1); assert(alloc.ptr != nullptr, "Not enough RAM to create the paging structures."); - memset((void*)alloc.ptr, 0, 0x1000); + amy::memset((void*)alloc.ptr, 0, 0x1000); paging_table.contents[index].paging_table_info( {.RW = true, .US = page_info.US, .PWT = false, .PCD = false, .A = false, .AVL = 0, .NX = false}); paging_table.contents[index].paging_table_ptr(os::phys_ptr>{alloc.ptr.get_phys_addr()}); diff --git a/kernel/src/utils.cpp b/kernel/src/utils.cpp index 43a8c2b..64c88f0 100644 --- a/kernel/src/utils.cpp +++ b/kernel/src/utils.cpp @@ -50,17 +50,3 @@ amy::u64 os::get_msr(amy::u32 msr) { void os::set_msr(amy::u32 msr, amy::u64 v) { asm volatile ("wrmsr" : : "a"(v & 0xFFFF'FFFF), "d"((v >> 32) & 0xFFFF'FFFF), "c"(msr)); } -extern "C" void* os::memset(void* dest, int c, amy::size n) { - os::assert(n >= 0, "Memset expects a positive size."); - while (n-- > 0) { - reinterpret_cast(dest)[n] = amy::byte(c); - } - return dest; -} -extern "C" void* os::memcpy(void* dest, const void* src, amy::size n) { - os::assert(n >= 0, "Memcpy expects a positive size."); - while (n-- > 0) { - reinterpret_cast(dest)[n] = reinterpret_cast(src)[n]; - } - return dest; -} diff --git a/kernel/src/utils.hpp b/kernel/src/utils.hpp index b3a8edb..3ac872f 100644 --- a/kernel/src/utils.hpp +++ b/kernel/src/utils.hpp @@ -31,8 +31,6 @@ void set_msr(amy::u32 msr, amy::u64 v); template T clamp(T min, T v, T max) { return v < min ? min : max < v ? max : v; } -extern "C" void* memset(void* dest, int c, amy::size n); -extern "C" void* memcpy(void* dest, const void* src, amy::size n); template struct incrementing_int64_map { diff --git a/libcpp/memory.hpp b/libcpp/memory.hpp index 2c01f93..f8c3b7e 100644 --- a/libcpp/memory.hpp +++ b/libcpp/memory.hpp @@ -47,4 +47,18 @@ template constexpr T&& declval() noexcept { static_assert(false, "amy::declval cannot be used in an evaluated context."); } + +extern "C" inline void* memset(void* dest, int c, amy::size n) { + while (n-- > 0) { + reinterpret_cast(dest)[n] = amy::byte(c); + } + return dest; +} +extern "C" inline void* memcpy(void* dest, const void* src, amy::size n) { + while (n-- > 0) { + reinterpret_cast(dest)[n] = reinterpret_cast(src)[n]; + } + return dest; +} + } // namespace amy -- 2.47.0