forked from OSchip/llvm-project
parent
85c7d66fdc
commit
deeaa31ce5
|
@ -227,6 +227,8 @@ public:
|
||||||
ArchivePointerTypeTraits<const char> > Current;
|
ArchivePointerTypeTraits<const char> > Current;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef iterator_range<Elf_Sym_Iter> Elf_Sym_Range;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
typedef SmallVector<const Elf_Shdr *, 2> Sections_t;
|
typedef SmallVector<const Elf_Shdr *, 2> Sections_t;
|
||||||
typedef DenseMap<unsigned, unsigned> IndexMap_t;
|
typedef DenseMap<unsigned, unsigned> IndexMap_t;
|
||||||
|
@ -340,6 +342,9 @@ public:
|
||||||
|
|
||||||
Elf_Sym_Iter begin_symbols() const;
|
Elf_Sym_Iter begin_symbols() const;
|
||||||
Elf_Sym_Iter end_symbols() const;
|
Elf_Sym_Iter end_symbols() const;
|
||||||
|
Elf_Sym_Range symbols() const {
|
||||||
|
return make_range(begin_symbols(), end_symbols());
|
||||||
|
}
|
||||||
|
|
||||||
Elf_Dyn_Iter begin_dynamic_table() const;
|
Elf_Dyn_Iter begin_dynamic_table() const;
|
||||||
/// \param NULLEnd use one past the first DT_NULL entry as the end instead of
|
/// \param NULLEnd use one past the first DT_NULL entry as the end instead of
|
||||||
|
@ -424,6 +429,7 @@ public:
|
||||||
const Elf_Sym *getSymbol(uint32_t index) const;
|
const Elf_Sym *getSymbol(uint32_t index) const;
|
||||||
|
|
||||||
ErrorOr<StringRef> getSymbolName(Elf_Sym_Iter Sym) const;
|
ErrorOr<StringRef> getSymbolName(Elf_Sym_Iter Sym) const;
|
||||||
|
ErrorOr<StringRef> getStaticSymbolName(const Elf_Sym *Symb) const;
|
||||||
|
|
||||||
/// \brief Get the name of \p Symb.
|
/// \brief Get the name of \p Symb.
|
||||||
/// \param SymTab The symbol table section \p Symb is contained in.
|
/// \param SymTab The symbol table section \p Symb is contained in.
|
||||||
|
@ -961,6 +967,12 @@ ErrorOr<StringRef> ELFFile<ELFT>::getSymbolName(Elf_Sym_Iter Sym) const {
|
||||||
return StringRef(getDynamicString(Sym->st_name));
|
return StringRef(getDynamicString(Sym->st_name));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class ELFT>
|
||||||
|
ErrorOr<StringRef>
|
||||||
|
ELFFile<ELFT>::getStaticSymbolName(const Elf_Sym *Symb) const {
|
||||||
|
return getSymbolName(dot_symtab_sec, Symb);
|
||||||
|
}
|
||||||
|
|
||||||
template <class ELFT>
|
template <class ELFT>
|
||||||
ErrorOr<StringRef> ELFFile<ELFT>::getSymbolName(const Elf_Shdr *Section,
|
ErrorOr<StringRef> ELFFile<ELFT>::getSymbolName(const Elf_Shdr *Section,
|
||||||
const Elf_Sym *Symb) const {
|
const Elf_Sym *Symb) const {
|
||||||
|
|
|
@ -197,6 +197,9 @@ struct Elf_Sym_Impl : Elf_Sym_Base<ELFT> {
|
||||||
return st_shndx >= ELF::SHN_LORESERVE;
|
return st_shndx >= ELF::SHN_LORESERVE;
|
||||||
}
|
}
|
||||||
bool isUndefined() const { return st_shndx == ELF::SHN_UNDEF; }
|
bool isUndefined() const { return st_shndx == ELF::SHN_UNDEF; }
|
||||||
|
bool isExternal() const {
|
||||||
|
return getBinding() != ELF::STB_LOCAL;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Elf_Versym: This is the structure of entries in the SHT_GNU_versym section
|
/// Elf_Versym: This is the structure of entries in the SHT_GNU_versym section
|
||||||
|
|
Loading…
Reference in New Issue