aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64/src/kernel/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86_64/src/kernel/main.cpp')
-rw-r--r--arch/x86_64/src/kernel/main.cpp54
1 files changed, 54 insertions, 0 deletions
diff --git a/arch/x86_64/src/kernel/main.cpp b/arch/x86_64/src/kernel/main.cpp
index 7107a36..2040fe3 100644
--- a/arch/x86_64/src/kernel/main.cpp
+++ b/arch/x86_64/src/kernel/main.cpp
@@ -35,6 +35,57 @@ namespace teachos::arch::kernel
}
}
+ auto print_elf_sections(elf_symbols_section * symbol) -> void
+ {
+ using namespace video::vga;
+
+ uint16_t const num = symbol->num;
+ text::write("Number of entries: ", text::common_attributes::green_on_black);
+ text::write_number(num, text::common_attributes::green_on_black);
+ uint16_t const entsize = symbol->entsize;
+ text::write("Entry Size: ", text::common_attributes::green_on_black);
+ text::write_number(entsize, text::common_attributes::green_on_black);
+ uint16_t const shndx = symbol->shndx;
+ text::write("Section index: ", text::common_attributes::green_on_black);
+ text::write_number(shndx, text::common_attributes::green_on_black);
+
+ auto begin = &symbol->sections;
+ auto end = begin + num;
+ for (auto section = begin; section != end; ++section)
+ {
+ uint32_t const sh_name = section->sh_name;
+ text::write("Section name: ", text::common_attributes::green_on_black);
+ text::write_number(sh_name, text::common_attributes::green_on_black);
+ uint32_t const sh_type = section->sh_type;
+ text::write("Section type: ", text::common_attributes::green_on_black);
+ text::write_number(sh_type, text::common_attributes::green_on_black);
+ uint64_t const sh_flags = section->sh_flags;
+ text::write("Section flags: ", text::common_attributes::green_on_black);
+ text::write_number(sh_flags, text::common_attributes::green_on_black);
+ uint64_t const sh_addr = section->sh_addr;
+ text::write("Section name: ", text::common_attributes::green_on_black);
+ text::write_number(sh_addr, text::common_attributes::green_on_black);
+ uint64_t const sh_offset = section->sh_offset;
+ text::write("Section name: ", text::common_attributes::green_on_black);
+ text::write_number(sh_offset, text::common_attributes::green_on_black);
+ uint64_t const sh_size = section->sh_size;
+ text::write("Section name: ", text::common_attributes::green_on_black);
+ text::write_number(sh_size, text::common_attributes::green_on_black);
+ uint32_t const sh_link = section->sh_link;
+ text::write("Section name: ", text::common_attributes::green_on_black);
+ text::write_number(sh_link, text::common_attributes::green_on_black);
+ uint32_t const sh_info = section->sh_info;
+ text::write("Section name: ", text::common_attributes::green_on_black);
+ text::write_number(sh_info, text::common_attributes::green_on_black);
+ uint64_t const sh_addralign = section->sh_addralign;
+ text::write("Section name: ", text::common_attributes::green_on_black);
+ text::write_number(sh_addralign, text::common_attributes::green_on_black);
+ uint64_t const sh_entsize = section->sh_entsize;
+ text::write("Section name: ", text::common_attributes::green_on_black);
+ text::write_number(sh_entsize, text::common_attributes::green_on_black);
+ }
+ }
+
auto main() -> void
{
using namespace video::vga;
@@ -57,6 +108,9 @@ namespace teachos::arch::kernel
{
switch (tag->type)
{
+ case MULTIBOOT_TAG_TYPE_ELF_SECTIONS:
+ print_elf_sections((struct elf_symbols_section *)tag);
+ break;
case MULTIBOOT_TAG_TYPE_MMAP:
print_memory_map((struct memory_map_info *)tag);
break;