From dd42093b932161bf4d6f98f1e25093049824d6b2 Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Mon, 19 Jul 2021 17:54:51 +0200 Subject: [PATCH] Kernel: Move boot info declarations to a header file Instead of manually redeclaring those variables in various files this now adds a header file for them. --- Kernel/BootInfo.h | 23 +++++++++++++++++++++++ Kernel/Prekernel/BootInfo.h | 30 ------------------------------ Kernel/Prekernel/Prekernel.h | 26 ++++++++++++++++++++++++++ Kernel/Prekernel/init.cpp | 1 - Kernel/Sections.h | 5 +---- Kernel/VM/MemoryManager.cpp | 6 +----- Kernel/VM/PageDirectory.cpp | 8 -------- Kernel/init.cpp | 5 ++--- 8 files changed, 53 insertions(+), 51 deletions(-) create mode 100644 Kernel/BootInfo.h delete mode 100644 Kernel/Prekernel/BootInfo.h diff --git a/Kernel/BootInfo.h b/Kernel/BootInfo.h new file mode 100644 index 0000000000..497102a60e --- /dev/null +++ b/Kernel/BootInfo.h @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2021, Gunnar Beutner + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include + +extern "C" u8 const* start_of_prekernel_image; +extern "C" u8 const* end_of_prekernel_image; +extern "C" __attribute__((section(".boot_bss"))) FlatPtr kernel_base; +#if ARCH(X86_64) +extern "C" u32 gdt64ptr; +extern "C" u16 code64_sel; +extern "C" FlatPtr boot_pml4t; +#endif +extern "C" FlatPtr boot_pdpt; +extern "C" FlatPtr boot_pd0; +extern "C" FlatPtr boot_pd_kernel; +extern "C" FlatPtr boot_pd_kernel_pt1023; +extern "C" const char* kernel_cmdline; diff --git a/Kernel/Prekernel/BootInfo.h b/Kernel/Prekernel/BootInfo.h deleted file mode 100644 index 04dcba19ce..0000000000 --- a/Kernel/Prekernel/BootInfo.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2021, Gunnar Beutner - * - * SPDX-License-Identifier: BSD-2-Clause - */ - -#pragma once - -#include -#include - -namespace Kernel { - -struct [[gnu::packed]] BootInfo { - u8 const* start_of_prekernel_image; - u8 const* end_of_prekernel_image; - FlatPtr kernel_base; - multiboot_info* multiboot_info_ptr; -#if ARCH(X86_64) - u32 gdt64ptr; - u16 code64_sel; - FlatPtr boot_pml4t; -#endif - FlatPtr boot_pdpt; - FlatPtr boot_pd0; - FlatPtr boot_pd_kernel; - FlatPtr boot_pd_kernel_pt1023; - char const* kernel_cmdline; -}; -} diff --git a/Kernel/Prekernel/Prekernel.h b/Kernel/Prekernel/Prekernel.h index 6ce2159be0..fede32092b 100644 --- a/Kernel/Prekernel/Prekernel.h +++ b/Kernel/Prekernel/Prekernel.h @@ -6,4 +6,30 @@ #pragma once +#ifdef __cplusplus +# include +#endif + #define MAX_KERNEL_SIZE 0x3000000 + +#ifdef __cplusplus +namespace Kernel { + +struct [[gnu::packed]] BootInfo { + u8 const* start_of_prekernel_image; + u8 const* end_of_prekernel_image; + FlatPtr kernel_base; + multiboot_info* multiboot_info_ptr; +# if ARCH(X86_64) + u32 gdt64ptr; + u16 code64_sel; + FlatPtr boot_pml4t; +# endif + FlatPtr boot_pdpt; + FlatPtr boot_pd0; + FlatPtr boot_pd_kernel; + FlatPtr boot_pd_kernel_pt1023; + char const* kernel_cmdline; +}; +} +#endif diff --git a/Kernel/Prekernel/init.cpp b/Kernel/Prekernel/init.cpp index a45930a1ba..a0801f6dc6 100644 --- a/Kernel/Prekernel/init.cpp +++ b/Kernel/Prekernel/init.cpp @@ -8,7 +8,6 @@ #include #include -#include #include #include #include diff --git a/Kernel/Sections.h b/Kernel/Sections.h index 37ca06d994..99d17965f1 100644 --- a/Kernel/Sections.h +++ b/Kernel/Sections.h @@ -9,15 +9,12 @@ #include #ifdef __cplusplus # include +# include #endif #define READONLY_AFTER_INIT __attribute__((section(".ro_after_init"))) #define UNMAP_AFTER_INIT NEVER_INLINE __attribute__((section(".unmap_after_init"))) -#ifdef __cplusplus -extern "C" FlatPtr kernel_base; -#endif - #define KERNEL_PD_END (kernel_base + 0x31000000) #define KERNEL_PT1024_BASE (kernel_base + 0x3FE00000) #define KERNEL_QUICKMAP_PT (KERNEL_PT1024_BASE + 0x6000) diff --git a/Kernel/VM/MemoryManager.cpp b/Kernel/VM/MemoryManager.cpp index ca47e7e582..0c8e0fa4fe 100644 --- a/Kernel/VM/MemoryManager.cpp +++ b/Kernel/VM/MemoryManager.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -22,8 +23,6 @@ #include #include -extern u8* start_of_prekernel_image; -extern u8* end_of_prekernel_image; extern u8* start_of_kernel_image; extern u8* end_of_kernel_image; extern FlatPtr start_of_kernel_text; @@ -36,9 +35,6 @@ extern FlatPtr end_of_unmap_after_init; extern FlatPtr start_of_kernel_ksyms; extern FlatPtr end_of_kernel_ksyms; -extern "C" void* boot_pd_kernel; -extern "C" void* boot_pd_kernel_pt1023; - extern multiboot_module_entry_t multiboot_copy_boot_modules_array[16]; extern size_t multiboot_copy_boot_modules_count; diff --git a/Kernel/VM/PageDirectory.cpp b/Kernel/VM/PageDirectory.cpp index 09c1ea133a..fa72ad61b5 100644 --- a/Kernel/VM/PageDirectory.cpp +++ b/Kernel/VM/PageDirectory.cpp @@ -31,14 +31,6 @@ RefPtr PageDirectory::find_by_cr3(FlatPtr cr3) return cr3_map().get(cr3).value_or({}); } -extern "C" FlatPtr kernel_base; -#if ARCH(X86_64) -extern "C" void* boot_pml4t; -#endif -extern "C" void* boot_pdpt; -extern "C" void* boot_pd0; -extern "C" void* boot_pd_kernel; - UNMAP_AFTER_INIT PageDirectory::PageDirectory() { // make sure this starts in a new page directory to make MemoryManager::initialize_physical_pages() happy diff --git a/Kernel/init.cpp b/Kernel/init.cpp index f118dd2be8..cf07343a35 100644 --- a/Kernel/init.cpp +++ b/Kernel/init.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -39,7 +40,7 @@ #include #include #include -#include +#include #include #include #include @@ -110,8 +111,6 @@ u8 const* start_of_prekernel_image; u8 const* end_of_prekernel_image; __attribute__((section(".boot_bss"))) FlatPtr kernel_base; #if ARCH(X86_64) -extern "C" u32 gdt64ptr; -extern "C" u16 code64_sel; FlatPtr boot_pml4t; #endif FlatPtr boot_pdpt;