Index: llvm/trunk/include/llvm/Object/ELF.h =================================================================== --- llvm/trunk/include/llvm/Object/ELF.h +++ llvm/trunk/include/llvm/Object/ELF.h @@ -158,10 +158,11 @@ ArrayRef ShndxTable) const; ErrorOr getSection(uint32_t Index) const; - const Elf_Sym *getSymbol(const Elf_Shdr *Sec, uint32_t Index) const { + ErrorOr getSymbol(const Elf_Shdr *Sec, + uint32_t Index) const { Elf_Sym_Range Symbols = symbols(Sec); if (Index >= Symbols.size()) - report_fatal_error("Invalid symbol index"); + return object_error::invalid_symbol_index; return &Symbols[Index]; } Index: llvm/trunk/include/llvm/Object/Error.h =================================================================== --- llvm/trunk/include/llvm/Object/Error.h +++ llvm/trunk/include/llvm/Object/Error.h @@ -34,6 +34,7 @@ string_table_non_null_end, invalid_section_index, bitcode_section_not_found, + invalid_symbol_index, }; inline std::error_code make_error_code(object_error e) { Index: llvm/trunk/lib/Object/Error.cpp =================================================================== --- llvm/trunk/lib/Object/Error.cpp +++ llvm/trunk/lib/Object/Error.cpp @@ -50,6 +50,8 @@ return "Invalid section index"; case object_error::bitcode_section_not_found: return "Bitcode section not found in object file"; + case object_error::invalid_symbol_index: + return "Invalid symbol index"; } llvm_unreachable("An enumerator of object_error does not have a message " "defined.");