From 2e58f85807427d121fe1de80089e602f1f35944b Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Fri, 18 Jul 2025 20:25:14 +0200 Subject: docs: introduce technical briefs Also removes arch and cross inclusion for now, since the architecture is undergoing major rework. --- docs/arch.rst | 9 -- docs/briefs.rst | 9 ++ docs/briefs/tb0001-pic-in-32-bit-x86-assembly.rst | 161 ++++++++++++++++++++++ docs/conf.py | 6 +- docs/cross.rst | 9 -- docs/index.rst | 3 +- docs/requirements.txt | 3 + 7 files changed, 177 insertions(+), 23 deletions(-) delete mode 100644 docs/arch.rst create mode 100644 docs/briefs.rst create mode 100644 docs/briefs/tb0001-pic-in-32-bit-x86-assembly.rst delete mode 100644 docs/cross.rst create mode 100644 docs/requirements.txt (limited to 'docs') diff --git a/docs/arch.rst b/docs/arch.rst deleted file mode 100644 index 495d309..0000000 --- a/docs/arch.rst +++ /dev/null @@ -1,9 +0,0 @@ -Platform-Specific Infrastructure -================================ - -.. toctree:: - :maxdepth: 2 - :caption: Contents: - :glob: - - arch/* diff --git a/docs/briefs.rst b/docs/briefs.rst new file mode 100644 index 0000000..1931345 --- /dev/null +++ b/docs/briefs.rst @@ -0,0 +1,9 @@ +Technical Briefs +================ + +.. toctree:: + :maxdepth: 1 + :caption: Contents: + :glob: + + briefs/* diff --git a/docs/briefs/tb0001-pic-in-32-bit-x86-assembly.rst b/docs/briefs/tb0001-pic-in-32-bit-x86-assembly.rst new file mode 100644 index 0000000..503ff43 --- /dev/null +++ b/docs/briefs/tb0001-pic-in-32-bit-x86-assembly.rst @@ -0,0 +1,161 @@ +Technical Brief 0001: Position-Independent Code (PIC) in 32-bit x86 Assembly for PIE Kernels +============================================================================================ + +The design of a modern x86-64 kernel, compiled as a Position-Independent Executable (PIE), necessitates a 32-bit assembly bootstrap stage for initial hardware setup. +This architectural requirement, however, introduces significant challenges during the linking phase. +A linker error may manifest during this process, presenting the following diagnostic: + +.. code-block:: text + + relocation R_X86_64_32 against symbol `...' can not be used when making a PIE object; recompile with -fPIE + +This error arises despite the explicit use of the ``-fPIE`` compilation flag for the object file in question. +Its occurrence indicates a fundamental incompatibility between the linking model of a PIE and the machine code generated from conventional 32-bit assembly instructions that reference symbolic addresses. +This scenario reveals a critical distinction between compiler-generated position independence and the manual implementation required for hand-written assembly in a mixed-mode, relocatable binary. + +Root Cause Analysis +------------------- + +The cause of this issue is a conflict between the linking model mandated by a Position-Independent Executable and the addressing capabilities inherent to the 32-bit x86 instruction set architecture (ISA). + +- **Position-Independent Executable (PIE) Constraints:** + A PIE is a variant of the Executable and Linkable Format (ELF) [#1]_ designed to be loaded at an arbitrary virtual address and function correctly without modification. + A strict prerequisite for this functionality is the complete absence of absolute virtual addresses within the binary's code and data sections. + Consequently, all internal data and function references must be encoded relative to the instruction pointer. + In the x86-64 ISA, this is typically accomplished through the native ``IP``-relative addressing mode (e.g., ``mov symbol(%rip), %rax``), which generates relocations of type ``R_X86_64_PC32``. + These PC-relative relocations are resolved by the linker based on the distance between the instruction and the symbol, a value that is constant regardless of the final load address. + +- **32-bit Addressing Limitations:** + The 32-bit x86 ISA lacks a native mechanism for instruction-pointer-relative addressing. + When an assembly instruction references a symbol by its name (e.g., ``movl $symbol, %eax``), the assembler's default behavior is to generate a relocation entry of type ``R_X86_64_32``. + This entry serves as a directive for the linker to substitute the symbol's final, 32-bit absolute virtual address into the machine code during the linking phase. + This process fundamentally embeds a hardcoded address into the instruction, making the code position-dependent. + +- **Mismatch:** + During the final link stage, the linker encounters these requests for absolute addresses within the 32-bit object code. + However, the linker's output target is a PIE, a format that explicitly forbids such absolute relocations because they would violate its defining characteristic of being relocatable. + The ``-fPIE`` flag, being a directive for a *compiler*, influences the code generation strategy for high-level languages like C++ but has no semantic effect on hand-written assembly that utilizes instructions which inherently produce absolute address relocations. + The linker, therefore, correctly identifies this violation of the PIE contract and terminates with an error. + +Solution: Runtime Address Calculation +------------------------------------- + +Resolution of this conflict necessitates the manual implementation of position-independent code within the 32-bit assembly module. +The core principle of this technique is the elimination of all instructions that would otherwise generate absolute address relocations. +Instead, the absolute address of any required symbol must be calculated at runtime relative to the current instruction pointer. + +- **The ``call``/``pop`` Idiom:** + The canonical technique for obtaining the value of the 32-bit instruction pointer (``EIP``) involves a ``call`` to the immediately subsequent instruction. + The ``call`` instruction pushes its return address—which is the address of the next instruction—onto the stack. + A ``pop`` instruction can then retrieve this value into a general-purpose register. + + .. code-block:: gas + + call .Lget_eip + .Lget_eip: + popl %ebx + + Upon completion of this sequence, the ``%ebx`` register contains the absolute virtual address of the ``.Lget_eip`` label at runtime. + This address serves as a reliable anchor from which other symbols' addresses can be calculated. + +- **Establishing a Base Register:** + By convention, specifically within the i386 System V ABI, the ``%ebx`` register is designated for this purpose. + It is classified as a "callee-saved" register, which obligates any conforming function to preserve its value across calls. + By establishing ``%ebx`` as a base register at the commencement of the bootstrap sequence, its value can be reliably utilized for all subsequent address calculations within that scope, even after calling external C or C++ functions. + Using a "caller-saved" register like ``%eax`` would be incorrect, as its value would have to be considered invalid after every function call. + +Representative Implementations +------------------------------ + +The subsequent examples provide canonical implementations for converting common position-dependent assembly instructions into their PIE-compliant equivalents. +These examples assume that a base register, ``%ebx``, has been initialized with the current location counter via the ``call``/``pop`` idiom at a label which, for the purpose of these examples, is designated ``.Lbase``. + +Accessing a Symbol's Address +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This pattern is applicable when passing a pointer to a symbol as a function argument. + +- Problematic Code: + + .. code-block:: gas + + pushl $message_prefix_panic + +- PIE-Compatible Solution: + + .. code-block:: gas + + // Calculate the address: base_address + (symbol_address - base_address). + // The term (message_prefix_panic - .Lbase) is a link-time constant offset. + leal (message_prefix_panic - .Lbase)(%ebx), %eax + pushl %eax + +Accessing a Symbol's Content +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This pattern is employed when reading from or writing to a global variable. + +- Problematic Code: + + .. code-block:: gas + + movl (vga_buffer_pointer), %esi + +- PIE-Compatible Solution: + + .. code-block:: gas + + // First, calculate the address of the pointer variable into a register. + leal (vga_buffer_pointer - .Lbase)(%ebx), %edi + // Then, dereference the pointer via the register to access its content. + movl (%edi), %esi + +Complex Addressing Modes +~~~~~~~~~~~~~~~~~~~~~~~~ + +This pattern is frequently used for array access. + +- Problematic Code: + + .. code-block:: gas + + movl %eax, page_map_level_2(,%ecx,8) + +- PIE-Compatible Solution: + + .. code-block:: gas + + // Calculate the base address of the array into a register. + leal (page_map_level_2 - .Lbase)(%ebx), %edx + // Utilize the register as the base in the complex addressing mode. + movl %eax, (%edx, %ecx, 8) + +Far Jumps +~~~~~~~~~ + +This technique is required for critical operations such as loading a new Global Descriptor Table (GDT) and transitioning to 64-bit mode. + +- Problematic Code: + + .. code-block:: gas + + jmp $global_descriptor_table_code, $_transition_to_long_mode + +- PIE-Compatible Solution (using ``lret``): + + .. code-block:: gas + + // Calculate the absolute virtual address of the 64-bit entry point. + leal (_transition_to_long_mode - .Lbase)(%ebx), %eax + + // Push the new segment selector and the calculated address onto the stack. + pushl $global_descriptor_table_code + pushl %eax + + // lret performs a far return, using the values from the stack, + // thereby achieving an indirect, position-independent far jump. + lret + +.. rubric:: References + +.. [#1] M. Matz, J. Hubička, A. Jaeger, and M. Mitchell, “System V Application Binary Interface AMD64 Architecture Processor Supplement Draft Version,” 2012. Available: https://refspecs.linuxfoundation.org/elf/x86_64-abi-0.99.pdf diff --git a/docs/conf.py b/docs/conf.py index 90ed3dc..067c1cf 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -13,7 +13,7 @@ author = "Felix Morgner" # -- General configuration --------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration -extensions = ["breathe"] +#extensions = ["breathe"] templates_path = ["_templates"] exclude_patterns = [] @@ -21,8 +21,8 @@ exclude_patterns = [] # -- Options Breathe --------------------------------------------------------- # https://breathe.readthedocs.io/en/stable/directives.html#config-values -breathe_projects = {"kernel": "../build/doxygen/xml"} -breathe_default_project = "kernel" +#breathe_projects = {"kernel": "../build/doxygen/xml"} +#breathe_default_project = "kernel" # -- Options for HTML output ------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output diff --git a/docs/cross.rst b/docs/cross.rst deleted file mode 100644 index 542d76a..0000000 --- a/docs/cross.rst +++ /dev/null @@ -1,9 +0,0 @@ -Platform-Independent Infrastructure -=================================== - -.. toctree:: - :maxdepth: 2 - :caption: Contents: - :glob: - - cross/* diff --git a/docs/index.rst b/docs/index.rst index e3a749f..649e6de 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -5,8 +5,7 @@ Welcome to TeachOS Kernel's documentation! :maxdepth: 2 :caption: Contents: - arch - cross + briefs Indices and tables ================== diff --git a/docs/requirements.txt b/docs/requirements.txt new file mode 100644 index 0000000..3c3a2e5 --- /dev/null +++ b/docs/requirements.txt @@ -0,0 +1,3 @@ +Sphinx~=8.2.0 +breathe~=4.36.0 +sphinx_book_theme~=1.1.0 -- cgit v1.2.3 From 24a9f628656188d0e6ec4a7537ee758c1a88a847 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Tue, 22 Jul 2025 22:02:22 +0000 Subject: docs: import first draft of tb0002 --- docs/briefs/tb0002-x86_64_bootstrap.rst | 154 ++++++++++++++++++++++++++++++++ docs/requirements.txt | 1 - 2 files changed, 154 insertions(+), 1 deletion(-) create mode 100644 docs/briefs/tb0002-x86_64_bootstrap.rst (limited to 'docs') diff --git a/docs/briefs/tb0002-x86_64_bootstrap.rst b/docs/briefs/tb0002-x86_64_bootstrap.rst new file mode 100644 index 0000000..b7a6c2a --- /dev/null +++ b/docs/briefs/tb0002-x86_64_bootstrap.rst @@ -0,0 +1,154 @@ +Technical Brief 0002: x86-64 Bootstrap Subsystem +================================================ + +System Requirements and Constraints +----------------------------------- + +The design of a clean-slate, C++23-based operating system kernel necessitates a low-level bootstrap subsystem. +This subsystem manages the transition from the machine's power-on state to a controlled 64-bit execution environment. +It must operate under several architectural and toolchain constraints: + +1. **Bootloader Conformance:** The kernel is loaded by a bootloader adhering to the Multiboot2 Specification. + This conformance establishes a critical contract between the bootloader and the kernel. + The bootstrap code must therefore correctly identify the Multiboot2 magic number (``0x36d76289``) passed in the ``%eax`` register. + It must also interpret the pointer to the boot information structure passed in ``%ebx`` [1]_. + Adhering to this standard decouples the kernel from any specific bootloader implementation, ensuring portability across compliant environments like GRUB 2. + +2. **CPU Mode Transition:** The CPU is assumed to be in 32-bit protected mode upon entry to the bootstrap code. + The subsystem is responsible for all requisite steps to enable 64-bit long mode. + This is a non-trivial process. + It involves enabling Physical Address Extension (PAE) via the ``%cr4`` control register, setting the Long Mode Enable (LME) bit in the Extended Feature Enable Register (EFER) MSR (``0xC0000080``), and finally enabling paging via the ``%cr0`` control register. + +3. **Position-Independent Executable (PIE):** The kernel is compiled and linked as a PIE to allow it to be loaded at an arbitrary physical address. + This imposes a strict constraint on the 32-bit assembly code: it must not contain any absolute address relocations. + While a C++ compiler can generate position-independent code automatically, in hand-written assembly this requires the manual calculation of all symbol addresses at runtime. + This is a significant departure from simpler, absolute-addressed code. + +Architectural Overview +---------------------- + +The bootstrap architecture is partitioned into three distinct components. +This enforces a modular and verifiable transition sequence. +The components are: a shared C++/assembly interface (``boot.hpp``), a 32-bit PIE transition stage (``boot32.S``), and a minimal 64-bit entry stage (``entry64.s``). +This separation is a deliberate design choice to manage complexity. +It ensures that mode-specific logic is isolated, preventing subtle bugs that could arise from mixing 32-bit and 64-bit concerns. +Furthermore, it makes the state transition between each stage explicit and auditable. +This is critical for both debugging and for the educational utility of the codebase. + +Component Analysis +------------------ + +C++/Assembly Interface (``boot.hpp``) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +A single header file serves as the definitive interface between assembly code and C++. +This is achieved through the use of the ``__ASSEMBLER__`` preprocessor macro. +This is a standard feature of the GNU toolchain that allows a single file to serve a dual purpose. + +* **Shared Constants:** The header defines all magic numbers (e.g., ``MULTIBOOT2_MAGIC``), GDT flags, and other constants required by both the assembly and C++ code. + This ensures a single source of truth, eliminating the risk of inconsistencies that could arise from maintaining parallel definitions in different language domains. + +* **Conditional Declarations:** C++-specific declarations, such as ``extern "C"`` variable declarations using the ``teachos::arch::asm_pointer`` wrapper, are confined within an ``#ifndef __ASSEMBLER__`` block. + This prevents the assembler from attempting to parse C++ syntax—which would result in a compilation error—while making the full, type-safe interface available to the C++ compiler. + The ``asm_pointer`` class is particularly important. + It encapsulates a raw address and prevents its unsafe use as a standard pointer within C++, forcing any interaction to be explicit and controlled. + +32-bit Transition Stage (``boot32.S``) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This file contains all code and data necessary to prepare the system for long mode. +Its logic is fundamentally incompatible with the 64-bit environment due to differences in stack width, calling conventions, and instruction encoding. + +* **Position-Independent Execution (PIE):** The 32-bit x86 ISA lacks a native instruction-pointer-relative addressing mode. + To satisfy the PIE constraint, all symbol addresses are calculated at runtime. + This is achieved via the ``call/pop`` idiom to retrieve the value of the instruction pointer (``%eip``) into a base register (``%esi``). + All subsequent memory accesses are then performed by calculating a link-time constant offset from this runtime base (e.g., ``leal (symbol - .Lbase)(%esi), %eax``). + This manual implementation of position independence is critical to avoid linker errors related to absolute relocations (``R_X86_64_32``) in a PIE binary. + +* **System State Verification:** The first actions are a series of assertions. + The code first verifies the Multiboot2 magic number (``0x36d76289``) passed in ``%eax`` [1]_. + It then uses the ``CPUID`` instruction to verify that the processor supports long mode. + This is done by checking for the LM bit (bit 29) in ``%edx`` after executing ``CPUID`` with ``0x80000001`` in ``%eax`` [2]_. + Failure of any assertion results in a call to a panic routine that halts the system. + This "fail-fast" approach is crucial; proceeding in an unsupported environment would lead to unpredictable and difficult-to-debug faults deep within the kernel. + +* **Formal Transition via ``lret``:** The stage concludes with a ``lret`` (long return) instruction. + This is the architecturally mandated method for performing an inter-segment control transfer. + This is required to load a new code segment selector and change the CPU's execution mode. + A simple ``jmp`` is insufficient as it cannot change the execution mode. + The choice of ``lret`` over other far-control transfer instructions like ``ljmp`` or ``lcall`` is a direct consequence of the PIE constraint. + The direct forms of ``ljmp`` and ``lcall`` require their target address to be a link-time constant. + This would embed an absolute address into the executable and violate the principles of position independence. + In contrast, ``lret`` consumes its target selector and offset from the stack. + This mechanism is perfectly suited for a PIE environment. + It allows for a dynamically calculated, position-independent address to be pushed onto the stack immediately before the instruction is executed. + Furthermore, ``lcall`` is architecturally inappropriate. + It would push a 32-bit return address onto the stack before the mode switch, corrupting the 64-bit stack frame for a transition that should be strictly one-way. + ``lret`` correctly models this one-way transfer and is therefore the only viable and clean option. + +64-bit Entry Stage (``entry64.s``) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This file provides a minimal, clean entry point into the 64-bit world. +It ensures the C++ kernel begins execution in a pristine environment. + +* **Final State Setup:** Its sole responsibilities are to initialize the 64-bit data segment registers (``%ss``, ``%ds``, etc.) with the correct selector from the new GDT. + It then transfers control to the C++ kernel's ``main`` function via a standard ``call``. + Setting the segment registers is the first action performed. + Any memory access in 64-bit mode—including the stack operations performed by the subsequent ``call``—depends on these selectors being valid. + Failure to do so would result in a general protection fault. + +* **Halt State:** Should ``main`` ever return—an event that signifies a critical kernel failure—execution falls through to an infinite ``hlt`` loop. + This is a crucial fail-safe. + It prevents the CPU from executing beyond the end of the kernel's code, which would lead to unpredictable behavior as the CPU attempts to interpret non-executable data as instructions. + +Key Implementation Decisions +---------------------------- + +``lret`` Stack Frame Construction +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The transition to 64-bit mode is initiated by executing an ``lret`` instruction from 32-bit protected mode. +The behavior of this instruction is determined by the characteristics of the destination code segment descriptor referenced by the selector on the stack. + +The stack is prepared as follows: + +1. ``leal (_entry64 - .Lbase)(%esi), %eax``: The PIE-compatible virtual address of the 64-bit entry point is calculated and placed in ``%eax``. + +2. ``pushl $global_descriptor_table_code``: The 16-bit selector for the 64-bit code segment is pushed onto the stack as a 32-bit value. + +3. ``pushl %eax``: The 32-bit address of the entry point is pushed onto the stack. + +When ``lret`` is executed in 32-bit mode, it pops a 32-bit instruction pointer and a 16-bit code selector from the stack [3]_. +The processor then examines the GDT descriptor referenced by the new code selector. +Because this descriptor has its L-bit (Long Mode) set to 1, the processor transitions into 64-bit long mode. +It then begins executing at the 64-bit address specified by the popped instruction pointer [2]_. + +Memory Virtualization and GDT +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +A four-level page table hierarchy (PML4) is constructed to enable paging, a prerequisite for long mode. +An initial identity map of 32 MiB of physical memory is created using 2 MiB huge pages. +This reduces the number of required page table entries for the initial kernel image. +A recursive mapping in the PML4 at a conventional index (511) is also established. +This powerful technique allows the C++ kernel's memory manager to access and modify the entire page table hierarchy as if it were a linear array at a single, well-known virtual address. +This greatly simplifies the logic required for virtual memory operations. + +A new GDT is defined containing the necessary null, 64-bit code, and 64-bit data descriptors. +The first entry in the GDT must be a null descriptor, as the processor architecture reserves selector value 0 as a special "null selector." +Loading a segment register with this null selector is valid. +However, any subsequent memory access using it (with the exception of CS or SS) will generate a general-protection exception. +This provides a fail-safe mechanism against the use of uninitialized segment selectors [2]_. +The selector for the data descriptor is exported as a global symbol (``global_descriptor_table_data``). +This design choice was made to prioritize explicitness and debuggability. +The dependency is clearly visible in the source code, over the alternative of passing the selector value in a register. +This would create an implicit, less obvious contract between the two stages that could complicate future maintenance. + +References +---------- + +.. [1] Free Software Foundation, "The Multiboot2 Specification, version 2.0," Free Software Foundation, Inc., 2016. `Online `_. + +.. [2] Intel Corporation, *Intel® 64 and IA-32 Architectures Software Developer’s Manual, Combined Volumes 1, 2A, 2B, 2C, 2D, 3A, 3B, 3C, 3D and 4*, Order No. 325462-081US, July 2025. `Online `_. + +.. [3] AMD, Inc., *AMD64 Architecture Programmer’s Manual, Volume 3: General-Purpose and System Instructions*, Publication No. 24594, Rev. 3.42, June 2025. `Online `_. diff --git a/docs/requirements.txt b/docs/requirements.txt index 3c3a2e5..733e873 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,3 +1,2 @@ Sphinx~=8.2.0 -breathe~=4.36.0 sphinx_book_theme~=1.1.0 -- cgit v1.2.3 From feac668578a35aac280b59d478a57b6937bb68da Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Thu, 24 Jul 2025 16:39:43 +0000 Subject: docs: move files out of the way --- docs/arch/x86_64.rst | 9 --------- docs/arch/x86_64/boot.rst | 9 --------- docs/arch/x86_64/boot/pointers.rst | 5 ----- docs/arch/x86_64/context_switching.rst | 9 --------- .../x86_64/context_switching/interrupt_descriptor_table.rst | 9 --------- .../interrupt_descriptor_table/gate_descriptor.rst | 5 ----- .../interrupt_descriptor_table/idt_flags.rst | 5 ----- .../interrupt_descriptor_table copy.rst | 5 ----- .../interrupt_descriptor_table_pointer copy.rst | 5 ----- .../interrupt_descriptor_table/ist_offset.rst | 5 ----- .../interrupt_descriptor_table/segment_selector.rst | 5 ----- docs/arch/x86_64/context_switching/main.rst | 5 ----- .../x86_64/context_switching/segment_descriptor_table.rst | 9 --------- .../segment_descriptor_table/access_byte.rst | 5 ----- .../context_switching/segment_descriptor_table/gdt_flags.rst | 5 ----- .../segment_descriptor_table/global_descriptor_table.rst | 5 ----- .../global_descriptor_table_pointer.rst | 5 ----- .../segment_descriptor_table/segment_descriptor_base.rst | 5 ----- .../segment_descriptor_table/segment_descriptor_extension.rst | 5 ----- .../segment_descriptor_table/segment_descriptor_type.rst | 5 ----- .../segment_descriptor_table/task_state_segment.rst | 5 ----- docs/arch/x86_64/context_switching/syscall.rst | 9 --------- docs/arch/x86_64/context_switching/syscall/main.rst | 5 ----- docs/arch/x86_64/context_switching/syscall/syscall_enable.rst | 5 ----- .../arch/x86_64/context_switching/syscall/syscall_handler.rst | 5 ----- docs/arch/x86_64/exception_handling.rst | 9 --------- docs/arch/x86_64/exception_handling/assert.rst | 5 ----- docs/arch/x86_64/exception_handling/panic.rst | 5 ----- docs/arch/x86_64/interrupt_handling.rst | 9 --------- .../x86_64/interrupt_handling/generic_interrupt_handler.rst | 5 ----- docs/arch/x86_64/io.rst | 9 --------- docs/arch/x86_64/io/port_io.rst | 6 ------ docs/arch/x86_64/kernel.rst | 9 --------- docs/arch/x86_64/kernel/cpu.rst | 9 --------- docs/arch/x86_64/kernel/cpu/call.rst | 5 ----- docs/arch/x86_64/kernel/cpu/control_register.rst | 5 ----- docs/arch/x86_64/kernel/cpu/gdtr.rst | 5 ----- docs/arch/x86_64/kernel/cpu/idtr.rst | 5 ----- docs/arch/x86_64/kernel/cpu/if.rst | 5 ----- docs/arch/x86_64/kernel/cpu/msr.rst | 5 ----- docs/arch/x86_64/kernel/cpu/segment_register.rst | 5 ----- docs/arch/x86_64/kernel/cpu/tlb.rst | 5 ----- docs/arch/x86_64/kernel/cpu/tr.rst | 5 ----- docs/arch/x86_64/kernel/halt.rst | 5 ----- docs/arch/x86_64/kernel/main.rst | 5 ----- docs/arch/x86_64/memory.rst | 9 --------- docs/arch/x86_64/memory/allocator.rst | 9 --------- docs/arch/x86_64/memory/allocator/area_frame_allocator.rst | 5 ----- docs/arch/x86_64/memory/allocator/concept.rst | 5 ----- docs/arch/x86_64/memory/allocator/physical_frame.rst | 5 ----- docs/arch/x86_64/memory/allocator/tiny_frame_allocator.rst | 5 ----- docs/arch/x86_64/memory/cpu.rst | 9 --------- docs/arch/x86_64/memory/heap.rst | 9 --------- docs/arch/x86_64/memory/heap/bump_allocator.rst | 5 ----- docs/arch/x86_64/memory/heap/global_heap_allocator.rst | 5 ----- docs/arch/x86_64/memory/heap/heap_allocator.rst | 5 ----- docs/arch/x86_64/memory/heap/linked_list_allocator.rst | 5 ----- docs/arch/x86_64/memory/heap/memory_block.rst | 5 ----- docs/arch/x86_64/memory/heap/user_heap_allocator.rst | 5 ----- docs/arch/x86_64/memory/main.rst | 5 ----- docs/arch/x86_64/memory/multiboot.rst | 9 --------- docs/arch/x86_64/memory/multiboot/elf_symbols_section.rst | 5 ----- docs/arch/x86_64/memory/multiboot/info.rst | 5 ----- docs/arch/x86_64/memory/multiboot/memory_map.rst | 5 ----- docs/arch/x86_64/memory/multiboot/reader.rst | 5 ----- docs/arch/x86_64/memory/paging.rst | 9 --------- docs/arch/x86_64/memory/paging/active_page_table.rst | 5 ----- docs/arch/x86_64/memory/paging/inactive_page_table.rst | 5 ----- docs/arch/x86_64/memory/paging/kernel_mapper.rst | 5 ----- docs/arch/x86_64/memory/paging/page_entry.rst | 5 ----- docs/arch/x86_64/memory/paging/page_table.rst | 5 ----- docs/arch/x86_64/memory/paging/temporary_page.rst | 5 ----- docs/arch/x86_64/memory/paging/virtual_page.rst | 5 ----- docs/arch/x86_64/stl.rst | 9 --------- docs/arch/x86_64/stl/container.rst | 5 ----- docs/arch/x86_64/stl/contiguous_pointer_iterator.rst | 5 ----- docs/arch/x86_64/stl/forward_value_iterator.rst | 5 ----- docs/arch/x86_64/stl/mutex.rst | 5 ----- docs/arch/x86_64/stl/shared_pointer.rst | 5 ----- docs/arch/x86_64/stl/stack.rst | 5 ----- docs/arch/x86_64/stl/unique_pointer.rst | 5 ----- docs/arch/x86_64/stl/vector.rst | 5 ----- docs/arch/x86_64/user.rst | 9 --------- docs/arch/x86_64/user/main.rst | 5 ----- docs/arch/x86_64/video.rst | 9 --------- docs/arch/x86_64/video/vga.rst | 9 --------- docs/arch/x86_64/video/vga/io.rst | 4 ---- docs/arch/x86_64/video/vga/text.rst | 5 ----- docs/conf.py | 2 +- docs/cross/memory.rst | 11 ----------- docs/cross/memory/asm_pointer.rst | 10 ---------- docs/pre/arch/x86_64.rst | 9 +++++++++ docs/pre/arch/x86_64/boot.rst | 9 +++++++++ docs/pre/arch/x86_64/boot/pointers.rst | 5 +++++ docs/pre/arch/x86_64/context_switching.rst | 9 +++++++++ .../x86_64/context_switching/interrupt_descriptor_table.rst | 9 +++++++++ .../interrupt_descriptor_table/gate_descriptor.rst | 5 +++++ .../interrupt_descriptor_table/idt_flags.rst | 5 +++++ .../interrupt_descriptor_table copy.rst | 5 +++++ .../interrupt_descriptor_table_pointer copy.rst | 5 +++++ .../interrupt_descriptor_table/ist_offset.rst | 5 +++++ .../interrupt_descriptor_table/segment_selector.rst | 5 +++++ docs/pre/arch/x86_64/context_switching/main.rst | 5 +++++ .../x86_64/context_switching/segment_descriptor_table.rst | 9 +++++++++ .../segment_descriptor_table/access_byte.rst | 5 +++++ .../context_switching/segment_descriptor_table/gdt_flags.rst | 5 +++++ .../segment_descriptor_table/global_descriptor_table.rst | 5 +++++ .../global_descriptor_table_pointer.rst | 5 +++++ .../segment_descriptor_table/segment_descriptor_base.rst | 5 +++++ .../segment_descriptor_table/segment_descriptor_extension.rst | 5 +++++ .../segment_descriptor_table/segment_descriptor_type.rst | 5 +++++ .../segment_descriptor_table/task_state_segment.rst | 5 +++++ docs/pre/arch/x86_64/context_switching/syscall.rst | 9 +++++++++ docs/pre/arch/x86_64/context_switching/syscall/main.rst | 5 +++++ .../arch/x86_64/context_switching/syscall/syscall_enable.rst | 5 +++++ .../arch/x86_64/context_switching/syscall/syscall_handler.rst | 5 +++++ docs/pre/arch/x86_64/exception_handling.rst | 9 +++++++++ docs/pre/arch/x86_64/exception_handling/assert.rst | 5 +++++ docs/pre/arch/x86_64/exception_handling/panic.rst | 5 +++++ docs/pre/arch/x86_64/interrupt_handling.rst | 9 +++++++++ .../x86_64/interrupt_handling/generic_interrupt_handler.rst | 5 +++++ docs/pre/arch/x86_64/io.rst | 9 +++++++++ docs/pre/arch/x86_64/io/port_io.rst | 6 ++++++ docs/pre/arch/x86_64/kernel.rst | 9 +++++++++ docs/pre/arch/x86_64/kernel/cpu.rst | 9 +++++++++ docs/pre/arch/x86_64/kernel/cpu/call.rst | 5 +++++ docs/pre/arch/x86_64/kernel/cpu/control_register.rst | 5 +++++ docs/pre/arch/x86_64/kernel/cpu/gdtr.rst | 5 +++++ docs/pre/arch/x86_64/kernel/cpu/idtr.rst | 5 +++++ docs/pre/arch/x86_64/kernel/cpu/if.rst | 5 +++++ docs/pre/arch/x86_64/kernel/cpu/msr.rst | 5 +++++ docs/pre/arch/x86_64/kernel/cpu/segment_register.rst | 5 +++++ docs/pre/arch/x86_64/kernel/cpu/tlb.rst | 5 +++++ docs/pre/arch/x86_64/kernel/cpu/tr.rst | 5 +++++ docs/pre/arch/x86_64/kernel/halt.rst | 5 +++++ docs/pre/arch/x86_64/kernel/main.rst | 5 +++++ docs/pre/arch/x86_64/memory.rst | 9 +++++++++ docs/pre/arch/x86_64/memory/allocator.rst | 9 +++++++++ .../pre/arch/x86_64/memory/allocator/area_frame_allocator.rst | 5 +++++ docs/pre/arch/x86_64/memory/allocator/concept.rst | 5 +++++ docs/pre/arch/x86_64/memory/allocator/physical_frame.rst | 5 +++++ .../pre/arch/x86_64/memory/allocator/tiny_frame_allocator.rst | 5 +++++ docs/pre/arch/x86_64/memory/cpu.rst | 9 +++++++++ docs/pre/arch/x86_64/memory/heap.rst | 9 +++++++++ docs/pre/arch/x86_64/memory/heap/bump_allocator.rst | 5 +++++ docs/pre/arch/x86_64/memory/heap/global_heap_allocator.rst | 5 +++++ docs/pre/arch/x86_64/memory/heap/heap_allocator.rst | 5 +++++ docs/pre/arch/x86_64/memory/heap/linked_list_allocator.rst | 5 +++++ docs/pre/arch/x86_64/memory/heap/memory_block.rst | 5 +++++ docs/pre/arch/x86_64/memory/heap/user_heap_allocator.rst | 5 +++++ docs/pre/arch/x86_64/memory/main.rst | 5 +++++ docs/pre/arch/x86_64/memory/multiboot.rst | 9 +++++++++ docs/pre/arch/x86_64/memory/multiboot/elf_symbols_section.rst | 5 +++++ docs/pre/arch/x86_64/memory/multiboot/info.rst | 5 +++++ docs/pre/arch/x86_64/memory/multiboot/memory_map.rst | 5 +++++ docs/pre/arch/x86_64/memory/multiboot/reader.rst | 5 +++++ docs/pre/arch/x86_64/memory/paging.rst | 9 +++++++++ docs/pre/arch/x86_64/memory/paging/active_page_table.rst | 5 +++++ docs/pre/arch/x86_64/memory/paging/inactive_page_table.rst | 5 +++++ docs/pre/arch/x86_64/memory/paging/kernel_mapper.rst | 5 +++++ docs/pre/arch/x86_64/memory/paging/page_entry.rst | 5 +++++ docs/pre/arch/x86_64/memory/paging/page_table.rst | 5 +++++ docs/pre/arch/x86_64/memory/paging/temporary_page.rst | 5 +++++ docs/pre/arch/x86_64/memory/paging/virtual_page.rst | 5 +++++ docs/pre/arch/x86_64/stl.rst | 9 +++++++++ docs/pre/arch/x86_64/stl/container.rst | 5 +++++ docs/pre/arch/x86_64/stl/contiguous_pointer_iterator.rst | 5 +++++ docs/pre/arch/x86_64/stl/forward_value_iterator.rst | 5 +++++ docs/pre/arch/x86_64/stl/mutex.rst | 5 +++++ docs/pre/arch/x86_64/stl/shared_pointer.rst | 5 +++++ docs/pre/arch/x86_64/stl/stack.rst | 5 +++++ docs/pre/arch/x86_64/stl/unique_pointer.rst | 5 +++++ docs/pre/arch/x86_64/stl/vector.rst | 5 +++++ docs/pre/arch/x86_64/user.rst | 9 +++++++++ docs/pre/arch/x86_64/user/main.rst | 5 +++++ docs/pre/arch/x86_64/video.rst | 9 +++++++++ docs/pre/arch/x86_64/video/vga.rst | 9 +++++++++ docs/pre/arch/x86_64/video/vga/io.rst | 4 ++++ docs/pre/arch/x86_64/video/vga/text.rst | 5 +++++ docs/pre/cross/memory.rst | 11 +++++++++++ docs/pre/cross/memory/asm_pointer.rst | 10 ++++++++++ 181 files changed, 546 insertions(+), 546 deletions(-) delete mode 100644 docs/arch/x86_64.rst delete mode 100644 docs/arch/x86_64/boot.rst delete mode 100644 docs/arch/x86_64/boot/pointers.rst delete mode 100644 docs/arch/x86_64/context_switching.rst delete mode 100644 docs/arch/x86_64/context_switching/interrupt_descriptor_table.rst delete mode 100644 docs/arch/x86_64/context_switching/interrupt_descriptor_table/gate_descriptor.rst delete mode 100644 docs/arch/x86_64/context_switching/interrupt_descriptor_table/idt_flags.rst delete mode 100644 docs/arch/x86_64/context_switching/interrupt_descriptor_table/interrupt_descriptor_table copy.rst delete mode 100644 docs/arch/x86_64/context_switching/interrupt_descriptor_table/interrupt_descriptor_table_pointer copy.rst delete mode 100644 docs/arch/x86_64/context_switching/interrupt_descriptor_table/ist_offset.rst delete mode 100644 docs/arch/x86_64/context_switching/interrupt_descriptor_table/segment_selector.rst delete mode 100644 docs/arch/x86_64/context_switching/main.rst delete mode 100644 docs/arch/x86_64/context_switching/segment_descriptor_table.rst delete mode 100644 docs/arch/x86_64/context_switching/segment_descriptor_table/access_byte.rst delete mode 100644 docs/arch/x86_64/context_switching/segment_descriptor_table/gdt_flags.rst delete mode 100644 docs/arch/x86_64/context_switching/segment_descriptor_table/global_descriptor_table.rst delete mode 100644 docs/arch/x86_64/context_switching/segment_descriptor_table/global_descriptor_table_pointer.rst delete mode 100644 docs/arch/x86_64/context_switching/segment_descriptor_table/segment_descriptor_base.rst delete mode 100644 docs/arch/x86_64/context_switching/segment_descriptor_table/segment_descriptor_extension.rst delete mode 100644 docs/arch/x86_64/context_switching/segment_descriptor_table/segment_descriptor_type.rst delete mode 100644 docs/arch/x86_64/context_switching/segment_descriptor_table/task_state_segment.rst delete mode 100644 docs/arch/x86_64/context_switching/syscall.rst delete mode 100644 docs/arch/x86_64/context_switching/syscall/main.rst delete mode 100644 docs/arch/x86_64/context_switching/syscall/syscall_enable.rst delete mode 100644 docs/arch/x86_64/context_switching/syscall/syscall_handler.rst delete mode 100644 docs/arch/x86_64/exception_handling.rst delete mode 100644 docs/arch/x86_64/exception_handling/assert.rst delete mode 100644 docs/arch/x86_64/exception_handling/panic.rst delete mode 100644 docs/arch/x86_64/interrupt_handling.rst delete mode 100644 docs/arch/x86_64/interrupt_handling/generic_interrupt_handler.rst delete mode 100644 docs/arch/x86_64/io.rst delete mode 100644 docs/arch/x86_64/io/port_io.rst delete mode 100644 docs/arch/x86_64/kernel.rst delete mode 100644 docs/arch/x86_64/kernel/cpu.rst delete mode 100644 docs/arch/x86_64/kernel/cpu/call.rst delete mode 100644 docs/arch/x86_64/kernel/cpu/control_register.rst delete mode 100644 docs/arch/x86_64/kernel/cpu/gdtr.rst delete mode 100644 docs/arch/x86_64/kernel/cpu/idtr.rst delete mode 100644 docs/arch/x86_64/kernel/cpu/if.rst delete mode 100644 docs/arch/x86_64/kernel/cpu/msr.rst delete mode 100644 docs/arch/x86_64/kernel/cpu/segment_register.rst delete mode 100644 docs/arch/x86_64/kernel/cpu/tlb.rst delete mode 100644 docs/arch/x86_64/kernel/cpu/tr.rst delete mode 100644 docs/arch/x86_64/kernel/halt.rst delete mode 100644 docs/arch/x86_64/kernel/main.rst delete mode 100644 docs/arch/x86_64/memory.rst delete mode 100644 docs/arch/x86_64/memory/allocator.rst delete mode 100644 docs/arch/x86_64/memory/allocator/area_frame_allocator.rst delete mode 100644 docs/arch/x86_64/memory/allocator/concept.rst delete mode 100644 docs/arch/x86_64/memory/allocator/physical_frame.rst delete mode 100644 docs/arch/x86_64/memory/allocator/tiny_frame_allocator.rst delete mode 100644 docs/arch/x86_64/memory/cpu.rst delete mode 100644 docs/arch/x86_64/memory/heap.rst delete mode 100644 docs/arch/x86_64/memory/heap/bump_allocator.rst delete mode 100644 docs/arch/x86_64/memory/heap/global_heap_allocator.rst delete mode 100644 docs/arch/x86_64/memory/heap/heap_allocator.rst delete mode 100644 docs/arch/x86_64/memory/heap/linked_list_allocator.rst delete mode 100644 docs/arch/x86_64/memory/heap/memory_block.rst delete mode 100644 docs/arch/x86_64/memory/heap/user_heap_allocator.rst delete mode 100644 docs/arch/x86_64/memory/main.rst delete mode 100644 docs/arch/x86_64/memory/multiboot.rst delete mode 100644 docs/arch/x86_64/memory/multiboot/elf_symbols_section.rst delete mode 100644 docs/arch/x86_64/memory/multiboot/info.rst delete mode 100644 docs/arch/x86_64/memory/multiboot/memory_map.rst delete mode 100644 docs/arch/x86_64/memory/multiboot/reader.rst delete mode 100644 docs/arch/x86_64/memory/paging.rst delete mode 100644 docs/arch/x86_64/memory/paging/active_page_table.rst delete mode 100644 docs/arch/x86_64/memory/paging/inactive_page_table.rst delete mode 100644 docs/arch/x86_64/memory/paging/kernel_mapper.rst delete mode 100644 docs/arch/x86_64/memory/paging/page_entry.rst delete mode 100644 docs/arch/x86_64/memory/paging/page_table.rst delete mode 100644 docs/arch/x86_64/memory/paging/temporary_page.rst delete mode 100644 docs/arch/x86_64/memory/paging/virtual_page.rst delete mode 100644 docs/arch/x86_64/stl.rst delete mode 100644 docs/arch/x86_64/stl/container.rst delete mode 100644 docs/arch/x86_64/stl/contiguous_pointer_iterator.rst delete mode 100644 docs/arch/x86_64/stl/forward_value_iterator.rst delete mode 100644 docs/arch/x86_64/stl/mutex.rst delete mode 100644 docs/arch/x86_64/stl/shared_pointer.rst delete mode 100644 docs/arch/x86_64/stl/stack.rst delete mode 100644 docs/arch/x86_64/stl/unique_pointer.rst delete mode 100644 docs/arch/x86_64/stl/vector.rst delete mode 100644 docs/arch/x86_64/user.rst delete mode 100644 docs/arch/x86_64/user/main.rst delete mode 100644 docs/arch/x86_64/video.rst delete mode 100644 docs/arch/x86_64/video/vga.rst delete mode 100644 docs/arch/x86_64/video/vga/io.rst delete mode 100644 docs/arch/x86_64/video/vga/text.rst delete mode 100644 docs/cross/memory.rst delete mode 100644 docs/cross/memory/asm_pointer.rst create mode 100644 docs/pre/arch/x86_64.rst create mode 100644 docs/pre/arch/x86_64/boot.rst create mode 100644 docs/pre/arch/x86_64/boot/pointers.rst create mode 100644 docs/pre/arch/x86_64/context_switching.rst create mode 100644 docs/pre/arch/x86_64/context_switching/interrupt_descriptor_table.rst create mode 100644 docs/pre/arch/x86_64/context_switching/interrupt_descriptor_table/gate_descriptor.rst create mode 100644 docs/pre/arch/x86_64/context_switching/interrupt_descriptor_table/idt_flags.rst create mode 100644 docs/pre/arch/x86_64/context_switching/interrupt_descriptor_table/interrupt_descriptor_table copy.rst create mode 100644 docs/pre/arch/x86_64/context_switching/interrupt_descriptor_table/interrupt_descriptor_table_pointer copy.rst create mode 100644 docs/pre/arch/x86_64/context_switching/interrupt_descriptor_table/ist_offset.rst create mode 100644 docs/pre/arch/x86_64/context_switching/interrupt_descriptor_table/segment_selector.rst create mode 100644 docs/pre/arch/x86_64/context_switching/main.rst create mode 100644 docs/pre/arch/x86_64/context_switching/segment_descriptor_table.rst create mode 100644 docs/pre/arch/x86_64/context_switching/segment_descriptor_table/access_byte.rst create mode 100644 docs/pre/arch/x86_64/context_switching/segment_descriptor_table/gdt_flags.rst create mode 100644 docs/pre/arch/x86_64/context_switching/segment_descriptor_table/global_descriptor_table.rst create mode 100644 docs/pre/arch/x86_64/context_switching/segment_descriptor_table/global_descriptor_table_pointer.rst create mode 100644 docs/pre/arch/x86_64/context_switching/segment_descriptor_table/segment_descriptor_base.rst create mode 100644 docs/pre/arch/x86_64/context_switching/segment_descriptor_table/segment_descriptor_extension.rst create mode 100644 docs/pre/arch/x86_64/context_switching/segment_descriptor_table/segment_descriptor_type.rst create mode 100644 docs/pre/arch/x86_64/context_switching/segment_descriptor_table/task_state_segment.rst create mode 100644 docs/pre/arch/x86_64/context_switching/syscall.rst create mode 100644 docs/pre/arch/x86_64/context_switching/syscall/main.rst create mode 100644 docs/pre/arch/x86_64/context_switching/syscall/syscall_enable.rst create mode 100644 docs/pre/arch/x86_64/context_switching/syscall/syscall_handler.rst create mode 100644 docs/pre/arch/x86_64/exception_handling.rst create mode 100644 docs/pre/arch/x86_64/exception_handling/assert.rst create mode 100644 docs/pre/arch/x86_64/exception_handling/panic.rst create mode 100644 docs/pre/arch/x86_64/interrupt_handling.rst create mode 100644 docs/pre/arch/x86_64/interrupt_handling/generic_interrupt_handler.rst create mode 100644 docs/pre/arch/x86_64/io.rst create mode 100644 docs/pre/arch/x86_64/io/port_io.rst create mode 100644 docs/pre/arch/x86_64/kernel.rst create mode 100644 docs/pre/arch/x86_64/kernel/cpu.rst create mode 100644 docs/pre/arch/x86_64/kernel/cpu/call.rst create mode 100644 docs/pre/arch/x86_64/kernel/cpu/control_register.rst create mode 100644 docs/pre/arch/x86_64/kernel/cpu/gdtr.rst create mode 100644 docs/pre/arch/x86_64/kernel/cpu/idtr.rst create mode 100644 docs/pre/arch/x86_64/kernel/cpu/if.rst create mode 100644 docs/pre/arch/x86_64/kernel/cpu/msr.rst create mode 100644 docs/pre/arch/x86_64/kernel/cpu/segment_register.rst create mode 100644 docs/pre/arch/x86_64/kernel/cpu/tlb.rst create mode 100644 docs/pre/arch/x86_64/kernel/cpu/tr.rst create mode 100644 docs/pre/arch/x86_64/kernel/halt.rst create mode 100644 docs/pre/arch/x86_64/kernel/main.rst create mode 100644 docs/pre/arch/x86_64/memory.rst create mode 100644 docs/pre/arch/x86_64/memory/allocator.rst create mode 100644 docs/pre/arch/x86_64/memory/allocator/area_frame_allocator.rst create mode 100644 docs/pre/arch/x86_64/memory/allocator/concept.rst create mode 100644 docs/pre/arch/x86_64/memory/allocator/physical_frame.rst create mode 100644 docs/pre/arch/x86_64/memory/allocator/tiny_frame_allocator.rst create mode 100644 docs/pre/arch/x86_64/memory/cpu.rst create mode 100644 docs/pre/arch/x86_64/memory/heap.rst create mode 100644 docs/pre/arch/x86_64/memory/heap/bump_allocator.rst create mode 100644 docs/pre/arch/x86_64/memory/heap/global_heap_allocator.rst create mode 100644 docs/pre/arch/x86_64/memory/heap/heap_allocator.rst create mode 100644 docs/pre/arch/x86_64/memory/heap/linked_list_allocator.rst create mode 100644 docs/pre/arch/x86_64/memory/heap/memory_block.rst create mode 100644 docs/pre/arch/x86_64/memory/heap/user_heap_allocator.rst create mode 100644 docs/pre/arch/x86_64/memory/main.rst create mode 100644 docs/pre/arch/x86_64/memory/multiboot.rst create mode 100644 docs/pre/arch/x86_64/memory/multiboot/elf_symbols_section.rst create mode 100644 docs/pre/arch/x86_64/memory/multiboot/info.rst create mode 100644 docs/pre/arch/x86_64/memory/multiboot/memory_map.rst create mode 100644 docs/pre/arch/x86_64/memory/multiboot/reader.rst create mode 100644 docs/pre/arch/x86_64/memory/paging.rst create mode 100644 docs/pre/arch/x86_64/memory/paging/active_page_table.rst create mode 100644 docs/pre/arch/x86_64/memory/paging/inactive_page_table.rst create mode 100644 docs/pre/arch/x86_64/memory/paging/kernel_mapper.rst create mode 100644 docs/pre/arch/x86_64/memory/paging/page_entry.rst create mode 100644 docs/pre/arch/x86_64/memory/paging/page_table.rst create mode 100644 docs/pre/arch/x86_64/memory/paging/temporary_page.rst create mode 100644 docs/pre/arch/x86_64/memory/paging/virtual_page.rst create mode 100644 docs/pre/arch/x86_64/stl.rst create mode 100644 docs/pre/arch/x86_64/stl/container.rst create mode 100644 docs/pre/arch/x86_64/stl/contiguous_pointer_iterator.rst create mode 100644 docs/pre/arch/x86_64/stl/forward_value_iterator.rst create mode 100644 docs/pre/arch/x86_64/stl/mutex.rst create mode 100644 docs/pre/arch/x86_64/stl/shared_pointer.rst create mode 100644 docs/pre/arch/x86_64/stl/stack.rst create mode 100644 docs/pre/arch/x86_64/stl/unique_pointer.rst create mode 100644 docs/pre/arch/x86_64/stl/vector.rst create mode 100644 docs/pre/arch/x86_64/user.rst create mode 100644 docs/pre/arch/x86_64/user/main.rst create mode 100644 docs/pre/arch/x86_64/video.rst create mode 100644 docs/pre/arch/x86_64/video/vga.rst create mode 100644 docs/pre/arch/x86_64/video/vga/io.rst create mode 100644 docs/pre/arch/x86_64/video/vga/text.rst create mode 100644 docs/pre/cross/memory.rst create mode 100644 docs/pre/cross/memory/asm_pointer.rst (limited to 'docs') diff --git a/docs/arch/x86_64.rst b/docs/arch/x86_64.rst deleted file mode 100644 index dc432f1..0000000 --- a/docs/arch/x86_64.rst +++ /dev/null @@ -1,9 +0,0 @@ -x86_64 -====== - -.. toctree:: - :maxdepth: 2 - :caption: Contents: - :glob: - - x86_64/* \ No newline at end of file diff --git a/docs/arch/x86_64/boot.rst b/docs/arch/x86_64/boot.rst deleted file mode 100644 index 8be2a57..0000000 --- a/docs/arch/x86_64/boot.rst +++ /dev/null @@ -1,9 +0,0 @@ -Boot Information Subsystem -====================== - -.. toctree:: - :maxdepth: 2 - :caption: Contents: - :glob: - - boot/* \ No newline at end of file diff --git a/docs/arch/x86_64/boot/pointers.rst b/docs/arch/x86_64/boot/pointers.rst deleted file mode 100644 index 3ec626a..0000000 --- a/docs/arch/x86_64/boot/pointers.rst +++ /dev/null @@ -1,5 +0,0 @@ -Boot Information Structure -======================= - -.. doxygenfile:: arch/x86_64/include/arch/boot/pointers.hpp - diff --git a/docs/arch/x86_64/context_switching.rst b/docs/arch/x86_64/context_switching.rst deleted file mode 100644 index c3b3b03..0000000 --- a/docs/arch/x86_64/context_switching.rst +++ /dev/null @@ -1,9 +0,0 @@ -Context Switching Subsystem -====================== - -.. toctree:: - :maxdepth: 2 - :caption: Contents: - :glob: - - context_switching/* \ No newline at end of file diff --git a/docs/arch/x86_64/context_switching/interrupt_descriptor_table.rst b/docs/arch/x86_64/context_switching/interrupt_descriptor_table.rst deleted file mode 100644 index dd6e478..0000000 --- a/docs/arch/x86_64/context_switching/interrupt_descriptor_table.rst +++ /dev/null @@ -1,9 +0,0 @@ -Interrupt Descriptor Subsystem -=========== - -.. toctree:: - :maxdepth: 2 - :caption: Contents: - :glob: - - interrupt_descriptor_table/* diff --git a/docs/arch/x86_64/context_switching/interrupt_descriptor_table/gate_descriptor.rst b/docs/arch/x86_64/context_switching/interrupt_descriptor_table/gate_descriptor.rst deleted file mode 100644 index 29e7586..0000000 --- a/docs/arch/x86_64/context_switching/interrupt_descriptor_table/gate_descriptor.rst +++ /dev/null @@ -1,5 +0,0 @@ -Interrupt Gate Descriptor -======================= - -.. doxygenfile:: arch/x86_64/include/arch/context_switching/interrupt_descriptor_table/gate_descriptor.hpp - diff --git a/docs/arch/x86_64/context_switching/interrupt_descriptor_table/idt_flags.rst b/docs/arch/x86_64/context_switching/interrupt_descriptor_table/idt_flags.rst deleted file mode 100644 index 60e8c37..0000000 --- a/docs/arch/x86_64/context_switching/interrupt_descriptor_table/idt_flags.rst +++ /dev/null @@ -1,5 +0,0 @@ -Interrupt Descriptor Flags -======================= - -.. doxygenfile:: arch/x86_64/include/arch/context_switching/interrupt_descriptor_table/idt_flags.hpp - diff --git a/docs/arch/x86_64/context_switching/interrupt_descriptor_table/interrupt_descriptor_table copy.rst b/docs/arch/x86_64/context_switching/interrupt_descriptor_table/interrupt_descriptor_table copy.rst deleted file mode 100644 index a2b8997..0000000 --- a/docs/arch/x86_64/context_switching/interrupt_descriptor_table/interrupt_descriptor_table copy.rst +++ /dev/null @@ -1,5 +0,0 @@ -Interrupt Descriptor Table -======================= - -.. doxygenfile:: arch/x86_64/include/arch/context_switching/interrupt_descriptor_table/interrupt_descriptor_table.hpp - diff --git a/docs/arch/x86_64/context_switching/interrupt_descriptor_table/interrupt_descriptor_table_pointer copy.rst b/docs/arch/x86_64/context_switching/interrupt_descriptor_table/interrupt_descriptor_table_pointer copy.rst deleted file mode 100644 index 3a8c259..0000000 --- a/docs/arch/x86_64/context_switching/interrupt_descriptor_table/interrupt_descriptor_table_pointer copy.rst +++ /dev/null @@ -1,5 +0,0 @@ -Interrupt Descriptor Table Pointer -======================= - -.. doxygenfile:: arch/x86_64/include/arch/context_switching/interrupt_descriptor_table/interrupt_descriptor_table_pointer.hpp - diff --git a/docs/arch/x86_64/context_switching/interrupt_descriptor_table/ist_offset.rst b/docs/arch/x86_64/context_switching/interrupt_descriptor_table/ist_offset.rst deleted file mode 100644 index ddba6ee..0000000 --- a/docs/arch/x86_64/context_switching/interrupt_descriptor_table/ist_offset.rst +++ /dev/null @@ -1,5 +0,0 @@ -Interrupt Stack Table Offset -======================= - -.. doxygenfile:: arch/x86_64/include/arch/context_switching/interrupt_descriptor_table/ist_offset.hpp - diff --git a/docs/arch/x86_64/context_switching/interrupt_descriptor_table/segment_selector.rst b/docs/arch/x86_64/context_switching/interrupt_descriptor_table/segment_selector.rst deleted file mode 100644 index 2da142e..0000000 --- a/docs/arch/x86_64/context_switching/interrupt_descriptor_table/segment_selector.rst +++ /dev/null @@ -1,5 +0,0 @@ -Segment Selector -======================= - -.. doxygenfile:: arch/x86_64/include/arch/context_switching/interrupt_descriptor_table/segment_selector.hpp - diff --git a/docs/arch/x86_64/context_switching/main.rst b/docs/arch/x86_64/context_switching/main.rst deleted file mode 100644 index e9e8a35..0000000 --- a/docs/arch/x86_64/context_switching/main.rst +++ /dev/null @@ -1,5 +0,0 @@ -Context Switching Main -======================= - -.. doxygenfile:: arch/x86_64/include/arch/context_switching/main.hpp - diff --git a/docs/arch/x86_64/context_switching/segment_descriptor_table.rst b/docs/arch/x86_64/context_switching/segment_descriptor_table.rst deleted file mode 100644 index 449622d..0000000 --- a/docs/arch/x86_64/context_switching/segment_descriptor_table.rst +++ /dev/null @@ -1,9 +0,0 @@ -Segment Descriptor Subsystem -=========== - -.. toctree:: - :maxdepth: 2 - :caption: Contents: - :glob: - - segment_descriptor_table/* diff --git a/docs/arch/x86_64/context_switching/segment_descriptor_table/access_byte.rst b/docs/arch/x86_64/context_switching/segment_descriptor_table/access_byte.rst deleted file mode 100644 index f2e7d67..0000000 --- a/docs/arch/x86_64/context_switching/segment_descriptor_table/access_byte.rst +++ /dev/null @@ -1,5 +0,0 @@ -Access Byte -======================= - -.. doxygenfile:: arch/x86_64/include/arch/context_switching/segment_descriptor_table/access_byte.hpp - diff --git a/docs/arch/x86_64/context_switching/segment_descriptor_table/gdt_flags.rst b/docs/arch/x86_64/context_switching/segment_descriptor_table/gdt_flags.rst deleted file mode 100644 index faa2ffc..0000000 --- a/docs/arch/x86_64/context_switching/segment_descriptor_table/gdt_flags.rst +++ /dev/null @@ -1,5 +0,0 @@ -Global Descriptor Table Flags -======================= - -.. doxygenfile:: arch/x86_64/include/arch/context_switching/segment_descriptor_table/gdt_flags.hpp - diff --git a/docs/arch/x86_64/context_switching/segment_descriptor_table/global_descriptor_table.rst b/docs/arch/x86_64/context_switching/segment_descriptor_table/global_descriptor_table.rst deleted file mode 100644 index 35403db..0000000 --- a/docs/arch/x86_64/context_switching/segment_descriptor_table/global_descriptor_table.rst +++ /dev/null @@ -1,5 +0,0 @@ -Global Descriptor Table -======================= - -.. doxygenfile:: arch/x86_64/include/arch/context_switching/segment_descriptor_table/global_descriptor_table.hpp - diff --git a/docs/arch/x86_64/context_switching/segment_descriptor_table/global_descriptor_table_pointer.rst b/docs/arch/x86_64/context_switching/segment_descriptor_table/global_descriptor_table_pointer.rst deleted file mode 100644 index 41ceffd..0000000 --- a/docs/arch/x86_64/context_switching/segment_descriptor_table/global_descriptor_table_pointer.rst +++ /dev/null @@ -1,5 +0,0 @@ -Global Descriptor Table Pointer -======================= - -.. doxygenfile:: arch/x86_64/include/arch/context_switching/segment_descriptor_table/global_descriptor_table_pointer.hpp - diff --git a/docs/arch/x86_64/context_switching/segment_descriptor_table/segment_descriptor_base.rst b/docs/arch/x86_64/context_switching/segment_descriptor_table/segment_descriptor_base.rst deleted file mode 100644 index 952ab2a..0000000 --- a/docs/arch/x86_64/context_switching/segment_descriptor_table/segment_descriptor_base.rst +++ /dev/null @@ -1,5 +0,0 @@ -Segment Descriptor Base (32-bit) -======================= - -.. doxygenfile:: arch/x86_64/include/arch/context_switching/segment_descriptor_table/segment_descriptor_base.hpp - diff --git a/docs/arch/x86_64/context_switching/segment_descriptor_table/segment_descriptor_extension.rst b/docs/arch/x86_64/context_switching/segment_descriptor_table/segment_descriptor_extension.rst deleted file mode 100644 index 874d1cb..0000000 --- a/docs/arch/x86_64/context_switching/segment_descriptor_table/segment_descriptor_extension.rst +++ /dev/null @@ -1,5 +0,0 @@ -Segment Descriptor Extension (64-bit) -======================= - -.. doxygenfile:: arch/x86_64/include/arch/context_switching/segment_descriptor_table/segment_descriptor_extension.hpp - diff --git a/docs/arch/x86_64/context_switching/segment_descriptor_table/segment_descriptor_type.rst b/docs/arch/x86_64/context_switching/segment_descriptor_table/segment_descriptor_type.rst deleted file mode 100644 index e45b0a5..0000000 --- a/docs/arch/x86_64/context_switching/segment_descriptor_table/segment_descriptor_type.rst +++ /dev/null @@ -1,5 +0,0 @@ -Segment Descriptor Type -======================= - -.. doxygenfile:: arch/x86_64/include/arch/context_switching/segment_descriptor_table/segment_descriptor_type.hpp - diff --git a/docs/arch/x86_64/context_switching/segment_descriptor_table/task_state_segment.rst b/docs/arch/x86_64/context_switching/segment_descriptor_table/task_state_segment.rst deleted file mode 100644 index 731d7bb..0000000 --- a/docs/arch/x86_64/context_switching/segment_descriptor_table/task_state_segment.rst +++ /dev/null @@ -1,5 +0,0 @@ -Task State Segment -======================= - -.. doxygenfile:: arch/x86_64/include/arch/context_switching/segment_descriptor_table/task_state_segment.hpp - diff --git a/docs/arch/x86_64/context_switching/syscall.rst b/docs/arch/x86_64/context_switching/syscall.rst deleted file mode 100644 index 28acf28..0000000 --- a/docs/arch/x86_64/context_switching/syscall.rst +++ /dev/null @@ -1,9 +0,0 @@ -System Call Subsystem -=========== - -.. toctree:: - :maxdepth: 2 - :caption: Contents: - :glob: - - syscall/* diff --git a/docs/arch/x86_64/context_switching/syscall/main.rst b/docs/arch/x86_64/context_switching/syscall/main.rst deleted file mode 100644 index 6be577b..0000000 --- a/docs/arch/x86_64/context_switching/syscall/main.rst +++ /dev/null @@ -1,5 +0,0 @@ -System Call Main -======================= - -.. doxygenfile:: arch/x86_64/include/arch/context_switching/syscall/main.hpp - diff --git a/docs/arch/x86_64/context_switching/syscall/syscall_enable.rst b/docs/arch/x86_64/context_switching/syscall/syscall_enable.rst deleted file mode 100644 index e9162f1..0000000 --- a/docs/arch/x86_64/context_switching/syscall/syscall_enable.rst +++ /dev/null @@ -1,5 +0,0 @@ -System Call Configuration -======================= - -.. doxygenfile:: arch/x86_64/include/arch/context_switching/syscall/syscall_enable.hpp - diff --git a/docs/arch/x86_64/context_switching/syscall/syscall_handler.rst b/docs/arch/x86_64/context_switching/syscall/syscall_handler.rst deleted file mode 100644 index 0e86780..0000000 --- a/docs/arch/x86_64/context_switching/syscall/syscall_handler.rst +++ /dev/null @@ -1,5 +0,0 @@ -System Call Handler -======================= - -.. doxygenfile:: arch/x86_64/include/arch/context_switching/syscall/syscall_handler.hpp - diff --git a/docs/arch/x86_64/exception_handling.rst b/docs/arch/x86_64/exception_handling.rst deleted file mode 100644 index 3bf2770..0000000 --- a/docs/arch/x86_64/exception_handling.rst +++ /dev/null @@ -1,9 +0,0 @@ -Exception Handling Subsystem -====================== - -.. toctree:: - :maxdepth: 2 - :caption: Contents: - :glob: - - exception_handling/* \ No newline at end of file diff --git a/docs/arch/x86_64/exception_handling/assert.rst b/docs/arch/x86_64/exception_handling/assert.rst deleted file mode 100644 index 053cf66..0000000 --- a/docs/arch/x86_64/exception_handling/assert.rst +++ /dev/null @@ -1,5 +0,0 @@ -Exception Handling Assertion -======================= - -.. doxygenfile:: arch/x86_64/include/arch/exception_handling/assert.hpp - diff --git a/docs/arch/x86_64/exception_handling/panic.rst b/docs/arch/x86_64/exception_handling/panic.rst deleted file mode 100644 index 50b6284..0000000 --- a/docs/arch/x86_64/exception_handling/panic.rst +++ /dev/null @@ -1,5 +0,0 @@ -Exception Handling Panic -======================= - -.. doxygenfile:: arch/x86_64/include/arch/exception_handling/panic.hpp - diff --git a/docs/arch/x86_64/interrupt_handling.rst b/docs/arch/x86_64/interrupt_handling.rst deleted file mode 100644 index d4ff94a..0000000 --- a/docs/arch/x86_64/interrupt_handling.rst +++ /dev/null @@ -1,9 +0,0 @@ -Interrupt Handling Subsystem -====================== - -.. toctree:: - :maxdepth: 2 - :caption: Contents: - :glob: - - interrupt_handling/* \ No newline at end of file diff --git a/docs/arch/x86_64/interrupt_handling/generic_interrupt_handler.rst b/docs/arch/x86_64/interrupt_handling/generic_interrupt_handler.rst deleted file mode 100644 index 6099170..0000000 --- a/docs/arch/x86_64/interrupt_handling/generic_interrupt_handler.rst +++ /dev/null @@ -1,5 +0,0 @@ -Generic Interrupt Handler -======================= - -.. doxygenfile:: arch/x86_64/include/arch/interrupt_handling/generic_interrupt_handler.hpp - diff --git a/docs/arch/x86_64/io.rst