]> git.ameliathe1st.gay Git - voyage-au-centre-des-fichiers.git/commitdiff
Déplacement de memset et memcpy vers la "librairie standard"
authorAmelia Coutard <eliottulio.coutard@gmail.com>
Mon, 25 Dec 2023 01:06:33 +0000 (02:06 +0100)
committerAmelia Coutard <eliottulio.coutard@gmail.com>
Mon, 25 Dec 2023 01:06:33 +0000 (02:06 +0100)
kernel/src/elf64.cpp
kernel/src/kernel.cpp
kernel/src/paging.hpp
kernel/src/utils.cpp
kernel/src/utils.hpp
libcpp/memory.hpp

index 239cb6bc1a15453705d1eed4c68a9e335266aa87..d5df9d90777454787c0492f1e12761335c721c71 100644 (file)
@@ -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<os::paging::PML4E>());
-       memcpy(result.PML4T->contents + 256, original_PML4T.contents + 256, 256 * amy::byte_size<os::paging::PML4E>());
+       amy::memset(result.PML4T->contents, 0, 256 * amy::byte_size<os::paging::PML4E>());
+       amy::memcpy(result.PML4T->contents + 256, original_PML4T.contents + 256, 256 * amy::byte_size<os::paging::PML4E>());
 
        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));
                }
        }
 }
index cc709beb53d1785e2664a1a9718ab1be2ced137b..233770e78cf987abf8d733c4f0bd706744c7b2fe 100644 (file)
@@ -180,7 +180,7 @@ extern "C" void kmain(unsigned long magic, os::phys_ptr<const multiboot2::info_s
                amy::size const index = (amy::size(&os::processes) >> (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<os::paging::PDPT>(PDPT_alloc.ptr.get_phys_addr()));
        }
 
index 7b8087d6bf5e45abd0cc2f5f9c2c5f620903d8ab..ede7e3ba22f04eeac78f8a78bd80c884c9ba64a0 100644 (file)
@@ -230,7 +230,7 @@ void map_page(paging_table<paging_depth>& paging_table, page<depth> 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<os::paging::paging_table<paging_depth - 1>>{alloc.ptr.get_phys_addr()});
index 43a8c2bcb89939980c929c100799e9c88e7da5d1..64c88f0f26c2eec7d062bc0633799c2d96574510 100644 (file)
@@ -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<amy::byte*>(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<amy::byte*>(dest)[n] = reinterpret_cast<const amy::byte*>(src)[n];
-       }
-       return dest;
-}
index b3a8edbaa4a1e67d34c99b1e69025fba0054a309..3ac872f3dcad0da034e8ece7707ed75160ab541c 100644 (file)
@@ -31,8 +31,6 @@ void set_msr(amy::u32 msr, amy::u64 v);
 template <typename T> 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 <typename T>
 struct incrementing_int64_map {
index 2c01f93eca61d81234130994e465ac0f35e9e83a..f8c3b7eb08512499b5eb20df9583c5bd1f26e043 100644 (file)
@@ -47,4 +47,18 @@ template <typename T> 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<amy::byte*>(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<amy::byte*>(dest)[n] = reinterpret_cast<const amy::byte*>(src)[n];
+       }
+       return dest;
+}
+
 } // namespace amy