From 1124eb4e0a88e7cd13d6ebd9820d6ddcde343110 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Fri, 5 Dec 2025 18:22:53 +0100 Subject: multiboot2: implement section name reading --- libs/multiboot2/include/multiboot2/impl/tag.hpp | 20 ++++++++++++++++---- 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; + 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{} @@ -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 #include #include +#include #include #include #include @@ -58,6 +59,19 @@ namespace multiboot2 { using base = impl::vla_tag const, std::span>; using base::base; + + [[nodiscard]] auto name(elf::section_header 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(string_table.virtual_load_address); + return name_array + name_offset; + } }; /** -- cgit v1.2.3