diff options
Diffstat (limited to 'llvm/tools')
-rw-r--r-- | llvm/tools/dsymutil/MachODebugMapParser.cpp | 5 | ||||
-rw-r--r-- | llvm/tools/llvm-objdump/MachODump.cpp | 32 | ||||
-rw-r--r-- | llvm/tools/llvm-objdump/llvm-objdump.cpp | 4 | ||||
-rw-r--r-- | llvm/tools/llvm-readobj/ARMWinEHPrinter.cpp | 5 | ||||
-rw-r--r-- | llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp | 6 |
5 files changed, 42 insertions, 10 deletions
diff --git a/llvm/tools/dsymutil/MachODebugMapParser.cpp b/llvm/tools/dsymutil/MachODebugMapParser.cpp index 02c3ab07f6a..29529942cb8 100644 --- a/llvm/tools/dsymutil/MachODebugMapParser.cpp +++ b/llvm/tools/dsymutil/MachODebugMapParser.cpp @@ -437,7 +437,10 @@ void MachODebugMapParser::loadMainBinarySymbols( section_iterator Section = MainBinary.section_end(); MainBinarySymbolAddresses.clear(); for (const auto &Sym : MainBinary.symbols()) { - SymbolRef::Type Type = Sym.getType(); + ErrorOr<SymbolRef::Type> TypeOrErr = Sym.getType(); + if (!TypeOrErr) + continue; + SymbolRef::Type Type = *TypeOrErr; // Skip undefined and STAB entries. if ((Type & SymbolRef::ST_Debug) || (Type & SymbolRef::ST_Unknown)) continue; diff --git a/llvm/tools/llvm-objdump/MachODump.cpp b/llvm/tools/llvm-objdump/MachODump.cpp index 318d8374731..428b737cfec 100644 --- a/llvm/tools/llvm-objdump/MachODump.cpp +++ b/llvm/tools/llvm-objdump/MachODump.cpp @@ -172,8 +172,16 @@ static const Target *GetTarget(const MachOObjectFile *MachOObj, struct SymbolSorter { bool operator()(const SymbolRef &A, const SymbolRef &B) { - uint64_t AAddr = (A.getType() != SymbolRef::ST_Function) ? 0 : A.getValue(); - uint64_t BAddr = (B.getType() != SymbolRef::ST_Function) ? 0 : B.getValue(); + ErrorOr<SymbolRef::Type> ATypeOrErr = A.getType(); + if (std::error_code EC = ATypeOrErr.getError()) + report_fatal_error(EC.message()); + SymbolRef::Type AType = *ATypeOrErr; + ErrorOr<SymbolRef::Type> BTypeOrErr = B.getType(); + if (std::error_code EC = BTypeOrErr.getError()) + report_fatal_error(EC.message()); + SymbolRef::Type BType = *ATypeOrErr; + uint64_t AAddr = (AType != SymbolRef::ST_Function) ? 0 : A.getValue(); + uint64_t BAddr = (BType != SymbolRef::ST_Function) ? 0 : B.getValue(); return AAddr < BAddr; } }; @@ -573,7 +581,10 @@ static void CreateSymbolAddressMap(MachOObjectFile *O, SymbolAddressMap *AddrMap) { // Create a map of symbol addresses to symbol names. for (const SymbolRef &Symbol : O->symbols()) { - SymbolRef::Type ST = Symbol.getType(); + ErrorOr<SymbolRef::Type> STOrErr = Symbol.getType(); + if (std::error_code EC = STOrErr.getError()) + report_fatal_error(EC.message()); + SymbolRef::Type ST = *STOrErr; if (ST == SymbolRef::ST_Function || ST == SymbolRef::ST_Data || ST == SymbolRef::ST_Other) { uint64_t Address = Symbol.getValue(); @@ -6083,7 +6094,10 @@ static void DisassembleMachO(StringRef Filename, MachOObjectFile *MachOOF, SymbolAddressMap AddrMap; bool DisSymNameFound = false; for (const SymbolRef &Symbol : MachOOF->symbols()) { - SymbolRef::Type ST = Symbol.getType(); + ErrorOr<SymbolRef::Type> STOrErr = Symbol.getType(); + if (std::error_code EC = STOrErr.getError()) + report_fatal_error(EC.message()); + SymbolRef::Type ST = *STOrErr; if (ST == SymbolRef::ST_Function || ST == SymbolRef::ST_Data || ST == SymbolRef::ST_Other) { uint64_t Address = Symbol.getValue(); @@ -6134,7 +6148,10 @@ static void DisassembleMachO(StringRef Filename, MachOObjectFile *MachOOF, report_fatal_error(EC.message()); StringRef SymName = *SymNameOrErr; - SymbolRef::Type ST = Symbols[SymIdx].getType(); + ErrorOr<SymbolRef::Type> STOrErr = Symbols[SymIdx].getType(); + if (std::error_code EC = STOrErr.getError()) + report_fatal_error(EC.message()); + SymbolRef::Type ST = *STOrErr; if (ST != SymbolRef::ST_Function && ST != SymbolRef::ST_Data) continue; @@ -6158,7 +6175,10 @@ static void DisassembleMachO(StringRef Filename, MachOObjectFile *MachOOF, uint64_t NextSym = 0; uint64_t NextSymIdx = SymIdx + 1; while (Symbols.size() > NextSymIdx) { - SymbolRef::Type NextSymType = Symbols[NextSymIdx].getType(); + ErrorOr<SymbolRef::Type> STOrErr = Symbols[NextSymIdx].getType(); + if (std::error_code EC = STOrErr.getError()) + report_fatal_error(EC.message()); + SymbolRef::Type NextSymType = *STOrErr; if (NextSymType == SymbolRef::ST_Function) { containsNextSym = Sections[SectIdx].containsSymbol(Symbols[NextSymIdx]); diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp index f436183f065..28d667a486e 100644 --- a/llvm/tools/llvm-objdump/llvm-objdump.cpp +++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -1293,7 +1293,9 @@ void llvm::PrintSymbolTable(const ObjectFile *o) { ErrorOr<uint64_t> AddressOrError = Symbol.getAddress(); error(AddressOrError.getError()); uint64_t Address = *AddressOrError; - SymbolRef::Type Type = Symbol.getType(); + ErrorOr<SymbolRef::Type> TypeOrError = Symbol.getType(); + error(TypeOrError.getError()); + SymbolRef::Type Type = *TypeOrError; uint32_t Flags = Symbol.getFlags(); ErrorOr<section_iterator> SectionOrErr = Symbol.getSection(); error(SectionOrErr.getError()); diff --git a/llvm/tools/llvm-readobj/ARMWinEHPrinter.cpp b/llvm/tools/llvm-readobj/ARMWinEHPrinter.cpp index 76387c7c7c9..0f74a998707 100644 --- a/llvm/tools/llvm-readobj/ARMWinEHPrinter.cpp +++ b/llvm/tools/llvm-readobj/ARMWinEHPrinter.cpp @@ -198,7 +198,10 @@ Decoder::getSectionContaining(const COFFObjectFile &COFF, uint64_t VA) { ErrorOr<object::SymbolRef> Decoder::getSymbol(const COFFObjectFile &COFF, uint64_t VA, bool FunctionOnly) { for (const auto &Symbol : COFF.symbols()) { - if (FunctionOnly && Symbol.getType() != SymbolRef::ST_Function) + ErrorOr<SymbolRef::Type> Type = Symbol.getType(); + if (std::error_code EC = Type.getError()) + return EC; + if (FunctionOnly && *Type != SymbolRef::ST_Function) continue; ErrorOr<uint64_t> Address = Symbol.getAddress(); diff --git a/llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp b/llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp index 81b9c7dc502..3b5c1821f1b 100644 --- a/llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp +++ b/llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp @@ -330,7 +330,11 @@ static int printLineInfoForInput(bool LoadObjects, bool UseDebugObj) { // Use symbol info to iterate functions in the object. for (const auto &P : SymAddr) { object::SymbolRef Sym = P.first; - if (Sym.getType() == object::SymbolRef::ST_Function) { + ErrorOr<SymbolRef::Type> TypeOrErr = Sym.getType(); + if (!TypeOrErr) + continue; + SymbolRef::Type Type = *TypeOrErr; + if (Type == object::SymbolRef::ST_Function) { ErrorOr<StringRef> Name = Sym.getName(); if (!Name) continue; |