template <class Module, typename TlsDescResolver>
struct ResolverDefinition
Defined at line 158 of file ../../src/lib/elfldltl/include/lib/elfldltl/resolve.h
This type implements a Definition which can be used as the return type for
the `resolve` parameter for RelocateSymbolic. See link.h for more details.
The Module type must have the following methods:
* const SymbolInfo
&
symbol_info() const
Returns the SymbolInfo type associated with this module.
This is used to reify the Sym in the referring module to a name.
* size_type load_bias() const
Returns the load bias for symbol addresses in this module.
* size_type tls_module_id() const
Returns the TLS module ID number for this module.
This will be zero for a module with no PT_TLS segment.
It's always one in the main executable if has a PT_TLS segment,
but may be one in a different module if the main executable has none.
* bool uses_static_tls() const
This module may have TLS relocations for IE or LE model accesses.
* size_type static_tls_bias() const
Returns the static TLS layout bias for the defining module.
* fit::result
<bool
, TlsDescGot> tls_desc(Diagnostics
&
, const Sym
&
, Addend addend) const
* fit::result
<bool
, TlsDescGot> tls_desc(Diagnostics
&
) const
See elfldltl::RelocateSymbolic API comments about the two overloads.
This implements that method but for some particular defined symbol in
`.symbols_info().symtab()`.
* fit::result
<bool
, const Sym*> Lookup(Diagnostics
&
, SymbolName
&
name) const
This can usually be just `return fit::ok(name.Lookup(symbol_info()));`.
It's responsible for looking up a symbol name in the module.
It can return failure to declare that resolution has failed entirely.
It returns success with nullptr just to indicate this module does not
define this symbol name. The returned pointer must be from symbol_info()
so that its string table can be used.
Public Members
const Sym * symbol_
const Module * module_
TlsDescResolver * tlsdesc_resolver_
Public Methods
ResolverDefinition<Module, TlsDescResolver> UndefinedWeak (TlsDescResolver * tlsdesc_resolver)
Defined at line 164 of file ../../src/lib/elfldltl/include/lib/elfldltl/resolve.h
bool undefined_weak ()
This should be called before any other method to check if this Definition is valid.
Defined at line 170 of file ../../src/lib/elfldltl/include/lib/elfldltl/resolve.h
const Sym & symbol ()
Defined at line 172 of file ../../src/lib/elfldltl/include/lib/elfldltl/resolve.h
auto bias ()
Defined at line 173 of file ../../src/lib/elfldltl/include/lib/elfldltl/resolve.h
auto tls_module_id ()
Defined at line 175 of file ../../src/lib/elfldltl/include/lib/elfldltl/resolve.h
bool uses_static_tls ()
Defined at line 176 of file ../../src/lib/elfldltl/include/lib/elfldltl/resolve.h
auto static_tls_bias ()
Defined at line 177 of file ../../src/lib/elfldltl/include/lib/elfldltl/resolve.h
template <class Diagnostics, typename T = TlsDescResolver, typename = std::enable_if_t<std::is_invocable_v<T, Diagnostics&, const ResolverDefinition&>>>
auto tls_desc (Diagnostics & diag)
Defined at line 182 of file ../../src/lib/elfldltl/include/lib/elfldltl/resolve.h
template <class Diagnostics, typename T = TlsDescResolver, typename = std::enable_if_t<
std::is_invocable_v<T, Diagnostics&, const ResolverDefinition&, Addend>>>
auto tls_desc (Diagnostics & diag, Addend addend)
Defined at line 189 of file ../../src/lib/elfldltl/include/lib/elfldltl/resolve.h
template <typename T = TlsDescResolver, typename = std::enable_if_t<std::is_invocable_v<T>>>
auto tls_desc_undefined_weak ()
Defined at line 194 of file ../../src/lib/elfldltl/include/lib/elfldltl/resolve.h
template <typename T = TlsDescResolver, typename = std::enable_if_t<std::is_invocable_v<T, Addend>>>
auto tls_desc_undefined_weak (Addend addend)
Defined at line 200 of file ../../src/lib/elfldltl/include/lib/elfldltl/resolve.h