class ELFFile

Declaration

template <class ELFT>
class ELFFile { /* full declaration omitted */ };

Declared at: llvm/include/llvm/Object/ELF.h:166

Templates

ELFT

Member Variables

private llvm::StringRef Buf
private std::vector<Elf_Shdr> FakeSections

Method Overview

  • private ELFFile<ELFT>(llvm::StringRef Object)
  • public Expected<std::vector<Elf_Rela>> android_relas(const llvm::object::ELFFile::Elf_Shdr & Sec) const
  • public const uint8_t * base() const
  • public static Expected<ELFFile<ELFT>> create(llvm::StringRef Object)
  • public void createFakeSections()
  • public Expected<std::vector<BBAddrMap>> decodeBBAddrMap(const llvm::object::ELFFile::Elf_Shdr & Sec) const
  • public std::vector<Elf_Rel> decode_relrs(llvm::object::ELFFile::Elf_Relr_Range relrs) const
  • public Expected<llvm::object::ELFFile::Elf_Dyn_Range> dynamicEntries() const
  • public const uint8_t * end() const
  • public size_t getBufSize() const
  • public Expected<uint64_t> getDynSymtabSize() const
  • public std::string getDynamicTagAsString(unsigned int Arch, uint64_t Type) const
  • public std::string getDynamicTagAsString(uint64_t Type) const
  • public template <typename T>Expected<const T *> getEntry(const llvm::object::ELFFile::Elf_Shdr & Section, uint32_t Entry) const
  • public template <typename T>Expected<const T *> getEntry(uint32_t Section, uint32_t Entry) const
  • public const llvm::object::ELFFile::Elf_Ehdr & getHeader() const
  • public Expected<llvm::StringRef> getLinkAsStrtab(const typename ELFT::Shdr & Sec) const
  • public uint32_t getRelativeRelocationType() const
  • public Expected<const llvm::object::ELFFile::Elf_Sym *> getRelocationSymbol(const llvm::object::ELFFile::Elf_Rel & Rel, const llvm::object::ELFFile::Elf_Shdr * SymTab) const
  • public llvm::StringRef getRelocationTypeName(uint32_t Type) const
  • public void getRelocationTypeName(uint32_t Type, SmallVectorImpl<char> & Result) const
  • public Expected<ArrayRef<llvm::object::ELFFile::Elf_Word>> getSHNDXTable(const llvm::object::ELFFile::Elf_Shdr & Section, llvm::object::ELFFile::Elf_Shdr_Range Sections) const
  • public Expected<ArrayRef<llvm::object::ELFFile::Elf_Word>> getSHNDXTable(const llvm::object::ELFFile::Elf_Shdr & Section) const
  • public Expected<const llvm::object::ELFFile::Elf_Shdr *> getSection(uint32_t Index) const
  • public Expected<const llvm::object::ELFFile::Elf_Shdr *> getSection(const llvm::object::ELFFile::Elf_Sym & Sym, llvm::object::ELFFile::Elf_Sym_Range Symtab, DataRegion<llvm::object::ELFFile::Elf_Word> ShndxTable) const
  • public Expected<const llvm::object::ELFFile::Elf_Shdr *> getSection(const llvm::object::ELFFile::Elf_Sym & Sym, const llvm::object::ELFFile::Elf_Shdr * SymTab, DataRegion<llvm::object::ELFFile::Elf_Word> ShndxTable) const
  • public Expected<ArrayRef<uint8_t>> getSectionContents(const llvm::object::ELFFile::Elf_Shdr & Sec) const
  • public template <typename T>Expected<ArrayRef<T>> getSectionContentsAsArray(const llvm::object::ELFFile::Elf_Shdr & Sec) const
  • public Expected<uint32_t> getSectionIndex(const llvm::object::ELFFile::Elf_Sym & Sym, llvm::object::ELFFile::Elf_Sym_Range Syms, DataRegion<llvm::object::ELFFile::Elf_Word> ShndxTable) const
  • public Expected<llvm::StringRef> getSectionName(const llvm::object::ELFFile::Elf_Shdr & Section, llvm::StringRef DotShstrtab) const
  • public Expected<llvm::StringRef> getSectionName(const llvm::object::ELFFile::Elf_Shdr & Section, llvm::object::ELFFile::WarningHandler WarnHandler = &defaultWarningHandler) const
  • public Expected<llvm::StringRef> getSectionStringTable(llvm::object::ELFFile::Elf_Shdr_Range Sections, llvm::object::ELFFile::WarningHandler WarnHandler = &defaultWarningHandler) const
  • public Expected<ArrayRef<uint8_t>> getSegmentContents(const llvm::object::ELFFile::Elf_Phdr & Phdr) const
  • public Expected<llvm::StringRef> getStringTable(const llvm::object::ELFFile::Elf_Shdr & Section, llvm::object::ELFFile::WarningHandler WarnHandler = &defaultWarningHandler) const
  • public Expected<llvm::StringRef> getStringTableForSymtab(const llvm::object::ELFFile::Elf_Shdr & Section) const
  • public Expected<llvm::StringRef> getStringTableForSymtab(const llvm::object::ELFFile::Elf_Shdr & Section, llvm::object::ELFFile::Elf_Shdr_Range Sections) const
  • public Expected<const llvm::object::ELFFile::Elf_Sym *> getSymbol(const llvm::object::ELFFile::Elf_Shdr * Sec, uint32_t Index) const
  • public Expected<llvm::StringRef> getSymbolVersionByIndex(uint32_t SymbolVersionIndex, bool & IsDefault, SmallVector<Optional<llvm::object::VersionEntry>, 0> & VersionMap, Optional<bool> IsSymHidden) const
  • public Expected<std::vector<VerDef>> getVersionDefinitions(const llvm::object::ELFFile::Elf_Shdr & Sec) const
  • public Expected<std::vector<VerNeed>> getVersionDependencies(const llvm::object::ELFFile::Elf_Shdr & Sec, llvm::object::ELFFile::WarningHandler WarnHandler = &defaultWarningHandler) const
  • public bool isLE() const
  • public bool isMips64EL() const
  • public bool isMipsELF64() const
  • public Expected<SmallVector<Optional<llvm::object::VersionEntry>, 0>> loadVersionMap(const llvm::object::ELFFile::Elf_Shdr * VerNeedSec, const llvm::object::ELFFile::Elf_Shdr * VerDefSec) const
  • public iterator_range<llvm::object::ELFFile::Elf_Note_Iterator> notes(const llvm::object::ELFFile::Elf_Shdr & Shdr, llvm::Error & Err) const
  • public iterator_range<llvm::object::ELFFile::Elf_Note_Iterator> notes(const llvm::object::ELFFile::Elf_Phdr & Phdr, llvm::Error & Err) const
  • public llvm::object::ELFFile::Elf_Note_Iterator notes_begin(const llvm::object::ELFFile::Elf_Shdr & Shdr, llvm::Error & Err) const
  • public llvm::object::ELFFile::Elf_Note_Iterator notes_begin(const llvm::object::ELFFile::Elf_Phdr & Phdr, llvm::Error & Err) const
  • public llvm::object::ELFFile::Elf_Note_Iterator notes_end() const
  • public Expected<llvm::object::ELFFile::Elf_Phdr_Range> program_headers() const
  • public Expected<llvm::object::ELFFile::Elf_Rela_Range> relas(const llvm::object::ELFFile::Elf_Shdr & Sec) const
  • public Expected<llvm::object::ELFFile::Elf_Relr_Range> relrs(const llvm::object::ELFFile::Elf_Shdr & Sec) const
  • public Expected<llvm::object::ELFFile::Elf_Rel_Range> rels(const llvm::object::ELFFile::Elf_Shdr & Sec) const
  • public Expected<llvm::object::ELFFile::Elf_Shdr_Range> sections() const
  • public Expected<llvm::object::ELFFile::Elf_Sym_Range> symbols(const llvm::object::ELFFile::Elf_Shdr * Sec) const
  • public Expected<const uint8_t *> toMappedAddr(uint64_t VAddr, llvm::object::ELFFile::WarningHandler WarnHandler = &defaultWarningHandler) const

