mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-03-07 11:59:09 +00:00
Remove the symbol iteration functions that don't take a symbol table.
Another step in making ELFFile's constructor not iterate over all sections. llvm-svn: 244351
This commit is contained in:
parent
59fd1cc3c9
commit
246909bb95
@ -147,16 +147,6 @@ public:
|
||||
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 {
|
||||
@ -235,7 +225,7 @@ template <class ELFT>
|
||||
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 *>(
|
||||
|
@ -474,7 +474,8 @@ uint32_t ELFObjectFile<ELFT>::getSymbolFlags(DataRefImpl Sym) const {
|
||||
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) {
|
||||
|
@ -349,7 +349,7 @@ PrinterContext<ET>::FunctionAtAddress(unsigned Section,
|
||||
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);
|
||||
|
@ -995,7 +995,7 @@ void ELFDumper<ELFT>::printSections() {
|
||||
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;
|
||||
@ -1126,7 +1126,7 @@ void ELFDumper<ELFT>::printSymbols() {
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -129,7 +129,7 @@ ErrorOr<ELFYAML::Object *> ELFDumper<ELFT>::dump() {
|
||||
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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user