mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-03-04 10:30:30 +00:00
Move a free function out of ELFFile.
llvm-svn: 285920
This commit is contained in:
parent
a4e8e9604c
commit
fc483a4565
@ -150,9 +150,6 @@ public:
|
||||
ErrorOr<uint32_t>
|
||||
getExtendedSymbolTableIndex(const Elf_Sym *Sym, const Elf_Shdr *SymTab,
|
||||
ArrayRef<Elf_Word> ShndxTable) const;
|
||||
ErrorOr<uint32_t>
|
||||
getExtendedSymbolTableIndex(const Elf_Sym *Sym, const Elf_Sym *FirstSym,
|
||||
ArrayRef<Elf_Word> ShndxTable) const;
|
||||
const Elf_Ehdr *getHeader() const { return Header; }
|
||||
ErrorOr<uint32_t> getSectionIndex(const Elf_Sym *Sym, const Elf_Shdr *SymTab,
|
||||
ArrayRef<Elf_Word> ShndxTable) const;
|
||||
@ -194,19 +191,10 @@ getSection(typename ELFT::ShdrRange Sections, uint32_t Index) {
|
||||
}
|
||||
|
||||
template <class ELFT>
|
||||
ErrorOr<uint32_t> ELFFile<ELFT>::getExtendedSymbolTableIndex(
|
||||
const Elf_Sym *Sym, const Elf_Shdr *SymTab,
|
||||
ArrayRef<Elf_Word> ShndxTable) const {
|
||||
auto SymsOrErr = symbols(SymTab);
|
||||
if (std::error_code EC = SymsOrErr.getError())
|
||||
return EC;
|
||||
return getExtendedSymbolTableIndex(Sym, SymsOrErr->begin(), ShndxTable);
|
||||
}
|
||||
|
||||
template <class ELFT>
|
||||
ErrorOr<uint32_t> ELFFile<ELFT>::getExtendedSymbolTableIndex(
|
||||
const Elf_Sym *Sym, const Elf_Sym *FirstSym,
|
||||
ArrayRef<Elf_Word> ShndxTable) const {
|
||||
inline ErrorOr<uint32_t>
|
||||
getExtendedSymbolTableIndex(const typename ELFT::Sym *Sym,
|
||||
const typename ELFT::Sym *FirstSym,
|
||||
ArrayRef<typename ELFT::Word> ShndxTable) {
|
||||
assert(Sym->st_shndx == ELF::SHN_XINDEX);
|
||||
unsigned Index = Sym - FirstSym;
|
||||
if (Index >= ShndxTable.size())
|
||||
@ -215,6 +203,17 @@ ErrorOr<uint32_t> ELFFile<ELFT>::getExtendedSymbolTableIndex(
|
||||
return ShndxTable[Index];
|
||||
}
|
||||
|
||||
template <class ELFT>
|
||||
ErrorOr<uint32_t> ELFFile<ELFT>::getExtendedSymbolTableIndex(
|
||||
const Elf_Sym *Sym, const Elf_Shdr *SymTab,
|
||||
ArrayRef<Elf_Word> ShndxTable) const {
|
||||
auto SymsOrErr = symbols(SymTab);
|
||||
if (std::error_code EC = SymsOrErr.getError())
|
||||
return EC;
|
||||
return object::getExtendedSymbolTableIndex<ELFT>(Sym, SymsOrErr->begin(),
|
||||
ShndxTable);
|
||||
}
|
||||
|
||||
template <class ELFT>
|
||||
ErrorOr<uint32_t>
|
||||
ELFFile<ELFT>::getSectionIndex(const Elf_Sym *Sym, const Elf_Shdr *SymTab,
|
||||
|
@ -696,11 +696,11 @@ std::string ELFDumper<ELFT>::getFullSymbolName(const Elf_Sym *Symbol,
|
||||
return FullSymbolName;
|
||||
}
|
||||
|
||||
template <typename ELFO>
|
||||
template <typename ELFT>
|
||||
static void
|
||||
getSectionNameIndex(const ELFO &Obj, const typename ELFO::Elf_Sym *Symbol,
|
||||
const typename ELFO::Elf_Sym *FirstSym,
|
||||
ArrayRef<typename ELFO::Elf_Word> ShndxTable,
|
||||
getSectionNameIndex(const ELFFile<ELFT> &Obj, const typename ELFT::Sym *Symbol,
|
||||
const typename ELFT::Sym *FirstSym,
|
||||
ArrayRef<typename ELFT::Word> ShndxTable,
|
||||
StringRef &SectionName, unsigned &SectionIndex) {
|
||||
SectionIndex = Symbol->st_shndx;
|
||||
if (Symbol->isUndefined())
|
||||
@ -717,9 +717,9 @@ getSectionNameIndex(const ELFO &Obj, const typename ELFO::Elf_Sym *Symbol,
|
||||
SectionName = "Reserved";
|
||||
else {
|
||||
if (SectionIndex == SHN_XINDEX)
|
||||
SectionIndex = unwrapOrError(
|
||||
Obj.getExtendedSymbolTableIndex(Symbol, FirstSym, ShndxTable));
|
||||
const typename ELFO::Elf_Shdr *Sec =
|
||||
SectionIndex = unwrapOrError(object::getExtendedSymbolTableIndex<ELFT>(
|
||||
Symbol, FirstSym, ShndxTable));
|
||||
const typename ELFT::Shdr *Sec =
|
||||
unwrapOrError(Obj.getSection(SectionIndex));
|
||||
SectionName = unwrapOrError(Obj.getSectionName(Sec));
|
||||
}
|
||||
@ -2737,7 +2737,7 @@ std::string GNUStyle<ELFT>::getSymbolSectionNdx(const ELFO *Obj,
|
||||
case ELF::SHN_COMMON:
|
||||
return "COM";
|
||||
case ELF::SHN_XINDEX:
|
||||
SectionIndex = unwrapOrError(Obj->getExtendedSymbolTableIndex(
|
||||
SectionIndex = unwrapOrError(object::getExtendedSymbolTableIndex<ELFT>(
|
||||
Symbol, FirstSym, this->dumper()->getShndxTable()));
|
||||
default:
|
||||
// Find if:
|
||||
|
Loading…
x
Reference in New Issue
Block a user