LLVM 22.0.0git
llvm::objcopy::elf::ELFFile< ELFT > Class Template Reference

#include "llvm/Object/ELF.h"

Inheritance diagram for llvm::objcopy::elf::ELFFile< ELFT >:
[legend]

Public Types

using WarningHandler = llvm::function_ref<Error(const Twine &Msg)>
using RelsOrRelas = std::pair<std::vector<Elf_Rel>, std::vector<Elf_Rela>>

Public Member Functions

 ELFFile (const ELFFile &)=default
 ELFFile (ELFFile &&)=default
ELFFileoperator= (const ELFFile &)=default
const uint8_tbase () const
const uint8_tend () const
size_t getBufSize () const
Expected< uint32_tgetPhNum () const
Expected< uint64_tgetShNum () const
Expected< uint32_tgetShStrNdx () const
const Elf_Ehdr & getHeader () const
template<typename T>
Expected< const T * > getEntry (uint32_t Section, uint32_t Entry) const
template<typename T>
Expected< const T * > getEntry (const Elf_Shdr &Section, uint32_t Entry) const
Expected< std::vector< VerDef > > getVersionDefinitions (const Elf_Shdr &Sec) const
Expected< std::vector< VerNeed > > getVersionDependencies (const Elf_Shdr &Sec, WarningHandler WarnHandler=&defaultWarningHandler) const
Expected< StringRefgetSymbolVersionByIndex (uint32_t SymbolVersionIndex, bool &IsDefault, SmallVector< std::optional< VersionEntry >, 0 > &VersionMap, std::optional< bool > IsSymHidden) const
Expected< StringRefgetStringTable (const Elf_Shdr &Section, WarningHandler WarnHandler=&defaultWarningHandler) const
Expected< StringRefgetStringTableForSymtab (const Elf_Shdr &Section) const
Expected< StringRefgetStringTableForSymtab (const Elf_Shdr &Section, Elf_Shdr_Range Sections) const
Expected< StringRefgetLinkAsStrtab (const typename ELFT::Shdr &Sec) const
Expected< ArrayRef< Elf_Word > > getSHNDXTable (const Elf_Shdr &Section) const
Expected< ArrayRef< Elf_Word > > getSHNDXTable (const Elf_Shdr &Section, Elf_Shdr_Range Sections) const
Expected< uint64_tgetDynSymtabSize () const
 This function determines the number of dynamic symbols.
StringRef getRelocationTypeName (uint32_t Type) const
void getRelocationTypeName (uint32_t Type, SmallVectorImpl< char > &Result) const
uint32_t getRelativeRelocationType () const
std::string getDynamicTagAsString (unsigned Arch, uint64_t Type) const
std::string getDynamicTagAsString (uint64_t Type) const
Expected< const Elf_Sym * > getRelocationSymbol (const Elf_Rel &Rel, const Elf_Shdr *SymTab) const
 Get the symbol for a given relocation.
Expected< SmallVector< std::optional< VersionEntry >, 0 > > loadVersionMap (const Elf_Shdr *VerNeedSec, const Elf_Shdr *VerDefSec) const
bool isLE () const
bool isMipsELF64 () const
bool isMips64EL () const
Expected< Elf_Shdr_Range > sections () const
Expected< Elf_Dyn_Range > dynamicEntries () const
Expected< const uint8_t * > toMappedAddr (uint64_t VAddr, WarningHandler WarnHandler=&defaultWarningHandler) const
Expected< Elf_Sym_Range > symbols (const Elf_Shdr *Sec) const
Expected< Elf_Rela_Range > relas (const Elf_Shdr &Sec) const
Expected< Elf_Rel_Range > rels (const Elf_Shdr &Sec) const
Expected< Elf_Relr_Range > relrs (const Elf_Shdr &Sec) const
std::vector< Elf_Rel > decode_relrs (Elf_Relr_Range relrs) const
Expected< uint64_tgetCrelHeader (ArrayRef< uint8_t > Content) const
Expected< RelsOrRelasdecodeCrel (ArrayRef< uint8_t > Content) const
Expected< RelsOrRelascrels (const Elf_Shdr &Sec) const
Expected< std::vector< Elf_Rela > > android_relas (const Elf_Shdr &Sec) const
Expected< Elf_Phdr_Range > program_headers () const
 Iterate over program header table.
