TPDE
Loading...
Searching...
No Matches
ElfMapper.hpp
1// SPDX-FileCopyrightText: 2025 Contributors to TPDE <https://tpde.org>
2// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
3#pragma once
4
5#include <string_view>
6
7#include "base.hpp"
8#include "tpde/AssemblerElf.hpp"
9#include "tpde/util/SmallVector.hpp"
10#include "tpde/util/function_ref.hpp"
11
12namespace tpde {
13
14class ElfMapper {
15public:
16 // TODO: use C++26 std::function_ref
17 using SymbolResolver = util::function_ref<void *(std::string_view)>;
18
19private:
20 u8 *mapped_addr;
21 size_t mapped_size;
22 u32 registered_frame_off = 0;
23
24 u32 local_sym_count = 0;
25 util::SmallVector<void *, 64> sym_addrs;
26
27public:
28 ElfMapper() noexcept = default;
29 ~ElfMapper() { reset(); }
30
31 ElfMapper(const ElfMapper &) = delete;
32 ElfMapper(ElfMapper &&) = delete;
33
34 ElfMapper &operator=(const ElfMapper &) = delete;
35 ElfMapper &operator=(ElfMapper &&) = delete;
36
37 void reset() noexcept;
38
39 bool map(AssemblerElfBase &assembler, SymbolResolver resolver) noexcept;
40
41 void *get_sym_addr(AssemblerElfBase::SymRef sym) noexcept;
42};
43
44} // namespace tpde