aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/x86_64/include/arch/memory/multiboot.hpp8
-rw-r--r--arch/x86_64/src/kernel/main.cpp17
2 files changed, 19 insertions, 6 deletions
diff --git a/arch/x86_64/include/arch/memory/multiboot.hpp b/arch/x86_64/include/arch/memory/multiboot.hpp
index 5990260..c049a29 100644
--- a/arch/x86_64/include/arch/memory/multiboot.hpp
+++ b/arch/x86_64/include/arch/memory/multiboot.hpp
@@ -103,10 +103,8 @@ namespace teachos::arch::memory
};
/**
- * @brief Defines all elf section types an elf section header can have.
- * The first section will always be INACTIVE, there can only ever be one DYNAMIC section and only either one
- * DYNAMIC_SYMBOL_TABLE or SYMBOL_TABLE. See https://docs.oracle.com/cd/E19683-01/816-1386/chapter6-94076/index.html
- * for more information.
+ * @brief Defines all elf section types an elf section header can have. See
+ * https://docs.oracle.com/cd/E19683-01/816-1386/chapter6-94076/index.html for more information.
*/
enum class elf_section_type : uint32_t
{
@@ -304,6 +302,8 @@ namespace teachos::arch::memory
/**
* @brief Defines an entry in the multi_boot_tag array of the multi_boot_info struct, of type
* multi_boot_tag_type::ELF_SECTIONS.
+ * The first section in the sections array will always be INACTIVE, there can only ever be one DYNAMIC section and
+ * only either one DYNAMIC_SYMBOL_TABLE or SYMBOL_TABLE.
*/
struct elf_symbols_section
{
diff --git a/arch/x86_64/src/kernel/main.cpp b/arch/x86_64/src/kernel/main.cpp
index 6486b7c..40b2fe5 100644
--- a/arch/x86_64/src/kernel/main.cpp
+++ b/arch/x86_64/src/kernel/main.cpp
@@ -63,13 +63,26 @@ namespace teachos::arch::kernel
// value should be zero :(
// assert(begin->is_null());
- // TODO: Check if only contains one DYNSYM or SYMTAB but not both!
- // TODO: Check if only contains one dynamic section
+ std::size_t symbol_table_section_count = 0U;
+ std::size_t dynamic_section_count = 0U;
for (auto section = begin; section != end; ++section)
{
+ if (section->type == arch::memory::elf_section_type::DYNAMIC_SYMBOL_TABLE ||
+ section->type == arch::memory::elf_section_type::SYMBOL_TABLE)
+ {
+ symbol_table_section_count++;
+ }
+ else if (section->type == arch::memory::elf_section_type::DYNAMIC)
+ {
+ dynamic_section_count++;
+ }
video::vga::text::write("Looping Code section", video::vga::text::common_attributes::green_on_black);
}
+
+ // TODO: Contains two symbol tables and 4 dynamic sections, that is definetly wrong, perhaps same reason as above?
+ assert(symbol_table_section_count == 1U);
+ assert(dynamic_section_count == 1U);
}
auto main() -> void