forked from OSchip/llvm-project
Add a version of getSymbol with an explicit symbol table. Use it. NFC.
llvm-svn: 243011
This commit is contained in:
parent
454d145395
commit
651ed6c7d8
|
@ -268,7 +268,13 @@ public:
|
||||||
const Elf_Ehdr *getHeader() const { return Header; }
|
const Elf_Ehdr *getHeader() const { return Header; }
|
||||||
ErrorOr<const Elf_Shdr *> getSection(const Elf_Sym *symb) const;
|
ErrorOr<const Elf_Shdr *> getSection(const Elf_Sym *symb) const;
|
||||||
ErrorOr<const Elf_Shdr *> getSection(uint32_t Index) const;
|
ErrorOr<const Elf_Shdr *> getSection(uint32_t Index) const;
|
||||||
const Elf_Sym *getSymbol(uint32_t index) const;
|
|
||||||
|
const Elf_Sym *getSymbol(const Elf_Shdr *Sec, uint32_t Index) const {
|
||||||
|
return &*(symbol_begin(Sec) + Index);
|
||||||
|
}
|
||||||
|
const Elf_Sym *getSymbol(uint32_t Index) const {
|
||||||
|
return getSymbol(dot_symtab_sec, Index);
|
||||||
|
}
|
||||||
|
|
||||||
ErrorOr<StringRef> getSectionName(const Elf_Shdr *Section) const;
|
ErrorOr<StringRef> getSectionName(const Elf_Shdr *Section) const;
|
||||||
ErrorOr<ArrayRef<uint8_t> > getSectionContents(const Elf_Shdr *Sec) const;
|
ErrorOr<ArrayRef<uint8_t> > getSectionContents(const Elf_Shdr *Sec) const;
|
||||||
|
@ -378,12 +384,6 @@ ELFFile<ELFT>::getSection(const Elf_Sym *symb) const {
|
||||||
return getSection(symb->st_shndx);
|
return getSection(symb->st_shndx);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class ELFT>
|
|
||||||
const typename ELFFile<ELFT>::Elf_Sym *
|
|
||||||
ELFFile<ELFT>::getSymbol(uint32_t Index) const {
|
|
||||||
return &*(symbol_begin() + Index);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <class ELFT>
|
template <class ELFT>
|
||||||
ErrorOr<ArrayRef<uint8_t> >
|
ErrorOr<ArrayRef<uint8_t> >
|
||||||
ELFFile<ELFT>::getSectionContents(const Elf_Shdr *Sec) const {
|
ELFFile<ELFT>::getSectionContents(const Elf_Shdr *Sec) const {
|
||||||
|
|
|
@ -338,11 +338,12 @@ ErrorOr<ELFYAML::Group *> ELFDumper<ELFT>::dumpGroup(const Elf_Shdr *Shdr) {
|
||||||
if (std::error_code EC = dumpCommonSection(Shdr, *S))
|
if (std::error_code EC = dumpCommonSection(Shdr, *S))
|
||||||
return EC;
|
return EC;
|
||||||
// Get sh_info which is the signature.
|
// Get sh_info which is the signature.
|
||||||
const Elf_Sym *symbol = Obj.getSymbol(Shdr->sh_info);
|
ErrorOr<const Elf_Shdr *> SymtabOrErr = Obj.getSection(Shdr->sh_link);
|
||||||
ErrorOr<const Elf_Shdr *> Symtab = Obj.getSection(Shdr->sh_link);
|
if (std::error_code EC = SymtabOrErr.getError())
|
||||||
if (std::error_code EC = Symtab.getError())
|
|
||||||
return EC;
|
return EC;
|
||||||
ErrorOr<const Elf_Shdr *> StrTabSec = Obj.getSection((*Symtab)->sh_link);
|
const Elf_Shdr *Symtab = *SymtabOrErr;
|
||||||
|
const Elf_Sym *symbol = Obj.getSymbol(Symtab, Shdr->sh_info);
|
||||||
|
ErrorOr<const Elf_Shdr *> StrTabSec = Obj.getSection(Symtab->sh_link);
|
||||||
if (std::error_code EC = StrTabSec.getError())
|
if (std::error_code EC = StrTabSec.getError())
|
||||||
return EC;
|
return EC;
|
||||||
ErrorOr<StringRef> StrTabOrErr = Obj.getStringTable(*StrTabSec);
|
ErrorOr<StringRef> StrTabOrErr = Obj.getStringTable(*StrTabSec);
|
||||||
|
|
Loading…
Reference in New Issue