aboutsummaryrefslogtreecommitdiff
path: root/libs/multiboot2
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2025-10-30 15:59:48 +0100
committerFelix Morgner <felix.morgner@ost.ch>2025-10-30 15:59:48 +0100
commit78f0df1cf849af8b0ade40a8ebcffd7fb53635cb (patch)
tree1ceab6b4f2f518a32da5c12d0939637c7fbdd7e7 /libs/multiboot2
parent5e9b7dd3dbc194ffa583e9efaab1aef1b6792d97 (diff)
downloadteachos-78f0df1cf849af8b0ade40a8ebcffd7fb53635cb.tar.xz
teachos-78f0df1cf849af8b0ade40a8ebcffd7fb53635cb.zip
libs: begin ELF support implementation
Diffstat (limited to 'libs/multiboot2')
-rw-r--r--libs/multiboot2/CMakeLists.txt8
-rw-r--r--libs/multiboot2/include/multiboot2/information.hpp25
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>