Another step in making ELFFile's constructor not iterate over all sections.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244351
91177308-0d34-0410-b5e6-
96231b3b80d8
return make_range(symbol_begin(Sec), symbol_end(Sec));
}
return make_range(symbol_begin(Sec), symbol_end(Sec));
}
- const Elf_Sym *symbol_begin() const { return symbol_begin(dot_symtab_sec); }
- const Elf_Sym *symbol_end() const { return symbol_end(dot_symtab_sec); }
- Elf_Sym_Range symbols() const { return symbols(dot_symtab_sec); }
-
- const Elf_Sym *dynamic_symbol_begin() const {
- return symbol_begin(DotDynSymSec);
- }
- const Elf_Sym *dynamic_symbol_end() const { return symbol_end(DotDynSymSec); }
- Elf_Sym_Range dynamic_symbols() const { return symbols(DotDynSymSec); }
-
typedef iterator_range<const Elf_Rela *> Elf_Rela_Range;
const Elf_Rela *rela_begin(const Elf_Shdr *sec) const {
typedef iterator_range<const Elf_Rela *> Elf_Rela_Range;
const Elf_Rela *rela_begin(const Elf_Shdr *sec) const {
ELF::Elf64_Word
ELFFile<ELFT>::getExtendedSymbolTableIndex(const Elf_Sym *Sym) const {
assert(Sym->st_shndx == ELF::SHN_XINDEX);
ELF::Elf64_Word
ELFFile<ELFT>::getExtendedSymbolTableIndex(const Elf_Sym *Sym) const {
assert(Sym->st_shndx == ELF::SHN_XINDEX);
- unsigned Index = Sym - symbol_begin();
+ unsigned Index = Sym - symbol_begin(dot_symtab_sec);
// FIXME: error checking
const Elf_Word *ShndxTable = reinterpret_cast<const Elf_Word *>(
// FIXME: error checking
const Elf_Word *ShndxTable = reinterpret_cast<const Elf_Word *>(
Result |= SymbolRef::SF_Absolute;
if (ESym->getType() == ELF::STT_FILE || ESym->getType() == ELF::STT_SECTION ||
Result |= SymbolRef::SF_Absolute;
if (ESym->getType() == ELF::STT_FILE || ESym->getType() == ELF::STT_SECTION ||
- ESym == EF.symbol_begin() || ESym == EF.dynamic_symbol_begin())
+ ESym == EF.symbol_begin(EF.getDotSymtabSec()) ||
+ ESym == EF.symbol_begin(EF.getDotDynSymSec()))
Result |= SymbolRef::SF_FormatSpecific;
if (EF.getHeader()->e_machine == ELF::EM_ARM) {
Result |= SymbolRef::SF_FormatSpecific;
if (EF.getHeader()->e_machine == ELF::EM_ARM) {
error(StrTableOrErr.getError());
StringRef StrTable = *StrTableOrErr;
error(StrTableOrErr.getError());
StringRef StrTable = *StrTableOrErr;
- for (const Elf_Sym &Sym : ELF->symbols())
+ for (const Elf_Sym &Sym : ELF->symbols(ELF->getDotSymtabSec()))
if (Sym.st_shndx == Section && Sym.st_value == Address &&
Sym.getType() == ELF::STT_FUNC)
return Sym.getName(StrTable);
if (Sym.st_shndx == Section && Sym.st_value == Address &&
Sym.getType() == ELF::STT_FUNC)
return Sym.getName(StrTable);
error(StrTableOrErr.getError());
StringRef StrTable = *StrTableOrErr;
error(StrTableOrErr.getError());
StringRef StrTable = *StrTableOrErr;
- for (const Elf_Sym &Sym : Obj->symbols()) {
+ for (const Elf_Sym &Sym : Obj->symbols(Symtab)) {
ErrorOr<const Elf_Shdr *> SymSec = Obj->getSection(&Sym);
if (!SymSec)
continue;
ErrorOr<const Elf_Shdr *> SymSec = Obj->getSection(&Sym);
if (!SymSec)
continue;
ErrorOr<StringRef> StrTableOrErr = Obj->getStringTableForSymtab(*Symtab);
error(StrTableOrErr.getError());
StringRef StrTable = *StrTableOrErr;
ErrorOr<StringRef> StrTableOrErr = Obj->getStringTableForSymtab(*Symtab);
error(StrTableOrErr.getError());
StringRef StrTable = *StrTableOrErr;
- for (const Elf_Sym &Sym : Obj->symbols())
+ for (const Elf_Sym &Sym : Obj->symbols(Symtab))
printSymbol(&Sym, StrTable, false);
}
printSymbol(&Sym, StrTable, false);
}
StringRef StrTable = *StrTableOrErr;
bool IsFirstSym = true;
StringRef StrTable = *StrTableOrErr;
bool IsFirstSym = true;
- for (const Elf_Sym &Sym : Obj.symbols()) {
+ for (const Elf_Sym &Sym : Obj.symbols(Obj.getDotSymtabSec())) {
if (IsFirstSym) {
IsFirstSym = false;
continue;
if (IsFirstSym) {
IsFirstSym = false;
continue;