10#if !defined(__linux__) && !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__NetBSD__) && \
11 !defined(__DragonFly__)
12#error "microfmt/inspector/dl_symbol_resolver.hpp only supports Linux and BSD systems"
18#include "../microfmt.hpp"
32RELOCO_BEGIN_UNSAFE_CODE
39 if (::dladdr(
reinterpret_cast<const void *
>(addr), &info) == 0 || info.dli_fbase ==
nullptr)
44 (info.dli_fname !=
nullptr && info.dli_fname[0] !=
'\0') ? string_view(info.dli_fname) : string_view(
"");
45 result.image_load_base =
reinterpret_cast<uintptr_t
>(info.dli_fbase);
47 if (info.dli_sname !=
nullptr && info.dli_sname[0] !=
'\0' && info.dli_saddr !=
nullptr) {
48 result.symbol_name = string_view(info.dli_sname);
49 result.symbol_base =
reinterpret_cast<uintptr_t
>(info.dli_saddr);
50 result.is_exact = (result.symbol_base == addr);
Definition bintime.hpp:22
RELOCO_BEGIN_UNSAFE_CODE bool dl_resolve_symbol(uintptr_t addr, raw_resolved_symbol &out_raw) noexcept
Resolves addr to its nearest preceding symbol/image via dladdr.
Definition dl_symbol_resolver.hpp:33
RELOCO_END_UNSAFE_CODE
Definition remote_object.hpp:132
Tag selecting the dladdr-backed symbol_resolver_traits specialization.
Definition dl_symbol_resolver.hpp:66
Raw resolution result as returned by a resolver backend.
Definition symbol_resolver.hpp:26
microfmt::string_view image_name
Owning image/module name.
Definition symbol_resolver.hpp:43
static bool resolve(uintptr_t addr, span< char >, raw_resolved_symbol &out_raw) noexcept
Definition dl_symbol_resolver.hpp:80
void context_type
Definition dl_symbol_resolver.hpp:78
Static customization point for symbol resolver backends.
Definition symbol_resolver.hpp:120
Type-erased symbol resolution for remote addresses and formattable symbol views.