diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2016-11-03 13:43:30 +0000 |
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2016-11-03 13:43:30 +0000 |
| commit | 9ea68341b96dd571f5fc0318ea035523b6f4bf77 (patch) | |
| tree | d551f42ea2a715de809a94b8906bf0b470a3fb41 /llvm/include | |
| parent | 6d18d388c5da61ac7f4c14a43d6008f3f5e64edd (diff) | |
| download | bcm5719-llvm-9ea68341b96dd571f5fc0318ea035523b6f4bf77.tar.gz bcm5719-llvm-9ea68341b96dd571f5fc0318ea035523b6f4bf77.zip | |
Replace a report_fatal_error with an ErrorOr.
llvm-svn: 285905
Diffstat (limited to 'llvm/include')
| -rw-r--r-- | llvm/include/llvm/Object/ELF.h | 17 | ||||
| -rw-r--r-- | llvm/include/llvm/Object/ELFObjectFile.h | 4 |
2 files changed, 12 insertions, 9 deletions
diff --git a/llvm/include/llvm/Object/ELF.h b/llvm/include/llvm/Object/ELF.h index 5fd2d38793c..d5ce410d58c 100644 --- a/llvm/include/llvm/Object/ELF.h +++ b/llvm/include/llvm/Object/ELF.h @@ -111,13 +111,10 @@ public: ErrorOr<Elf_Shdr_Range> sections() const; - Elf_Sym_Range symbols(const Elf_Shdr *Sec) const { + ErrorOr<Elf_Sym_Range> symbols(const Elf_Shdr *Sec) const { if (!Sec) return makeArrayRef<Elf_Sym>(nullptr, nullptr); - auto V = getSectionContentsAsArray<Elf_Sym>(Sec); - if (!V) - report_fatal_error(V.getError().message()); - return *V; + return getSectionContentsAsArray<Elf_Sym>(Sec); } Elf_Rela_Range relas(const Elf_Shdr *Sec) const { @@ -164,7 +161,10 @@ public: ErrorOr<const Elf_Sym *> getSymbol(const Elf_Shdr *Sec, uint32_t Index) const { - Elf_Sym_Range Symbols = symbols(Sec); + auto SymtabOrErr = symbols(Sec); + if (std::error_code EC = SymtabOrErr.getError()) + return object_error::parse_failed; + Elf_Sym_Range Symbols = *SymtabOrErr; if (Index >= Symbols.size()) return object_error::invalid_symbol_index; return &Symbols[Index]; @@ -195,7 +195,10 @@ template <class ELFT> uint32_t ELFFile<ELFT>::getExtendedSymbolTableIndex( const Elf_Sym *Sym, const Elf_Shdr *SymTab, ArrayRef<Elf_Word> ShndxTable) const { - return getExtendedSymbolTableIndex(Sym, symbols(SymTab).begin(), ShndxTable); + auto SymsOrErr = symbols(SymTab); + if (std::error_code EC = SymsOrErr.getError()) + report_fatal_error(EC.message()); + return getExtendedSymbolTableIndex(Sym, SymsOrErr->begin(), ShndxTable); } template <class ELFT> diff --git a/llvm/include/llvm/Object/ELFObjectFile.h b/llvm/include/llvm/Object/ELFObjectFile.h index 179f07a76cc..ad1c2e12ce1 100644 --- a/llvm/include/llvm/Object/ELFObjectFile.h +++ b/llvm/include/llvm/Object/ELFObjectFile.h @@ -507,8 +507,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.symbols(DotSymtabSec).begin() || - ESym == EF.symbols(DotDynSymSec).begin()) + ESym == (*EF.symbols(DotSymtabSec)).begin() || + ESym == (*EF.symbols(DotDynSymSec)).begin()) Result |= SymbolRef::SF_FormatSpecific; if (EF.getHeader()->e_machine == ELF::EM_ARM) { |

