diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/CMakeLists.txt | 1 | ||||
-rw-r--r-- | kernel/include/mm/virtual_mm.h | 5 | ||||
-rw-r--r-- | kernel/mm/virtual_mm/virtual_mm.c | 6 |
3 files changed, 12 insertions, 0 deletions
diff --git a/kernel/CMakeLists.txt b/kernel/CMakeLists.txt index 8238a5a..204295d 100644 --- a/kernel/CMakeLists.txt +++ b/kernel/CMakeLists.txt @@ -87,3 +87,4 @@ set(CMAKE_C_LINK_EXECUTABLE "${CMAKE_C_COMPILER} <CMAKE_C_LINK_FLAGS> <FLAGS> <L ) target_link_options(kernel PRIVATE ${LINKER_FLAGS}) +target_link_libraries(kernel PRIVATE gcc) diff --git a/kernel/include/mm/virtual_mm.h b/kernel/include/mm/virtual_mm.h index fa7f505..3f938d2 100644 --- a/kernel/include/mm/virtual_mm.h +++ b/kernel/include/mm/virtual_mm.h @@ -87,4 +87,9 @@ uint32_t *virtual_mm_lookup_table(uint32_t *page_table, uint32_t virtual_addr); uint32_t *virtual_mm_lookup_directory(uint32_t *page_directory, uint32_t virtual_addr); +/* + * Loads a given page directory into CR0 + */ +void virtual_mm_load_page_directory(uint32_t *page_directory); + #endif diff --git a/kernel/mm/virtual_mm/virtual_mm.c b/kernel/mm/virtual_mm/virtual_mm.c index e53ff2b..6350c11 100644 --- a/kernel/mm/virtual_mm/virtual_mm.c +++ b/kernel/mm/virtual_mm/virtual_mm.c @@ -71,3 +71,9 @@ virtual_mm_lookup_directory(uint32_t *page_directory, uint32_t virtual_addr) return NULL; } + +ALWAYS_INLINE void +virtual_mm_load_page_directory(uint32_t *page_directory) +{ + __asm__("movl %0, %%cr0" ::"r"(page_directory)); +} |