diff options
| author | Felix Morgner <felix.morgner@ost.ch> | 2025-12-05 18:22:53 +0100 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@ost.ch> | 2025-12-05 18:22:53 +0100 |
| commit | 1124eb4e0a88e7cd13d6ebd9820d6ddcde343110 (patch) | |
| tree | d0b3d2052ebbb68d6c61009ae5b2a61321b25e9d /libs/multiboot2 | |
| parent | 53402f496ee07351923945f523565f9aa618005a (diff) | |
| download | teachos-1124eb4e0a88e7cd13d6ebd9820d6ddcde343110.tar.xz teachos-1124eb4e0a88e7cd13d6ebd9820d6ddcde343110.zip | |
multiboot2: implement section name reading
Diffstat (limited to 'libs/multiboot2')
| -rw-r--r-- | libs/multiboot2/include/multiboot2/impl/tag.hpp | 20 | ||||
| -rw-r--r-- | libs/multiboot2/include/multiboot2/information.hpp | 14 |
2 files changed, 30 insertions, 4 deletions
diff --git a/libs/multiboot2/include/multiboot2/impl/tag.hpp b/libs/multiboot2/include/multiboot2/impl/tag.hpp index 5edcd6f..a6e2678 100644 --- a/libs/multiboot2/include/multiboot2/impl/tag.hpp +++ b/libs/multiboot2/include/multiboot2/impl/tag.hpp @@ -82,16 +82,18 @@ namespace multiboot2::impl { using range_type = Range<VlaData const>; + using value_type = range_type::value_type; + using reference = range_type::const_reference; + using const_reference = range_type::const_reference; + using pointer = range_type::const_pointer; + using const_pointer = range_type::const_pointer; + using iterator = range_type::const_iterator; using const_iterator = range_type::const_iterator; using reverse_iterator = range_type::const_reverse_iterator; using const_reverse_iterator = range_type::const_reverse_iterator; using size_type = range_type::size_type; using difference_type = range_type::difference_type; - using reference = range_type::const_reference; - using const_reference = range_type::const_reference; - using pointer = range_type::const_pointer; - using const_pointer = range_type::const_pointer; vla_tag() : tag<Data>{} @@ -168,6 +170,16 @@ namespace multiboot2::impl return m_vla.data(); } + [[nodiscard]] auto at() const -> const_reference + { + return m_vla.at(); + } + + [[nodiscard]] auto operator[](std::size_t index) const noexcept -> const_reference + { + return m_vla[index]; + } + private: auto static vla_start(tag_header const * header) noexcept -> VlaData * { diff --git a/libs/multiboot2/include/multiboot2/information.hpp b/libs/multiboot2/include/multiboot2/information.hpp index 4be32aa..25f034d 100644 --- a/libs/multiboot2/include/multiboot2/information.hpp +++ b/libs/multiboot2/include/multiboot2/information.hpp @@ -11,6 +11,7 @@ #include <algorithm> #include <cstddef> #include <cstdint> +#include <cstdlib> #include <optional> #include <span> #include <string_view> @@ -58,6 +59,19 @@ namespace multiboot2 { using base = impl::vla_tag<impl::elf_symbols_data, elf::section_header<Format> const, std::span>; using base::base; + + [[nodiscard]] auto name(elf::section_header<Format> const & section) const noexcept -> std::string_view + { + if (!this->string_table_index) + { + std::abort(); + } + + auto string_table = this->begin()[this->string_table_index]; + auto name_offset = section.name_offset; + auto name_array = std::bit_cast<char const *>(string_table.virtual_load_address); + return name_array + name_offset; + } }; /** |