Methods

ELFFile<ELFT>(llvm::StringRef Object)

Declared at: llvm/include/llvm/Object/ELF.h:186

Parameters

llvm::StringRef Object

Expected<std::vector<Elf_Rela>> android_relas(
    const llvm::object::ELFFile::Elf_Shdr& Sec)
    const

Declared at: llvm/include/llvm/Object/ELF.h:278

Parameters

const llvm::object::ELFFile::Elf_Shdr& Sec

const uint8_t* base() const

Declared at: llvm/include/llvm/Object/ELF.h:177

static Expected<ELFFile<ELFT>> create(
    llvm::StringRef Object)

Declared at: llvm/include/llvm/Object/ELF.h:237

Parameters

llvm::StringRef Object

void createFakeSections()

Description

Used by llvm-objdump -d (which needs sections for disassembly) to disassemble objects without a section header table (e.g. ET_CORE objects analyzed by linux perf or ET_EXEC with llvm-strip --strip-sections).

Declared at: llvm/include/llvm/Object/ELF.h:394

Expected<std::vector<BBAddrMap>> decodeBBAddrMap(
    const llvm::object::ELFFile::Elf_Shdr& Sec)
    const

Declared at: llvm/include/llvm/Object/ELF.h:392

Parameters

const llvm::object::ELFFile::Elf_Shdr& Sec

