template <ElfApi ElfLayout>

class RelocationInfo

Defined at line 38 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

This represents the ELF metadata in an ELF file that directs what dynamic

relocation it requires. It holds spans of the various raw relocation record

types and provides a uniform visitor pattern for iterating over them.

Both REL and RELA formats are tracked here. Within each format, "relative"

(simple fixup) relocation and "symbolic" (general) relocations are provided

as separate subspans. The RELR format is held as a raw span of words. PLT

(JMPREL) relocations use either REL or RELA format (but can't have both in

parallel as general relocations do) and so are represented using a

std::variant type across the REL and RELA container formats.

The VisitRelative and VisitSymbolic methods can be used like std::visit to

call a callback function (a generic lambda or other polymorphic callable)

with each record, stopping early if the callback returns false.

VisitSymbolic passes either an Elf::Rela or an Elf::Rel that uses an

in-place addend. VisitRelative passes either an Elf::Rela with separate

address and addend, or an Elf::size_type address using an in-place addend.

Public Methods

RelTable rel_relative ()

Fetch the various relocation tables. The REL and RELA tables have

relative and symbolic subsets. The RELR table needs further decoding.

Enumeration should use the VisitRelative and VisitSymbolic methods, below.

Defined at line 58 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

RelTable rel_symbolic ()

Defined at line 60 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

RelaTable rela_relative ()

Defined at line 62 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

RelaTable rela_symbolic ()

Defined at line 64 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

RelrTable relr ()

Defined at line 66 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

JmprelTable jmprel ()

Defined at line 68 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

RelocationInfo<ElfLayout> & set_rel (RelTable relocs, size_type relcount)

Install data for the various relocation tables. These return *this so

they can be called in fluent style, e.g. in a constexpr initializer.

Defined at line 73 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

RelocationInfo<ElfLayout> & set_rel (RelTable relocs, size_type relcount)

Install data for the various relocation tables. These return *this so

they can be called in fluent style, e.g. in a constexpr initializer.

Defined at line 73 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

RelocationInfo<ElfLayout> & set_rel (RelTable relocs, size_type relcount)

Install data for the various relocation tables. These return *this so

they can be called in fluent style, e.g. in a constexpr initializer.

Defined at line 73 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

RelocationInfo<ElfLayout> & set_rel (RelTable relocs, size_type relcount)

Install data for the various relocation tables. These return *this so

they can be called in fluent style, e.g. in a constexpr initializer.

Defined at line 73 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

RelocationInfo<ElfLayout> & set_rel (RelTable relocs, size_type relcount)

Install data for the various relocation tables. These return *this so

they can be called in fluent style, e.g. in a constexpr initializer.

Defined at line 73 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

RelocationInfo<ElfLayout> & set_rela (RelaTable relocs, size_type relacount)

Defined at line 79 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

RelocationInfo<ElfLayout> & set_rela (RelaTable relocs, size_type relacount)

Defined at line 79 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

RelocationInfo<ElfLayout> & set_rela (RelaTable relocs, size_type relacount)

Defined at line 79 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

RelocationInfo<ElfLayout> & set_rela (RelaTable relocs, size_type relacount)

Defined at line 79 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

RelocationInfo<ElfLayout> & set_rela (RelaTable relocs, size_type relacount)

Defined at line 79 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

RelocationInfo<ElfLayout> & set_relr (RelrTable table)

Defined at line 85 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

RelocationInfo<ElfLayout> & set_relr (RelrTable table)

Defined at line 85 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

RelocationInfo<ElfLayout> & set_relr (RelrTable table)

Defined at line 85 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

RelocationInfo<ElfLayout> & set_relr (RelrTable table)

Defined at line 85 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

RelocationInfo<ElfLayout> & set_relr (RelrTable table)

Defined at line 85 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

RelocationInfo<ElfLayout> & set_jmprel (JmprelTable table)

Defined at line 90 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

RelocationInfo<ElfLayout> & set_jmprel (JmprelTable table)

Defined at line 90 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

RelocationInfo<ElfLayout> & set_jmprel (JmprelTable table)

Defined at line 90 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

RelocationInfo<ElfLayout> & set_jmprel (JmprelTable table)

Defined at line 90 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

RelocationInfo<ElfLayout> & set_jmprel (JmprelTable table)

Defined at line 90 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

template <ElfMachine Machine, class Reloc>
size_t ValidateRelative (std::span<const Reloc> relocs)

Defined at line 100 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

template <ElfMachine Machine, class Reloc>
size_t ValidateRelative (std::span<const Reloc> relocs)

Defined at line 100 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

template <ElfMachine Machine, class Reloc>
size_t ValidateRelative (std::span<const Reloc> relocs)

Defined at line 100 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

template <ElfMachine Machine, class Reloc>
size_t ValidateRelative (std::span<const Reloc> relocs)

Defined at line 100 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

template <ElfMachine Machine, class Reloc>
size_t ValidateRelative (std::span<const Reloc> relocs)

Defined at line 100 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

size_t ValidateRelative (std::span<const Addr> relocs)

Defined at line 109 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

size_t ValidateRelative (std::span<const Addr> relocs)

Defined at line 109 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

size_t ValidateRelative (std::span<const Addr> relocs)

Defined at line 109 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

size_t ValidateRelative (std::span<const Addr> relocs)

Defined at line 109 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

size_t ValidateRelative (std::span<const Addr> relocs)

Defined at line 109 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

template <typename Visitor>
bool VisitRelative (Visitor && visit)

Call visit(Elf::Rela reloc) -> bool or visit(Elf::size_type addr) on every

location needing simple fixup. The Elf::size_type signature indicates the

addend is to be read from the relocated address itself. Returns false the

first time visit returns false, otherwise true.

Defined at line 120 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h

template <typename Visitor>
bool VisitSymbolic (Visitor && visit)

Call visit(Elf::Rel) -> bool or visit(Elf::Rela) -> bool on every symbolic

relocation record. Returns false the first time visit returns false,

otherwise true.

Defined at line 174 of file ../../src/lib/elfldltl/include/lib/elfldltl/relocation.h