projects
/
oota-llvm.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Remove FileCheck from test case token_landingpad.ll.
[oota-llvm.git]
/
tools
/
llvm-readobj
/
ARMEHABIPrinter.h
diff --git
a/tools/llvm-readobj/ARMEHABIPrinter.h
b/tools/llvm-readobj/ARMEHABIPrinter.h
index 7b2c79136a5877bb578193c8aaeaeb61c02e686f..beb5fd4ea042b4aafcd20b62b6c62ad40e92fe40 100644
(file)
--- a/
tools/llvm-readobj/ARMEHABIPrinter.h
+++ b/
tools/llvm-readobj/ARMEHABIPrinter.h
@@
-305,12
+305,15
@@
void OpcodeDecoder::Decode(const uint8_t *Opcodes, off_t Offset, size_t Length)
template <typename ET>
class PrinterContext {
template <typename ET>
class PrinterContext {
- StreamWriter &SW;
- const object::ELFFile<ET> *ELF;
-
typedef typename object::ELFFile<ET>::Elf_Sym Elf_Sym;
typedef typename object::ELFFile<ET>::Elf_Shdr Elf_Shdr;
typedef typename object::ELFFile<ET>::Elf_Rel Elf_Rel;
typedef typename object::ELFFile<ET>::Elf_Sym Elf_Sym;
typedef typename object::ELFFile<ET>::Elf_Shdr Elf_Shdr;
typedef typename object::ELFFile<ET>::Elf_Rel Elf_Rel;
+ typedef typename object::ELFFile<ET>::Elf_Word Elf_Word;
+
+ StreamWriter &SW;
+ const object::ELFFile<ET> *ELF;
+ const Elf_Shdr *Symtab;
+ ArrayRef<Elf_Word> ShndxTable;
static const size_t IndexTableEntrySize;
static const size_t IndexTableEntrySize;
@@
-331,8
+334,9
@@
class PrinterContext {
void PrintOpcodes(const uint8_t *Entry, size_t Length, off_t Offset) const;
public:
void PrintOpcodes(const uint8_t *Entry, size_t Length, off_t Offset) const;
public:
- PrinterContext(StreamWriter &Writer, const object::ELFFile<ET> *File)
- : SW(Writer), ELF(File) {}
+ PrinterContext(StreamWriter &SW, const object::ELFFile<ET> *ELF,
+ const Elf_Shdr *Symtab)
+ : SW(SW), ELF(ELF), Symtab(Symtab) {}
void PrintUnwindInformation() const;
};
void PrintUnwindInformation() const;
};
@@
-344,12
+348,11
@@
template <typename ET>
ErrorOr<StringRef>
PrinterContext<ET>::FunctionAtAddress(unsigned Section,
uint64_t Address) const {
ErrorOr<StringRef>
PrinterContext<ET>::FunctionAtAddress(unsigned Section,
uint64_t Address) const {
- const Elf_Shdr *Symtab = ELF->getDotSymtabSec();
ErrorOr<StringRef> StrTableOrErr = ELF->getStringTableForSymtab(*Symtab);
error(StrTableOrErr.getError());
StringRef StrTable = *StrTableOrErr;
ErrorOr<StringRef> StrTableOrErr = ELF->getStringTableForSymtab(*Symtab);
error(StrTableOrErr.getError());
StringRef StrTable = *StrTableOrErr;
- for (const Elf_Sym &Sym : ELF->symbols(
ELF->getDotSymtabSec()
))
+ for (const Elf_Sym &Sym : ELF->symbols(
Symtab
))
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);
@@
-372,6
+375,10
@@
PrinterContext<ET>::FindExceptionTable(unsigned IndexSectionIndex,
if (Sec.sh_type != ELF::SHT_REL || Sec.sh_info != IndexSectionIndex)
continue;
if (Sec.sh_type != ELF::SHT_REL || Sec.sh_info != IndexSectionIndex)
continue;
+ ErrorOr<const Elf_Shdr *> SymTabOrErr = ELF->getSection(Sec.sh_link);
+ error(SymTabOrErr.getError());
+ const Elf_Shdr *SymTab = *SymTabOrErr;
+
for (const Elf_Rel &R : ELF->rels(&Sec)) {
if (R.r_offset != static_cast<unsigned>(IndexTableOffset))
continue;
for (const Elf_Rel &R : ELF->rels(&Sec)) {
if (R.r_offset != static_cast<unsigned>(IndexTableOffset))
continue;
@@
-381,10
+388,10
@@
PrinterContext<ET>::FindExceptionTable(unsigned IndexSectionIndex,
RelA.r_info = R.r_info;
RelA.r_addend = 0;
RelA.r_info = R.r_info;
RelA.r_addend = 0;
- std::pair<const Elf_Shdr *, const Elf_Sym *> Symbol =
- ELF->getRelocationSymbol(&Sec, &RelA);
+ const Elf_Sym *Symbol = ELF->getRelocationSymbol(&RelA, SymTab);
- ErrorOr<const Elf_Shdr *> Ret = ELF->getSection(Symbol.second);
+ ErrorOr<const Elf_Shdr *> Ret =
+ ELF->getSection(Symbol, SymTab, ShndxTable);
if (std::error_code EC = Ret.getError())
report_fatal_error(EC.message());
return *Ret;
if (std::error_code EC = Ret.getError())
report_fatal_error(EC.message());
return *Ret;