std::vector<Elf_Rel> decode_relrs(
    llvm::object::ELFFile::Elf_Relr_Range relrs)
    const

Declared at: llvm/include/llvm/Object/ELF.h:276

Parameters

llvm::object::ELFFile::Elf_Relr_Range relrs

Expected<llvm::object::ELFFile::Elf_Dyn_Range>
dynamicEntries() const

Declared at: llvm/include/llvm/Object/ELF.h:252

const uint8_t* end() const

Declared at: llvm/include/llvm/Object/ELF.h:178

size_t getBufSize() const

Declared at: llvm/include/llvm/Object/ELF.h:180

Expected<uint64_t> getDynSymtabSize() const

Description

This function determines the number of dynamic symbols. It reads section headers first. If section headers are not available, the number of symbols will be inferred by parsing dynamic hash tables.

Declared at: llvm/include/llvm/Object/ELF.h:220

std::string getDynamicTagAsString(
    unsigned int Arch,
    uint64_t Type) const

Declared at: llvm/include/llvm/Object/ELF.h:227

Parameters

unsigned int Arch
uint64_t Type

std::string getDynamicTagAsString(
    uint64_t Type) const

Declared at: llvm/include/llvm/Object/ELF.h:228

Parameters

uint64_t Type

template <typename T>
Expected<const T*> getEntry(
    const llvm::object::ELFFile::Elf_Shdr&
        Section,
    uint32_t Entry) const

Declared at: llvm/include/llvm/Object/ELF.h:196

Templates

T

Parameters

const llvm::object::ELFFile::Elf_Shdr& Section
uint32_t Entry

template <typename T>
Expected<const T*> getEntry(uint32_t Section,
                            uint32_t Entry) const

Declared at: llvm/include/llvm/Object/ELF.h:194

Templates

T

Parameters

uint32_t Section
uint32_t Entry

const llvm::object::ELFFile::Elf_Ehdr& getHeader()
    const

Declared at: llvm/include/llvm/Object/ELF.h:189

Expected<llvm::StringRef> getLinkAsStrtab(
    const typename ELFT::Shdr& Sec) const

Declared at: llvm/include/llvm/Object/ELF.h:214

Parameters

const typename ELFT::Shdr& Sec

uint32_t getRelativeRelocationType() const

Declared at: llvm/include/llvm/Object/ELF.h:225

Expected<const llvm::object::ELFFile::Elf_Sym*>
getRelocationSymbol(
    const llvm::object::ELFFile::Elf_Rel& Rel,
    const llvm::object::ELFFile::Elf_Shdr* SymTab)
    const

Description

Get the symbol for a given relocation.

Declared at: llvm/include/llvm/Object/ELF.h:231

Parameters

const llvm::object::ELFFile::Elf_Rel& Rel
const llvm::object::ELFFile::Elf_Shdr* SymTab

llvm::StringRef getRelocationTypeName(
    uint32_t Type) const

Declared at: llvm/include/llvm/Object/ELF.h:222

Parameters

uint32_t Type

void getRelocationTypeName(
    uint32_t Type,
    SmallVectorImpl<char>& Result) const

Declared at: llvm/include/llvm/Object/ELF.h:223

Parameters

uint32_t Type
SmallVectorImpl<char>& Result