Elf_Note_Iterator notes_begin (const Elf_Phdr &Phdr, Error &Err) const
 Get an iterator over notes in a program header.
Elf_Note_Iterator notes_begin (const Elf_Shdr &Shdr, Error &Err) const
 Get an iterator over notes in a section.
Elf_Note_Iterator notes_end () const
 Get the end iterator for notes.
iterator_range< Elf_Note_Iterator > notes (const Elf_Phdr &Phdr, Error &Err) const
 Get an iterator range over notes of a program header.
iterator_range< Elf_Note_Iterator > notes (const Elf_Shdr &Shdr, Error &Err) const
 Get an iterator range over notes of a section.
Expected< StringRefgetSectionStringTable (Elf_Shdr_Range Sections, WarningHandler WarnHandler=&defaultWarningHandler) const
Expected< uint32_tgetSectionIndex (const Elf_Sym &Sym, Elf_Sym_Range Syms, DataRegion< Elf_Word > ShndxTable) const
Expected< const Elf_Shdr * > getSection (const Elf_Sym &Sym, const Elf_Shdr *SymTab, DataRegion< Elf_Word > ShndxTable) const
Expected< const Elf_Shdr * > getSection (const Elf_Sym &Sym, Elf_Sym_Range Symtab, DataRegion< Elf_Word > ShndxTable) const
Expected< const Elf_Shdr * > getSection (uint32_t Index) const
Expected< const Elf_Sym * > getSymbol (const Elf_Shdr *Sec, uint32_t Index) const
Expected< StringRefgetSectionName (const Elf_Shdr &Section, WarningHandler WarnHandler=&defaultWarningHandler) const
Expected< StringRefgetSectionName (const Elf_Shdr &Section, StringRef DotShstrtab) const
template<typename T>
Expected< ArrayRef< T > > getSectionContentsAsArray (const Elf_Shdr &Sec) const
Expected< ArrayRef< uint8_t > > getSectionContents (const Elf_Shdr &Sec) const
Expected< ArrayRef< uint8_t > > getSegmentContents (const Elf_Phdr &Phdr) const
Expected< std::vector< BBAddrMap > > decodeBBAddrMap (const Elf_Shdr &Sec, const Elf_Shdr *RelaSec=nullptr, std::vector< PGOAnalysisMap > *PGOAnalyses=nullptr) const
 Returns a vector of BBAddrMap structs corresponding to each function within the text section that the SHT_LLVM_BB_ADDR_MAP section Sec is associated with.
Expected< MapVector< const Elf_Shdr *, const Elf_Shdr * > > getSectionAndRelocations (std::function< Expected< bool >(const Elf_Shdr &)> IsMatch) const
 Returns a map from every section matching IsMatch to its relocation section, or nullptr if it has no relocation section.
void createFakeSections ()
 Used by llvm-objdump -d (which needs sections for disassembly) to disassemble objects without a section header table (e.g.

Static Public Member Functions

static Expected< ELFFilecreate (StringRef Object)

Detailed Description

template<class ELFT>
class llvm::objcopy::elf::ELFFile< ELFT >

Definition at line 255 of file ELF.h.

Member Typedef Documentation

◆ RelsOrRelas

template<class ELFT>
using llvm::object::ELFFile< ELFT >::RelsOrRelas = std::pair<std::vector<Elf_Rel>, std::vector<Elf_Rela>>

Definition at line 413 of file ELF.h.

◆ WarningHandler

template<class ELFT>
using llvm::object::ELFFile< ELFT >::WarningHandler = llvm::function_ref<Error(const Twine &Msg)>

Definition at line 271 of file ELF.h.

Constructor & Destructor Documentation

◆ ELFFile() [1/2]

template<class ELFT>
llvm::object::ELFFile< ELFT >::ELFFile ( const ELFFile< ELFT > & )
default

◆ ELFFile() [2/2]

template<class ELFT>
llvm::object::ELFFile< ELFT >::ELFFile ( ELFFile< ELFT > && )
default

Member Function Documentation

◆ android_relas()

template<class ELFT>
Expected< std::vector< typename ELFT::Rela > > ELFFile::android_relas ( const Elf_Shdr & Sec) const

Definition at line 455 of file ELF.cpp.

◆ base()

template<class ELFT>
const uint8_t * llvm::object::ELFFile< ELFT >::base ( ) const
inline

Definition at line 273 of file ELF.h.

◆ create()

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

Definition at line 963 of file ELF.h.

Referenced by llvm::objcopy::elf::ELFBuilder< ELFT >::build().

◆ createFakeSections()

template<class ELFT>
void llvm::object::ELFFile< ELFT >::createFakeSections ( )

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).

