aboutsummaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2024-09-16 14:07:41 +0000
committerFelix Morgner <felix.morgner@ost.ch>2024-09-17 08:58:55 +0200
commit8f9b9cd8aac30572b7e275bbeb1b32d2cbb8950a (patch)
tree5e215dd93c34b3d58c287b036ad2d190e0a9a772 /source
parentc16a3739649fa15178df667d610553e93db83e4c (diff)
downloadteachos-8f9b9cd8aac30572b7e275bbeb1b32d2cbb8950a.tar.xz
teachos-8f9b9cd8aac30572b7e275bbeb1b32d2cbb8950a.zip
build: migrate away from conan
Diffstat (limited to 'source')
-rw-r--r--source/.clang-format77
-rw-r--r--source/CMakeLists.txt115
-rw-r--r--source/arch/x86_64/CMakeLists.txt64
-rw-r--r--source/arch/x86_64/include/arch/boot/pointers.hpp11
-rw-r--r--source/arch/x86_64/include/arch/io/port_io.hpp134
-rw-r--r--source/arch/x86_64/include/arch/kernel/main.hpp11
-rw-r--r--source/arch/x86_64/include/arch/video/vga/io.hpp41
-rw-r--r--source/arch/x86_64/include/arch/video/vga/text.hpp113
-rw-r--r--source/arch/x86_64/scripts/kernel.ld139
-rw-r--r--source/arch/x86_64/src/boot/boot.s370
-rw-r--r--source/arch/x86_64/src/boot/crti.s13
-rw-r--r--source/arch/x86_64/src/boot/crtn.s9
-rw-r--r--source/arch/x86_64/src/boot/multiboot.s26
-rw-r--r--source/arch/x86_64/src/kernel/main.cpp15
-rw-r--r--source/arch/x86_64/src/video/vga/text.cpp47
-rw-r--r--source/arch/x86_64/support/grub.cfg.in7
-rw-r--r--source/cmake/Modules/FindSphinx.cmake10
-rw-r--r--source/cmake/Modules/Findgrub-mkrescue.cmake10
-rw-r--r--source/cmake/Platforms/x86_64.cmake27
-rw-r--r--source/include/memory/asm_pointer.hpp72
-rw-r--r--source/src/kernel/main.cpp3
21 files changed, 0 insertions, 1314 deletions
diff --git a/source/.clang-format b/source/.clang-format
deleted file mode 100644
index d4da962..0000000
--- a/source/.clang-format
+++ /dev/null
@@ -1,77 +0,0 @@
----
-AccessModifierOffset: '-2'
-AlignAfterOpenBracket: Align
-AlignConsecutiveAssignments: 'false'
-AlignConsecutiveDeclarations: 'false'
-AlignEscapedNewlines: Left
-AlignOperands: 'true'
-AlignTrailingComments: 'true'
-AllowAllParametersOfDeclarationOnNextLine: 'true'
-AllowShortBlocksOnASingleLine: 'false'
-AllowShortCaseLabelsOnASingleLine: 'false'
-AllowShortFunctionsOnASingleLine: All
-AllowShortIfStatementsOnASingleLine: 'false'
-AllowShortLoopsOnASingleLine: 'false'
-AlwaysBreakAfterDefinitionReturnType: None
-AlwaysBreakAfterReturnType: None
-AlwaysBreakTemplateDeclarations: 'true'
-BinPackArguments: 'true'
-BinPackParameters: 'true'
-BreakBeforeBraces: Custom
-BraceWrapping:
- AfterClass: 'true'
- AfterControlStatement: 'true'
- AfterEnum: 'true'
- AfterFunction: 'true'
- AfterNamespace: 'true'
- AfterStruct: 'true'
- AfterUnion: 'true'
- AfterExternBlock: 'true'
- BeforeCatch: 'true'
- BeforeElse: 'true'
- IndentBraces: 'false'
-BreakBeforeInheritanceComma: 'false'
-BreakConstructorInitializers: BeforeComma
-BreakStringLiterals: 'true'
-ColumnLimit: '120'
-CompactNamespaces: 'false'
-Cpp11BracedListStyle: 'true'
-DerivePointerAlignment: 'false'
-FixNamespaceComments: 'true'
-IncludeBlocks: Regroup
-IncludeCategories:
- # Local Headers
- - Regex: '"(.*/?)+/.+\.hpp"'
- Priority: 100
- # STL Headers
- - Regex: '<[[:alnum:]._]+(?!\.(h|hpp))>'
- Priority: 400
- # C Library Headers
- - Regex: '<([[:alnum:]._]/*)+\.h>'
- Priority: 300
-IndentCaseLabels: 'true'
-IndentPPDirectives: None
-IndentWidth: '2'
-KeepEmptyLinesAtTheStartOfBlocks: 'false'
-Language: Cpp
-MaxEmptyLinesToKeep: '1'
-NamespaceIndentation: All
-PointerAlignment: Middle
-ReflowComments: 'true'
-SortIncludes: 'true'
-SortUsingDeclarations: 'true'
-SpaceAfterCStyleCast: 'false'
-SpaceAfterTemplateKeyword: 'false'
-SpaceBeforeAssignmentOperators: 'true'
-SpaceBeforeParens: ControlStatements
-SpaceInEmptyParentheses: 'false'
-SpacesBeforeTrailingComments: '2'
-SpacesInAngles: 'false'
-SpacesInContainerLiterals: 'false'
-SpacesInCStyleCastParentheses: 'false'
-SpacesInParentheses: 'false'
-SpacesInSquareBrackets: 'false'
-Standard: Cpp11
-TabWidth: '2'
-UseTab: Never
-...
diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt
deleted file mode 100644
index beb0c07..0000000
--- a/source/CMakeLists.txt
+++ /dev/null
@@ -1,115 +0,0 @@
-cmake_minimum_required(VERSION "3.27")
-
-project("kernel"
- DESCRIPTION "${TEACHOS_DESCRIPTION}"
- HOMEPAGE_URL "${TEACHOS_HOMEPAGE_URL}"
- VERSION "${TEACHOS_VERSION}"
- LANGUAGES ASM C CXX
-)
-
-#[============================================================================[
-# Global Build System Configuration
-#]============================================================================]
-
-set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin")
-set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib")
-set(CMAKE_INTERPROCEDURAL_OPTIMIZATION YES)
-
-#[============================================================================[
-# Documentation
-#]============================================================================]
-
-find_package("Doxygen")
-
-set(DOXYGEN_GENERATE_HTML NO)
-set(DOXYGEN_GENERATE_XML YES)
-set(DOXYGEN_EXCLUDE_PATTERNS "*.cpp")
-set(DOXYGEN_OUTPUT_DIRECTORY "doxygen")
-set(DOXYGEN_QUIET YES)
-
-file(GLOB_RECURSE DOXYGEN_SOURCES CONFIGURE_DEPENDS "*.hpp")
-
-message(STATUS "${SPHINX_SOURCES}")
-
-doxygen_add_docs("docs_xml"
- ${DOXYGEN_SOURCES}
- ALL
- USE_STAMP_FILE
- COMMENT "Generating developer documentation sources"
-)
-
-set_target_properties("docs_xml" PROPERTIES
- ADDITIONAL_CLEAN_FILES
- "${PROJECT_BINARY_DIR}/doxygen"
-)
-
-file(GLOB_RECURSE SPHINX_SOURCES CONFIGURE_DEPENDS "../docs/**.rst")
-
-add_custom_target("docs" ALL
- COMMAND "${SPHINX_BUILD_EXE}"
- "../docs"
- "docs"
- "-q"
- DEPENDS "docs_xml"
- SOURCES ${SPHINX_SOURCES}
- COMMENT "Generating developer documentation html"
-)
-
-set_target_properties("docs" PROPERTIES
- ADDITIONAL_CLEAN_FILES
- "${PROJECT_BINARY_DIR}/docs"
-)
-
-#[============================================================================[
-# Global Compiler Configuration
-#]============================================================================]
-
-add_compile_options(
- "$<$<CXX_COMPILER_ID:GNU>:-Wall>"
- "$<$<CXX_COMPILER_ID:GNU>:-Wextra>"
- "$<$<CXX_COMPILER_ID:GNU>:-Werror>"
- "$<$<CXX_COMPILER_ID:GNU>:-pedantic-errors>"
-)
-
-#[============================================================================[
-# Global Directories
-#]============================================================================]
-
-include_directories(
- "include"
- "arch/${CMAKE_SYSTEM_PROCESSOR}/include"
-)
-
-#[============================================================================[
-# The Bootstrap Library
-#]============================================================================]
-
-add_library("_boot" OBJECT)
-add_library("teachos::boot" ALIAS "_boot")
-
-#[============================================================================[
-# The Video Library
-#]============================================================================]
-
-add_library("_video" OBJECT)
-add_library("teachos::video" ALIAS "_video")
-
-#[============================================================================[
-# The Kernel
-#]============================================================================]
-
-add_executable("_kernel"
- "src/kernel/main.cpp"
-)
-add_executable("teachos::kernel" ALIAS "_kernel")
-
-target_link_libraries("_kernel" PRIVATE
- "teachos::boot"
- "teachos::video"
-)
-
-#[============================================================================[
-# Platform Specific Components
-#]============================================================================]
-
-add_subdirectory("arch/${CMAKE_SYSTEM_PROCESSOR}")
diff --git a/source/arch/x86_64/CMakeLists.txt b/source/arch/x86_64/CMakeLists.txt
deleted file mode 100644
index 6ff1332..0000000
--- a/source/arch/x86_64/CMakeLists.txt
+++ /dev/null
@@ -1,64 +0,0 @@
-#[============================================================================[
-# The Kernel Library
-#]============================================================================]
-
-set(TEACHOS_KERNEL_LINKER_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/kernel.ld")
-mark_as_advanced(TEACHOS_KERNEL_LINKER_SCRIPT)
-
-target_sources("_kernel" PRIVATE
- "src/kernel/main.cpp"
-)
-
-target_link_options("_kernel" PRIVATE
- "-T${TEACHOS_KERNEL_LINKER_SCRIPT}"
-)
-
-set_target_properties("_kernel" PROPERTIES
- LINK_DEPENDS "${TEACHOS_KERNEL_LINKER_SCRIPT}"
-)
-
-#[============================================================================[
-# The Bootstrap Library
-#]============================================================================]
-
-target_sources("_boot" PRIVATE
- "src/boot/boot.s"
- "src/boot/crti.s"
- "src/boot/crtn.s"
- "src/boot/multiboot.s"
-)
-
-#[============================================================================[
-# The Video Library
-#]============================================================================]
-
-target_sources("_video" PRIVATE
- "src/video/vga/text.cpp"
-)
-
-#[============================================================================[
-# The Bootable ISO Image
-#]============================================================================]
-
-find_package("grub-mkrescue")
-
-if(grub-mkrescue_FOUND)
- file(GENERATE
- OUTPUT "isofs/boot/grub/grub.cfg"
- INPUT "support/grub.cfg.in"
- )
-
- add_custom_target("bootable-iso"
- COMMAND "${GRUB_MKRESCUE_EXE}"
- "-o"
- "${PROJECT_BINARY_DIR}/teachos-$<CONFIGURATION>.iso"
- "${CMAKE_CURRENT_BINARY_DIR}/isofs"
- "$<TARGET_FILE:teachos::kernel>"
- "2>/dev/null"
- DEPENDS
- "$<TARGET_FILE:teachos::kernel>"
- "isofs/boot/grub/grub.cfg"
- BYPRODUCTS "${PROJECT_BINARY_DIR}/teachos-$<CONFIGURATION>.iso"
- COMMENT "Creating bootable ISO image"
- )
-endif()
diff --git a/source/arch/x86_64/include/arch/boot/pointers.hpp b/source/arch/x86_64/include/arch/boot/pointers.hpp
deleted file mode 100644
index dcd14fe..0000000
--- a/source/arch/x86_64/include/arch/boot/pointers.hpp
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef TEACHOS_ARCH_X86_64_BOOT_POINTERS_HPP
-#define TEACHOS_ARCH_X86_64_BOOT_POINTERS_HPP
-
-#include <cstddef>
-
-namespace teachos::arch::boot
-{
- extern "C" std::byte const multiboot_information_pointer;
-} // namespace teachos::arch::boot
-
-#endif \ No newline at end of file
diff --git a/source/arch/x86_64/include/arch/io/port_io.hpp b/source/arch/x86_64/include/arch/io/port_io.hpp
deleted file mode 100644
index 5b61f90..0000000
--- a/source/arch/x86_64/include/arch/io/port_io.hpp
+++ /dev/null
@@ -1,134 +0,0 @@
-#ifndef TEACHOS_ARCH_X86_64_IO_PORT_IO_HPP
-#define TEACHOS_ARCH_X86_64_IO_PORT_IO_HPP
-
-#include <concepts>
-#include <cstddef>
-#include <cstdint>
-#include <type_traits>
-
-namespace teachos::arch::io
-{
-
- /**
- * @brief An I/O port of a given size at a given address.
- *
- * @tparam Address The address (port number) of the I/O port.
- * @tparam Size The size (in bytes) of the I/O port.
- */
- template<std::uint16_t Address, std::size_t Size>
- struct port
- {
- static_assert(Size == 1 || Size == 2 || Size == 4, "A port must be either 1, 2, or 4 bytes in size");
-
- /**
- * @brief The type of data available for reading and writing through this port.
- */
- using io_type =
- std::conditional_t<Size == 1, std::byte, std::conditional_t<Size == 2, std::uint16_t, std::uint32_t>>;
-
- /**
- * @brief Write a byte to the I/O port.
- *
- * @param data The data to write to the I/O port.
- */
- auto static write(io_type data) -> void
- requires(Size == 1)
- {
- asm volatile("mov %[port], %%dx\n"
- "mov %[data], %%al\n"
- "out %%al, %%dx\n"
- :
- : [port] "i"(Address), [data] "im"(data)
- : "dx", "al");
- }
-
- /**
- * @brief Write a word to the I/O port.
- *
- * @param data The data to write to the I/O port.
- */
- auto static write(io_type data) -> void
- requires(Size == 2)
- {
- asm volatile("mov %[port], %%dx\n"
- "mov %[data], %%ax\n"
- "out %%ax, %%dx\n"
- :
- : [port] "i"(Address), [data] "im"(data)
- : "dx", "ax");
- }
-
- /**
- * @brief Write a double-word to the I/O port.
- *
- * @param data The data to write to the I/O port.
- */
- auto static write(io_type data) -> void
- requires(Size == 4)
- {
- asm volatile("mov %[port], %%dx\n"
- "mov %[data], %%eax\n"
- "out %%eax, %%dx\n"
- :
- : [port] "i"(Address), [data] "im"(data)
- : "dx", "eax");
- }
-
- /**
- * @brief Read a byte from the I/O port.
- *
- * @return The data read from the I/O port.
- */
- auto static read() -> io_type
- requires(Size == 1)
- {
- auto data = io_type{};
- asm volatile("mov %[port], %%dx\n"
- "in %%dx, %%al\n"
- "mov %%al, %[data]\n"
- : [data] "=m"(data)
- : [port] "i"(Address)
- : "dx", "al");
- return data;
- }
-
- /**
- * @brief Read a word from the I/O port.
- *
- * @return The data read from the I/O port.
- */
- auto static read() -> io_type
- requires(Size == 2)
- {
- auto data = io_type{};
- asm volatile("mov %[port], %%dx\n"
- "in %%dx, %%ax\n"
- "mov %%ax, %[data]\n"
- : [data] "=m"(data)
- : [port] "i"(Address)
- : "dx", "ax");
- return data;
- }
-
- /**
- * @brief Read a double-word from the I/O port.
- *
- * @return The data read from the I/O port.
- */
- auto static read() -> io_type
- requires(Size == 4)
- {
- auto data = io_type{};
- asm volatile("mov %[port], %%dx\n"
- "in %%dx, %%eax\n"
- "mov %%eax, %[data]\n"
- : [data] "=m"(data)
- : [port] "i"(Address)
- : "dx", "eax");
- return data;
- }
- };
-
-} // namespace teachos::arch::io
-
-#endif \ No newline at end of file
diff --git a/source/arch/x86_64/include/arch/kernel/main.hpp b/source/arch/x86_64/include/arch/kernel/main.hpp
deleted file mode 100644
index 6961594..0000000
--- a/source/arch/x86_64/include/arch/kernel/main.hpp
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef TEACHOS_ARCH_X86_64_KERNEL_MAIN_HPP
-#define TEACHOS_ARCH_X86_64_KERNEL_MAIN_HPP
-
-#include <cstddef>
-
-namespace teachos::arch::kernel
-{
- auto main() -> void;
-}
-
-#endif \ No newline at end of file
diff --git a/source/arch/x86_64/include/arch/video/vga/io.hpp b/source/arch/x86_64/include/arch/video/vga/io.hpp
deleted file mode 100644
index 9226c5c..0000000
--- a/source/arch/x86_64/include/arch/video/vga/io.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-#ifndef TEACHOS_ARCH_X86_64_VIDEO_VGA_IO_HPP
-#define TEACHOS_ARCH_X86_64_VIDEO_VGA_IO_HPP
-
-#include "arch/io/port_io.hpp"
-
-#include <cstddef>
-
-namespace teachos::arch::video::vga
-{
-
- namespace crtc
- {
-
- /**
- * @brief The address port of the CRT Controller
- */
- using address_port = arch::io::port<0x3d4, 1>;
-
- /**
- * @brief The data port of the CRT Controller
- */
- using data_port = arch::io::port<0x3d5, 1>;
-
- namespace registers
- {
- /**
- * @brief The address of the Cursor Start register of the CRTC
- */
- [[maybe_unused]] auto constexpr cursor_start = std::byte{0x0a};
-
- /**
- * @brief The address of the Cursor End register of the CRTC
- */
- [[maybe_unused]] auto constexpr curser_end = std::byte{0x0b};
- } // namespace registers
-
- }; // namespace crtc
-
-} // namespace teachos::arch::video::vga
-
-#endif \ No newline at end of file
diff --git a/source/arch/x86_64/include/arch/video/vga/text.hpp b/source/arch/x86_64/include/arch/video/vga/text.hpp
deleted file mode 100644
index 1e584d6..0000000
--- a/source/arch/x86_64/include/arch/video/vga/text.hpp
+++ /dev/null
@@ -1,113 +0,0 @@
-#ifndef TEACHOS_ARCH_X86_64_VIDEO_VGA_TEXT_HPP
-#define TEACHOS_ARCH_X86_64_VIDEO_VGA_TEXT_HPP
-
-#include <cstdint>
-#include <string_view>
-
-namespace teachos::arch::video::vga::text
-{
- /**
- * @brief The colors available in the standard VGA text mode.
- */
- enum struct color : std::uint8_t
- {
- black, /**< Equivalent to HTML color \#000000 */
- blue, /**< Equivalent to HTML color \#0000AA */
- green, /**< Equivalent to HTML color \#00AA00 */
- cyan, /**< Equivalent to HTML color \#00AAAA */
- red, /**< Equivalent to HTML color \#AA0000 */
- purple, /**< Equivalent to HTML color \#AA00AA */
- brown, /**< Equivalent to HTML color \#AA5500 */
- gray, /**< Equivalent to HTML color \#AAAAAA */
- };
-
- /**
- * @brief The foreground color modification flag.
- */
- enum struct foreground_flag : bool
- {
- none, /**< Apply no flag e.g., keep color as is. */
- intense, /**< Make the color more intense (usually brighter). */
- };
-
- /**
- * @brief The background color modification flag.
- */
- enum struct background_flag : bool
- {
- none, /**< Apply no flag e.g., keep color as is. */
- blink_or_bright, /**< Make the cell blink or more intense, dependent on the VGA configuration */
- };
-
- /**
- * @brief The VGA text mode attribute.
- *
- * In the text mode of VGA, every code point being presented is followed by an attribute description. This allows for
- * the modification of how the relevant "cell" is presented.
- *
- * @see vga::text::foreground_flag
- * @see vga::text::background_flag
- */
- struct attribute
- {
- color foreground_color : 3; /**< The foreground color of the cell, e.g. the color of the code point.*/
- enum foreground_flag foreground_flag : 1; /**< The foreground color modification flag of the cell.*/
- color bacground_color : 3; /**< The background color of the cell.*/
- enum background_flag background_flag : 1; /**< The background color modification flag of the cell.*/
- };
-
- static_assert(sizeof(attribute) == 1, "The VGA text mode attribute must fit inside a single byte.");
-
- /**
- * @brief Commonly used VGA text mode attributes
- */
- namespace common_attributes
- {
- /**
- * @brief Make the affected cell display with a gray foreground and black background.
- */
- [[maybe_unused]] auto constexpr gray_on_black =
- attribute{color::gray, foreground_flag::none, color::black, background_flag::none};
-
- /**
- * @brief Make the affected cell display with a green foreground and black background.
- */
- [[maybe_unused]] auto constexpr green_on_black =
- attribute{color::green, foreground_flag::none, color::black, background_flag::none};
-
- /**
- * @brief Make the affected cell display with a white (gray + intense) foreground and red background.
- */
- [[maybe_unused]] auto constexpr white_on_red =
- attribute{color::gray, foreground_flag::intense, color::red, background_flag::none};
- } // namespace common_attributes
-
- /**
- * @brief Clear the VGA text mode buffer.
- *
- * @note This function also resets the text mode buffer pointer.
- *
- * @param attribute The attribute to "clear" the screen with.
- */
- auto clear(attribute attribute = common_attributes::gray_on_black) -> void;
-
- /**
- * @brief Enable or disable the VGA text mode cursor.
- *
- * @param enabled Whether or not to enable the cursors.
- */
- auto cursor(bool enabled) -> void;
-
- /**
- * @brief Write a string of code points to the VGA text buffer.
- *
- * @note This function also updates the text mode buffer pointer.
- *
- * @param code_points A string of (8-bit) code points to write to the VGA text mode buffer.
- * @param attribute The attribute to apply to the written sequence of code points.
- * @see vga::text::attribute
- */
- auto write(std::string_view code_points, attribute attribute) -> void;
-} // namespace teachos::arch::video::vga::text
-
-#endif \ No newline at end of file
diff --git a/source/arch/x86_64/scripts/kernel.ld b/source/arch/x86_64/scripts/kernel.ld
deleted file mode 100644
index 765a432..0000000
--- a/source/arch/x86_64/scripts/kernel.ld
+++ /dev/null
@@ -1,139 +0,0 @@
-ENTRY(_start)
-
-/*****************************************************************************
- * Virtual and linear start addresses of the TeachOS kernel
- *****************************************************************************/
-TEACHOS_HIGH = -2048M;
-TEACHOS_LOW = 1M;
-
-PHDRS {
- boot_rodata PT_LOAD FLAGS(4);
- boot_text PT_LOAD FLAGS(5);
- boot_data PT_LOAD FLAGS(6);
-
- text PT_LOAD FLAGS(5);
- data PT_LOAD FLAGS(6);
- rodata PT_LOAD FLAGS(4);
-}
-
-SECTIONS
-{
- /***************************************************************************
- * Load the bootstrap code into low memory. We need to be accessible in
- * 32-Bit mode, so we want to live down low, but we need to leave the 1MiB
- * hole open since some BIOS functionality resides below it.
- ***************************************************************************/
- . = TEACHOS_LOW;
-
- /***************************************************************************
- * We want to be able to be able to access all memory (linear and virtual)
- * during bootstrapping and operation. To achieve this, we define some
- * symbols at the beginning.
- ***************************************************************************/
- _start_linear = .;
- _start_virtual = . + TEACHOS_HIGH;
-
- /***************************************************************************
- * The bootstrapping infratructure goes first. We first place the read-only
- * data, followed by our code, initialized mutable data, and finally our
- * uninitialized mutable data.
- ***************************************************************************/
- .boot_rodata :
- {
- KEEP(*(.boot_mbh))
- *(.boot_rodata)
- } :boot_rodata
-
- .boot_text :
- {
- *(.boot_text)
- } :boot_text
-
- .boot_data :
- {
- *(.boot_data)
- } :boot_data
-
- .boot_bss :
- {
- *(.boot_bss)
- *(.boot_stack)
- }
-
- /***************************************************************************
- * Now it is time to load the 64-bit kernel code. We virtually load it into
- * the upper 2GiB, while adjusting the linear load address appropriately. We
- * also make sure to align the loaded data onto a page boundary.
- ***************************************************************************/
- . = ALIGN(4K);
- . += TEACHOS_HIGH;
-
- .init ALIGN(4K) : AT(ADDR (.init) - TEACHOS_HIGH)
- {
- /*
- * Make sure that the crt code is wrapped around the compiler generated
- * initialization code.
- */
- KEEP(*crti.s.obj(.init))
- KEEP(*(EXCLUDE_FILE (*crti.s.obj *crtn.s.obj) .init))
- KEEP(*crtn.s.obj(.init))
- } :text
-
- .fini ALIGN(4K) : AT(ADDR (.fini) - TEACHOS_HIGH)
- {
- /*
- * Make sure that the crt code is wrapped around the compiler generated
- * finalizer code.
- */
- KEEP(*crti.s.obj(.fini))
- KEEP(*(EXCLUDE_FILE (*crti.s.obj *crtn.s.obj) .fini))
- KEEP(*crtn.s.obj(.fini))
- }
-
- .text ALIGN(4K) : AT(ADDR (.text) - TEACHOS_HIGH)
- {
- *(.text*)
- }
-
- .rodata ALIGN(4K) : AT (ADDR (.rodata) - TEACHOS_HIGH)
- {
- *(.rodata)
- *(.rodata.*)
- } :rodata
-
- .ctors ALIGN(4K) : AT (ADDR (.ctors) - TEACHOS_HIGH)
- {
- KEEP(*crtbegin.o(.ctors))
- KEEP(*(EXCLUDE_FILE (*crtend.o) .ctors))
- KEEP(*(SORT(.ctors.*)))
- KEEP(*crtend.o(.ctors))
- } :data
-
- .dtors ALIGN(4K) : AT (ADDR (.dtors) - TEACHOS_HIGH)
- {
- KEEP(*crtbegin.o(.dtors))
- KEEP(*(EXCLUDE_FILE (*crtend.o) .dtors))
- KEEP(*(SORT(.dtors.*)))
- KEEP(*crtend.o(.dtors))
- }
-
- .data ALIGN(4K) : AT (ADDR (.data) - TEACHOS_HIGH)
- {
- *(.data*)
- }
-
- .bss ALIGN(4K) : AT (ADDR (.bss) - TEACHOS_HIGH)
- {
- *(COMMON)
- *(.bss*)
- }
-
- /***************************************************************************
- * In accordance with the symbol definitions at the start, we generate some
- * symbols to mark the end of our loaded image.
- ***************************************************************************/
- _end_virtual = ADDR(.bss) + SIZEOF(.bss);
- _end_linear = _end_virtual - TEACHOS_HIGH;
-
- /DISCARD/ : { *(.comment) }
-}
diff --git a/source/arch/x86_64/src/boot/boot.s b/source/arch/x86_64/src/boot/boot.s
deleted file mode 100644
index 7b4e193..0000000
--- a/source/arch/x86_64/src/boot/boot.s
+++ /dev/null
@@ -1,370 +0,0 @@
-.extern _end_physical
-.extern _init
-.extern kernel_main
-
-
-/**
- * Uninitialized data for the bootstrapping process.
- */
-.section .boot_bss, "aw", @nobits
-.align 4096
-
-/**
- * Reserve space for the page maps we are going to used during startup.
- *
- * Note: We are going to use large pages to make the initial mapping code
- * simpler.
- *
- * We need:
- * - A single PML 4 (since we will only use 4-level paging)
- * - 2 PML 3s (since we need to map high (-2GiB) and low (1+MiB) memory)
- * - 2 PML 2s (since we need to map high (-2GiB) and low (1+MiB) memory)
- */
-
-.global page_map_level_4
-page_map_level_4: .skip 512 * 8
-
-.global page_map_level_3_low
-page_map_level_3_low: .skip 512 * 8
-.global page_map_level_3_high
-page_map_level_3_high: .skip 512 * 8
-
-.global page_map_level_2_low
-page_map_level_2_low: .skip 512 * 8
-.global page_map_level_2_high
-page_map_level_2_high: .skip 512 * 8
-
-/**
- * Reserve some space for the Multiboot 2 information pointer.
- */
-.global multiboot_information_pointer
-multiboot_information_pointer: .skip 4
-
-/**
- * Stack space for the bootstrapping process.
- *
- * Note: We are going to reserve 1 MiB for now. If/when the kernel requires
- * more space to run, it will have to relocate the stack.
- */
-.section .boot_stack, "aw", @nobits
-.align 16
-
-stack_bottom: .skip 1 << 20
-stack_top:
-
-/**
- * Constants for the bootstrapping process.
- */
-.section .boot_rodata, "a", @progbits
-
-/**
- * A valid Global Descriptor Table is still required in long mode. However, we
- * only need a single entry for the "code segment", so we will setup a single
- * segment table below.
- *
- * Bit 43: "E" in the access byte => mark the segment as executable.
- * Bit 44: "S" in the access byte => mark the segment as code or data.
- * Bit 47: "P" in the access byte => mark the segment as being present.
- * Bit 53: "L" in the flags byte => mark the segment as being for long mode
- */
-
-global_descriptor_table: .quad 0
-global_descriptor_table_code = . - global_descriptor_table
-.quad (1<<43) | (1<<44) | (1<<47) | (1<<53)
-
-/**
- * We also need a pointer that we can load into the GDTR.
- *
- * The pointer consists of a word describing the size of the table minus 1 and
- * the pointer to the actual table.
- */
-global_descriptor_table_pointer:
-.word . - global_descriptor_table - 1
-.quad global_descriptor_table
-
-/**
- * We are going to print some messages in case we panic during boot, so we are
- * going to store them here as well
- */
-message_prefix_panic:
-.string "TeachOS Panic: "
-message_not_loaded_by_multiboot2:
-.string "The operating system was not loaded by a Multiboot 2 loader."
-message_cpuid_instruction_no_supported:
-.string "The 'cpuid' instruction is not supported on this platform."
-mesage_long_mode_not_supported:
-.string "Long mode is not supported by this platform."
-
-/**
- * Mutable data for the bootstrapping process.
- */
-.section .boot_data, "aw", @progbits
-
-/**
- * We need a pointer to our current position in the VGA text buffer.
- */
-.global vga_buffer_pointer
-vga_buffer_pointer: .long 0xb8000
-
-/**
- * Code for the bootstrapping process.
- */
-.section .boot_text, "ax", @progbits
-.align 16
-.code32
-
-/**
- * Print a given panic message and then halt the machine.
- *
- * Parameters:
- * - [stack - 0] message: the message to print
- */
-_panic:
- push %ebp
- mov %esp, %ebp
-
- push message_prefix_panic
- push $0x4f
- call _print
- add $8, %esp
-
- push 8(%ebp)
- push 0x4f
- call _print
- add $8, %esp
-
- hlt
-
-/**
- * Print a message via the VGA buffer.
- *
- * Parameters:
- * - [stack - 4] message: the message to print
- * - [stack - 0] color: the color of the message
- */
-_print:
- push %ebp
- mov %esp, %ebp
-
- push %ebx
- push %esi
- mov 8(%ebp), %eax
- mov 12(%ebp), %ebx
- mov $0, %ecx
- mov (vga_buffer_pointer), %esi
-
-.Lprint_loop:
- mov (%ebx, %ecx), %dl
- test %dl, %dl
- je .Lupdate_vga_buffer_address
- mov %dl, (%esi, %ecx, 2)
- mov %al, 1(%esi, %ecx, 2)
- inc %ecx
- jmp .Lprint_loop
-
-.Lupdate_vga_buffer_address:
- shl $1, %ecx
-