Expected<
    ArrayRef<llvm::object::ELFFile::Elf_Word>>
getSHNDXTable(
    const llvm::object::ELFFile::Elf_Shdr&
        Section,
    llvm::object::ELFFile::Elf_Shdr_Range
        Sections) const

Declared at: llvm/include/llvm/Object/ELF.h:217

Parameters

const llvm::object::ELFFile::Elf_Shdr& Section
llvm::object::ELFFile::Elf_Shdr_Range Sections

Expected<
    ArrayRef<llvm::object::ELFFile::Elf_Word>>
getSHNDXTable(
    const llvm::object::ELFFile::Elf_Shdr&
        Section) const

Declared at: llvm/include/llvm/Object/ELF.h:216

Parameters

const llvm::object::ELFFile::Elf_Shdr& Section

Expected<const llvm::object::ELFFile::Elf_Shdr*>
getSection(uint32_t Index) const

Declared at: llvm/include/llvm/Object/ELF.h:378

Parameters

uint32_t Index

Expected<const llvm::object::ELFFile::Elf_Shdr*>
getSection(
    const llvm::object::ELFFile::Elf_Sym& Sym,
    llvm::object::ELFFile::Elf_Sym_Range Symtab,
    DataRegion<llvm::object::ELFFile::Elf_Word>
        ShndxTable) const

Declared at: llvm/include/llvm/Object/ELF.h:375

Parameters

const llvm::object::ELFFile::Elf_Sym& Sym
llvm::object::ELFFile::Elf_Sym_Range Symtab
DataRegion<llvm::object::ELFFile::Elf_Word> ShndxTable

Expected<const llvm::object::ELFFile::Elf_Shdr*>
getSection(
    const llvm::object::ELFFile::Elf_Sym& Sym,
    const llvm::object::ELFFile::Elf_Shdr* SymTab,
    DataRegion<llvm::object::ELFFile::Elf_Word>
        ShndxTable) const

Declared at: llvm/include/llvm/Object/ELF.h:372

Parameters

const llvm::object::ELFFile::Elf_Sym& Sym
const llvm::object::ELFFile::Elf_Shdr* SymTab
DataRegion<llvm::object::ELFFile::Elf_Word> ShndxTable

Expected<ArrayRef<uint8_t>> getSectionContents(
    const llvm::object::ELFFile::Elf_Shdr& Sec)
    const

Declared at: llvm/include/llvm/Object/ELF.h:390

Parameters

const llvm::object::ELFFile::Elf_Shdr& Sec

template <typename T>
Expected<ArrayRef<T>> getSectionContentsAsArray(
    const llvm::object::ELFFile::Elf_Shdr& Sec)
    const

Declared at: llvm/include/llvm/Object/ELF.h:389

Templates

T

Parameters

const llvm::object::ELFFile::Elf_Shdr& Sec

Expected<uint32_t> getSectionIndex(
    const llvm::object::ELFFile::Elf_Sym& Sym,
    llvm::object::ELFFile::Elf_Sym_Range Syms,
    DataRegion<llvm::object::ELFFile::Elf_Word>
        ShndxTable) const

Declared at: llvm/include/llvm/Object/ELF.h:370

Parameters

const llvm::object::ELFFile::Elf_Sym& Sym
llvm::object::ELFFile::Elf_Sym_Range Syms
DataRegion<llvm::object::ELFFile::Elf_Word> ShndxTable

Expected<llvm::StringRef> getSectionName(
    const llvm::object::ELFFile::Elf_Shdr&
        Section,
    llvm::StringRef DotShstrtab) const

Declared at: llvm/include/llvm/Object/ELF.h:386

Parameters

const llvm::object::ELFFile::Elf_Shdr& Section
llvm::StringRef DotShstrtab

Expected<llvm::StringRef> getSectionName(
    const llvm::object::ELFFile::Elf_Shdr&
        Section,
    llvm::object::ELFFile::WarningHandler
        WarnHandler =
            &defaultWarningHandler) const

Declared at: llvm/include/llvm/Object/ELF.h:384

Parameters

const llvm::object::ELFFile::Elf_Shdr& Section
llvm::object::ELFFile::WarningHandler WarnHandler = &defaultWarningHandler

