bool NoSymbolTable = (Module->symbol_begin() == Module->symbol_end());
if (NoSymbolTable && Module->isELF()) {
// Fallback to dynamic symbol table, if regular symbol table is stripped.
- std::pair<symbol_iterator, symbol_iterator> IDyn =
- getELFDynamicSymbolIterators(Module);
- for (symbol_iterator si = IDyn.first, se = IDyn.second; si != se; ++si) {
- addSymbol(*si, OpdExtractor.get(), OpdAddress);
+ auto IDyn = cast<ELFObjectFileBase>(Module)->getDynamicSymbolIterators();
+ for (SymbolRef Sym : IDyn) {
+ addSymbol(Sym, OpdExtractor.get(), OpdAddress);
}
}
}
return;
uint64_t SymbolAddress;
if (error(Symbol.getAddress(SymbolAddress)) ||
- SymbolAddress == UnknownAddressOrSize)
+ SymbolAddress == UnknownAddress)
return;
if (OpdExtractor) {
// For big-endian PowerPC64 ELF, symbols in the .opd section refer to
SymbolAddress = OpdExtractor->getAddress(&OpdOffset32);
}
uint64_t SymbolSize;
- // Getting symbol size is linear for Mach-O files, so assume that symbol
- // occupies the memory range up to the following symbol.
- if (isa<MachOObjectFile>(Module))
+ // Onyl ELF has a size for every symbol so assume that symbol occupies the
+ // memory range up to the following symbol.
+ if (auto *E = dyn_cast<ELFObjectFileBase>(Module))
+ SymbolSize = E->getSymbolSize(Symbol);
+ else
SymbolSize = 0;
- else {
- SymbolSize = Symbol.getSize();
- if (SymbolSize == UnknownAddressOrSize)
- return;
- }
StringRef SymbolName;
if (error(Symbol.getName(SymbolName)))
return;