Definition at line 974 of file ELF.h.

◆ crels()

template<class ELFT>
Expected< typename ELFFile< ELFT >::RelsOrRelas > ELFFile::crels ( const Elf_Shdr & Sec) const

Definition at line 446 of file ELF.cpp.

◆ decode_relrs()

template<class ELFT>
std::vector< typename ELFT::Rel > ELFFile::decode_relrs ( Elf_Relr_Range relrs) const

Definition at line 339 of file ELF.cpp.

◆ decodeBBAddrMap()

template<class ELFT>
Expected< std::vector< BBAddrMap > > ELFFile::decodeBBAddrMap ( const Elf_Shdr & Sec,
const Elf_Shdr * RelaSec = nullptr,
std::vector< PGOAnalysisMap > * PGOAnalyses = nullptr ) const

Returns a vector of BBAddrMap structs corresponding to each function within the text section that the SHT_LLVM_BB_ADDR_MAP section Sec is associated with.

If the current ELFFile is relocatable, a corresponding RelaSec must be passed in as an argument. Optional out variable to collect all PGO Analyses. New elements are only added if no error occurs. If not provided, the PGO Analyses are decoded then ignored.

Definition at line 998 of file ELF.cpp.

◆ decodeCrel()

template<class ELFT>
Expected< typename ELFFile< ELFT >::RelsOrRelas > ELFFile::decodeCrel ( ArrayRef< uint8_t > Content) const

Definition at line 415 of file ELF.cpp.

◆ dynamicEntries()

template<class ELFT>
Expected< typename ELFT::DynRange > ELFFile::dynamicEntries ( ) const

Definition at line 612 of file ELF.cpp.

◆ end()

template<class ELFT>
const uint8_t * llvm::object::ELFFile< ELFT >::end ( ) const
inline

Definition at line 274 of file ELF.h.

◆ getBufSize()

template<class ELFT>
size_t llvm::object::ELFFile< ELFT >::getBufSize ( ) const
inline

Definition at line 276 of file ELF.h.

◆ getCrelHeader()

template<class ELFT>
Expected< uint64_t > ELFFile::getCrelHeader ( ArrayRef< uint8_t > Content) const

Definition at line 403 of file ELF.cpp.

◆ getDynamicTagAsString() [1/2]

template<class ELFT>
std::string ELFFile::getDynamicTagAsString ( uint64_t Type) const

Definition at line 607 of file ELF.cpp.

◆ getDynamicTagAsString() [2/2]

template<class ELFT>
std::string ELFFile::getDynamicTagAsString ( unsigned Arch,
uint64_t Type ) const

Definition at line 523 of file ELF.cpp.

◆ getDynSymtabSize()

template<class ELFT>
Expected< uint64_t > llvm::object::ELFFile< ELFT >::getDynSymtabSize ( ) const

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.

Definition at line 871 of file ELF.h.

◆ getEntry() [1/2]

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

Definition at line 1065 of file ELF.h.

◆ getEntry() [2/2]

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

Definition at line 1055 of file ELF.h.

◆ getHeader()

template<class ELFT>
const Elf_Ehdr & llvm::object::ELFFile< ELFT >::getHeader ( ) const
inline

Definition at line 323 of file ELF.h.

◆ getLinkAsStrtab()

template<class ELFT>
Expected< StringRef > llvm::object::ELFFile< ELFT >::getLinkAsStrtab ( const typename ELFT::Shdr & Sec) const

Definition at line 1383 of file ELF.h.

◆ getPhNum()

template<class ELFT>
Expected< uint32_t > llvm::object::ELFFile< ELFT >::getPhNum ( ) const
inline

Definition at line 299 of file ELF.h.

◆ getRelativeRelocationType()

template<class ELFT>
uint32_t llvm::object::ELFFile< ELFT >::getRelativeRelocationType ( ) const

Definition at line 763 of file ELF.h.

◆ getRelocationSymbol()

template<class ELFT>
Expected< const typename ELFT::Sym * > llvm::object::ELFFile< ELFT >::getRelocationSymbol ( const Elf_Rel & Rel,
const Elf_Shdr * SymTab ) const

Get the symbol for a given relocation.