Expected<llvm::StringRef> getSectionStringTable(
    llvm::object::ELFFile::Elf_Shdr_Range
        Sections,
    llvm::object::ELFFile::WarningHandler
        WarnHandler =
            &defaultWarningHandler) const

Declared at: llvm/include/llvm/Object/ELF.h:367

Parameters

llvm::object::ELFFile::Elf_Shdr_Range Sections
llvm::object::ELFFile::WarningHandler WarnHandler = &defaultWarningHandler

Expected<ArrayRef<uint8_t>> getSegmentContents(
    const llvm::object::ELFFile::Elf_Phdr& Phdr)
    const

Declared at: llvm/include/llvm/Object/ELF.h:391

Parameters

const llvm::object::ELFFile::Elf_Phdr& Phdr

Expected<llvm::StringRef> getStringTable(
    const llvm::object::ELFFile::Elf_Shdr&
        Section,
    llvm::object::ELFFile::WarningHandler
        WarnHandler =
            &defaultWarningHandler) const

Declared at: llvm/include/llvm/Object/ELF.h:209

Parameters

const llvm::object::ELFFile::Elf_Shdr& Section
llvm::object::ELFFile::WarningHandler WarnHandler = &defaultWarningHandler

Expected<llvm::StringRef> getStringTableForSymtab(
    const llvm::object::ELFFile::Elf_Shdr&
        Section) const

Declared at: llvm/include/llvm/Object/ELF.h:211

Parameters

const llvm::object::ELFFile::Elf_Shdr& Section

Expected<llvm::StringRef> getStringTableForSymtab(
    const llvm::object::ELFFile::Elf_Shdr&
        Section,
    llvm::object::ELFFile::Elf_Shdr_Range
        Sections) const

Declared at: llvm/include/llvm/Object/ELF.h:212

Parameters

const llvm::object::ELFFile::Elf_Shdr& Section
llvm::object::ELFFile::Elf_Shdr_Range Sections

Expected<const llvm::object::ELFFile::Elf_Sym*>
getSymbol(
    const llvm::object::ELFFile::Elf_Shdr* Sec,
    uint32_t Index) const

Declared at: llvm/include/llvm/Object/ELF.h:380

Parameters

const llvm::object::ELFFile::Elf_Shdr* Sec
uint32_t Index

Expected<llvm::StringRef> getSymbolVersionByIndex(
    uint32_t SymbolVersionIndex,
    bool& IsDefault,
    SmallVector<
        Optional<llvm::object::VersionEntry>,
        0>& VersionMap,
    Optional<bool> IsSymHidden) const

Declared at: llvm/include/llvm/Object/ELF.h:204

Parameters

uint32_t SymbolVersionIndex
bool& IsDefault
SmallVector<Optional<llvm::object::VersionEntry>, 0>& VersionMap
Optional<bool> IsSymHidden

Expected<std::vector<VerDef>>
getVersionDefinitions(
    const llvm::object::ELFFile::Elf_Shdr& Sec)
    const

Declared at: llvm/include/llvm/Object/ELF.h:199

Parameters

const llvm::object::ELFFile::Elf_Shdr& Sec

Expected<std::vector<VerNeed>>
getVersionDependencies(
    const llvm::object::ELFFile::Elf_Shdr& Sec,
    llvm::object::ELFFile::WarningHandler
        WarnHandler =
            &defaultWarningHandler) const

Declared at: llvm/include/llvm/Object/ELF.h:200

Parameters

const llvm::object::ELFFile::Elf_Shdr& Sec
llvm::object::ELFFile::WarningHandler WarnHandler = &defaultWarningHandler

bool isLE() const

Declared at: llvm/include/llvm/Object/ELF.h:239

bool isMips64EL() const

Declared at: llvm/include/llvm/Object/ELF.h:248

bool isMipsELF64() const

Declared at: llvm/include/llvm/Object/ELF.h:243

Expected<SmallVector<
    Optional<llvm::object::VersionEntry>,
    0>>
loadVersionMap(
    const llvm::object::ELFFile::Elf_Shdr*
        VerNeedSec,
    const llvm::object::ELFFile::Elf_Shdr*
        VerDefSec) const

Declared at: llvm/include/llvm/Object/ELF.h:235

Parameters

const llvm::object::ELFFile::Elf_Shdr* VerNeedSec
const llvm::object::ELFFile::Elf_Shdr* VerDefSec

