diff options
| author | Felix Morgner <felix.morgner@ost.ch> | 2025-10-30 15:59:48 +0100 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@ost.ch> | 2025-10-30 15:59:48 +0100 |
| commit | 78f0df1cf849af8b0ade40a8ebcffd7fb53635cb (patch) | |
| tree | 1ceab6b4f2f518a32da5c12d0939637c7fbdd7e7 /libs/multiboot2 | |
| parent | 5e9b7dd3dbc194ffa583e9efaab1aef1b6792d97 (diff) | |
| download | teachos-78f0df1cf849af8b0ade40a8ebcffd7fb53635cb.tar.xz teachos-78f0df1cf849af8b0ade40a8ebcffd7fb53635cb.zip | |
libs: begin ELF support implementation
Diffstat (limited to 'libs/multiboot2')
| -rw-r--r-- | libs/multiboot2/CMakeLists.txt | 8 | ||||
| -rw-r--r-- | libs/multiboot2/include/multiboot2/information.hpp | 25 |
2 files changed, 24 insertions, 9 deletions
diff --git a/libs/multiboot2/CMakeLists.txt b/libs/multiboot2/CMakeLists.txt index 7b9e58a..350a996 100644 --- a/libs/multiboot2/CMakeLists.txt +++ b/libs/multiboot2/CMakeLists.txt @@ -17,3 +17,11 @@ target_sources("multiboot2" INTERFACE target_include_directories("multiboot2" INTERFACE "include" ) + +target_link_libraries("multiboot2" INTERFACE + "libs::elf" +) + +set_target_properties("multiboot2" PROPERTIES + VERIFY_INTERFACE_HEADER_SETS YES +)
\ No newline at end of file diff --git a/libs/multiboot2/include/multiboot2/information.hpp b/libs/multiboot2/include/multiboot2/information.hpp index ac03069..d2b4c98 100644 --- a/libs/multiboot2/include/multiboot2/information.hpp +++ b/libs/multiboot2/include/multiboot2/information.hpp @@ -5,6 +5,9 @@ #include "impl/iterator.hpp" #include "impl/tag.hpp" +#include <elf/format.hpp> +#include <elf/section_header.hpp> + #include <algorithm> #include <cstddef> #include <cstdint> @@ -50,15 +53,17 @@ namespace multiboot2 /** * @copydoc multiboot2::impl::elf_symbols_data */ - struct elf_symbols : impl::vla_tag<impl::elf_symbols_data, std::byte const, std::span> + template<elf::format Format> + struct elf_symbols : impl::vla_tag<impl::elf_symbols_data, elf::section_header<Format> const, std::span> { - using vla_tag::vla_tag; + using base = impl::vla_tag<impl::elf_symbols_data, elf::section_header<Format> const, std::span>; + using base::base; - using iterator = range_type::iterator; + using iterator = base::range_type::iterator; - auto data() const noexcept -> range_type + auto data() const noexcept -> base::range_type { - return m_vla; + return this->m_vla; } }; @@ -168,14 +173,16 @@ namespace multiboot2 return maybe_command_line().value(); } - auto maybe_elf_symbols() const noexcept -> std::optional<elf_symbols> + template<elf::format Format> + auto maybe_elf_symbols() const noexcept -> std::optional<elf_symbols<Format>> { - return get<multiboot2::elf_symbols>(); + return get<multiboot2::elf_symbols<Format>>(); } - auto elf_symbols() const -> elf_symbols + template<elf::format Format> + auto elf_symbols() const -> elf_symbols<Format> { - return maybe_elf_symbols().value(); + return maybe_elf_symbols<Format>().value(); } auto maybe_loader_name() const noexcept -> std::optional<loader_name> |