Definition at line 806 of file ELF.h.

◆ getRelocationTypeName() [1/2]

template<class ELFT>
StringRef llvm::object::ELFFile< ELFT >::getRelocationTypeName ( uint32_t Type) const

Definition at line 727 of file ELF.h.

◆ getRelocationTypeName() [2/2]

template<class ELFT>
void llvm::object::ELFFile< ELFT >::getRelocationTypeName ( uint32_t Type,
SmallVectorImpl< char > & Result ) const

Definition at line 732 of file ELF.h.

◆ getSection() [1/3]

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

Definition at line 627 of file ELF.h.

◆ getSection() [2/3]

template<class ELFT>
Expected< const typename ELFT::Shdr * > llvm::object::ELFFile< ELFT >::getSection ( const Elf_Sym & Sym,
Elf_Sym_Range Symtab,
DataRegion< Elf_Word > ShndxTable ) const

Definition at line 637 of file ELF.h.

◆ getSection() [3/3]

template<class ELFT>
Expected< const typename ELFT::Shdr * > llvm::object::ELFFile< ELFT >::getSection ( uint32_t Index) const

Definition at line 1286 of file ELF.h.

◆ getSectionAndRelocations()

template<class ELFT>
Expected< MapVector< const typename ELFT::Shdr *, const typename ELFT::Shdr * > > ELFFile::getSectionAndRelocations ( std::function< Expected< bool >(const Elf_Shdr &)> IsMatch) const

Returns a map from every section matching IsMatch to its relocation section, or nullptr if it has no relocation section.

This function returns an error if any of the IsMatch calls fail or if it fails to retrieve the content section of any relocation section.

Definition at line 1011 of file ELF.cpp.

◆ getSectionContents()

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

Definition at line 722 of file ELF.h.

◆ getSectionContentsAsArray()

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

Definition at line 666 of file ELF.h.

◆ getSectionIndex()

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

Definition at line 610 of file ELF.h.

◆ getSectionName() [1/2]

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

Definition at line 1412 of file ELF.h.

◆ getSectionName() [2/2]

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

Definition at line 1400 of file ELF.h.

◆ getSectionStringTable()

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

Definition at line 816 of file ELF.h.

◆ getSegmentContents()

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

Definition at line 702 of file ELF.h.

◆ getSHNDXTable() [1/2]

template<class ELFT>
Expected< ArrayRef< typename ELFT::Word > > llvm::object::ELFFile< ELFT >::getSHNDXTable ( const Elf_Shdr & Section) const

Definition at line 1321 of file ELF.h.

◆ getSHNDXTable() [2/2]

template<class ELFT>
Expected< ArrayRef< typename ELFT::Word > > llvm::object::ELFFile< ELFT >::getSHNDXTable ( const Elf_Shdr & Section,
Elf_Shdr_Range Sections ) const

Definition at line 1330 of file ELF.h.

◆ getShNum()

template<class ELFT>
Expected< uint64_t > llvm::object::ELFFile< ELFT >::getShNum ( ) const
inline

Definition at line 307 of file ELF.h.

◆ getShStrNdx()

template<class ELFT>
Expected< uint32_t > llvm::object::ELFFile< ELFT >::getShStrNdx ( ) const
inline

Definition at line 315 of file ELF.h.

◆ getStringTable()

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

Definition at line 1295 of file ELF.h.

◆ getStringTableForSymtab() [1/2]

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

Definition at line 1359 of file ELF.h.

◆ getStringTableForSymtab() [2/2]

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

Definition at line 1368 of file ELF.h.

◆ getSymbol()

template<class ELFT>
Expected< const typename ELFT::Sym * > llvm::object::ELFFile< ELFT >::getSymbol ( const Elf_Shdr * Sec,
uint32_t Index ) const

Definition at line 650 of file ELF.h.

◆ getSymbolVersionByIndex()

template<typename ELFT>
Expected< StringRef > llvm::object::ELFFile< ELFT >::getSymbolVersionByIndex ( uint32_t SymbolVersionIndex,
bool & IsDefault,
SmallVector< std::optional< VersionEntry >, 0 > & VersionMap,
std::optional< bool > IsSymHidden ) const

Definition at line 1082 of file ELF.h.

◆ getVersionDefinitions()

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

Definition at line 1111 of file ELF.h.

◆ getVersionDependencies()

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

Definition at line 1198 of file ELF.h.