iterator_range<
    llvm::object::ELFFile::Elf_Note_Iterator>
notes(const llvm::object::ELFFile::Elf_Shdr& Shdr,
      llvm::Error& Err) const

Description

Get an iterator range over notes of a section. The section must be of type \c SHT_NOTE.

Declared at: llvm/include/llvm/Object/ELF.h:362

Parameters

const llvm::object::ELFFile::Elf_Shdr& Shdr
the section to iterate over.
llvm::Error& Err
[out] an error to support fallible iteration, which should be checked after iteration ends.

iterator_range<
    llvm::object::ELFFile::Elf_Note_Iterator>
notes(const llvm::object::ELFFile::Elf_Phdr& Phdr,
      llvm::Error& Err) const

Description

Get an iterator range over notes of a program header. The program header must be of type \c PT_NOTE.

Declared at: llvm/include/llvm/Object/ELF.h:350

Parameters

const llvm::object::ELFFile::Elf_Phdr& Phdr
the program header to iterate over.
llvm::Error& Err
[out] an error to support fallible iteration, which should be checked after iteration ends.

llvm::object::ELFFile::Elf_Note_Iterator
notes_begin(
    const llvm::object::ELFFile::Elf_Shdr& Shdr,
    llvm::Error& Err) const

Description

Get an iterator over notes in a section. The section must be of type \c SHT_NOTE.

Declared at: llvm/include/llvm/Object/ELF.h:326

Parameters

const llvm::object::ELFFile::Elf_Shdr& Shdr
the section to iterate over.
llvm::Error& Err
[out] an error to support fallible iteration, which should be checked after iteration ends.

llvm::object::ELFFile::Elf_Note_Iterator
notes_begin(
    const llvm::object::ELFFile::Elf_Phdr& Phdr,
    llvm::Error& Err) const

Description

Get an iterator over notes in a program header. The program header must be of type \c PT_NOTE.

Declared at: llvm/include/llvm/Object/ELF.h:307

Parameters

const llvm::object::ELFFile::Elf_Phdr& Phdr
the program header to iterate over.
llvm::Error& Err
[out] an error to support fallible iteration, which should be checked after iteration ends.

llvm::object::ELFFile::Elf_Note_Iterator
notes_end() const

Description

Get the end iterator for notes.

Declared at: llvm/include/llvm/Object/ELF.h:339

Expected<llvm::object::ELFFile::Elf_Phdr_Range>
program_headers() const

Description

Iterate over program header table.

Declared at: llvm/include/llvm/Object/ELF.h:281

Expected<llvm::object::ELFFile::Elf_Rela_Range>
relas(const llvm::object::ELFFile::Elf_Shdr& Sec)
    const

Declared at: llvm/include/llvm/Object/ELF.h:264

Parameters

const llvm::object::ELFFile::Elf_Shdr& Sec

Expected<llvm::object::ELFFile::Elf_Relr_Range>
relrs(const llvm::object::ELFFile::Elf_Shdr& Sec)
    const

Declared at: llvm/include/llvm/Object/ELF.h:272

Parameters

const llvm::object::ELFFile::Elf_Shdr& Sec

Expected<llvm::object::ELFFile::Elf_Rel_Range>
rels(const llvm::object::ELFFile::Elf_Shdr& Sec)
    const

Declared at: llvm/include/llvm/Object/ELF.h:268

Parameters

const llvm::object::ELFFile::Elf_Shdr& Sec

Expected<llvm::object::ELFFile::Elf_Shdr_Range>
sections() const

Declared at: llvm/include/llvm/Object/ELF.h:250

Expected<llvm::object::ELFFile::Elf_Sym_Range>
symbols(const llvm::object::ELFFile::Elf_Shdr*
            Sec) const

Declared at: llvm/include/llvm/Object/ELF.h:258

Parameters

const llvm::object::ELFFile::Elf_Shdr* Sec

Expected<const uint8_t*> toMappedAddr(
    uint64_t VAddr,
    llvm::object::ELFFile::WarningHandler
        WarnHandler =
            &defaultWarningHandler) const

Declared at: llvm/include/llvm/Object/ELF.h:255

Parameters

uint64_t VAddr
llvm::object::ELFFile::WarningHandler WarnHandler = &defaultWarningHandler