◆ isLE()

template<class ELFT>
bool llvm::object::ELFFile< ELFT >::isLE ( ) const
inline

Definition at line 373 of file ELF.h.

◆ isMips64EL()

template<class ELFT>
bool llvm::object::ELFFile< ELFT >::isMips64EL ( ) const
inline

Definition at line 382 of file ELF.h.

◆ isMipsELF64()

template<class ELFT>
bool llvm::object::ELFFile< ELFT >::isMipsELF64 ( ) const
inline

Definition at line 377 of file ELF.h.

◆ loadVersionMap()

template<class ELFT>
Expected< SmallVector< std::optional< VersionEntry >, 0 > > llvm::object::ELFFile< ELFT >::loadVersionMap ( const Elf_Shdr * VerNeedSec,
const Elf_Shdr * VerDefSec ) const

Definition at line 769 of file ELF.h.

◆ notes() [1/2]

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

Get an iterator range over notes of a program header.

The program header must be of type PT_NOTE.

Parameters
Phdrthe program header to iterate over.
Err[out] an error to support fallible iteration, which should be checked after iteration ends.

Definition at line 512 of file ELF.h.

◆ notes() [2/2]

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

Get an iterator range over notes of a section.

The section must be of type SHT_NOTE.

Parameters
Shdrthe section to iterate over.
Err[out] an error to support fallible iteration, which should be checked after iteration ends.

Definition at line 524 of file ELF.h.

◆ notes_begin() [1/2]

template<class ELFT>
Elf_Note_Iterator llvm::object::ELFFile< ELFT >::notes_begin ( const Elf_Phdr & Phdr,
Error & Err ) const
inline

Get an iterator over notes in a program header.

The program header must be of type PT_NOTE.

Parameters
Phdrthe program header to iterate over.
Err[out] an error to support fallible iteration, which should be checked after iteration ends.

Definition at line 450 of file ELF.h.

◆ notes_begin() [2/2]

template<class ELFT>
Elf_Note_Iterator llvm::object::ELFFile< ELFT >::notes_begin ( const Elf_Shdr & Shdr,
Error & Err ) const
inline

Get an iterator over notes in a section.

The section must be of type SHT_NOTE.

Parameters
Shdrthe section to iterate over.
Err[out] an error to support fallible iteration, which should be checked after iteration ends.

Definition at line 479 of file ELF.h.

◆ notes_end()

template<class ELFT>
Elf_Note_Iterator llvm::object::ELFFile< ELFT >::notes_end ( ) const
inline

Get the end iterator for notes.

Definition at line 501 of file ELF.h.

◆ operator=()

template<class ELFT>
ELFFile & llvm::object::ELFFile< ELFT >::operator= ( const ELFFile< ELFT > & )
default

◆ program_headers()

template<class ELFT>
Expected< Elf_Phdr_Range > llvm::object::ELFFile< ELFT >::program_headers ( ) const
inline

Iterate over program header table.

Definition at line 420 of file ELF.h.

◆ relas()

template<class ELFT>
Expected< Elf_Rela_Range > llvm::object::ELFFile< ELFT >::relas ( const Elf_Shdr & Sec) const
inline

Definition at line 398 of file ELF.h.

◆ relrs()

template<class ELFT>
Expected< Elf_Relr_Range > llvm::object::ELFFile< ELFT >::relrs ( const Elf_Shdr & Sec) const
inline

Definition at line 406 of file ELF.h.

◆ rels()

template<class ELFT>
Expected< Elf_Rel_Range > llvm::object::ELFFile< ELFT >::rels ( const Elf_Shdr & Sec) const
inline

Definition at line 402 of file ELF.h.

◆ sections()

template<class ELFT>
Expected< typename ELFT::ShdrRange > llvm::object::ELFFile< ELFT >::sections ( ) const

Definition at line 1000 of file ELF.h.

◆ symbols()

template<class ELFT>
Expected< Elf_Sym_Range > llvm::object::ELFFile< ELFT >::symbols ( const Elf_Shdr * Sec) const
inline

Definition at line 392 of file ELF.h.

◆ toMappedAddr()

template<class ELFT>
Expected< const uint8_t * > ELFFile::toMappedAddr ( uint64_t VAddr,
WarningHandler WarnHandler = &defaultWarningHandler ) const

Definition at line 664 of file ELF.cpp.


The documentation for this class was generated from the following files: