summaryrefslogtreecommitdiffstats
path: root/llvm/tools
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/tools')
-rw-r--r--llvm/tools/dsymutil/DebugMap.cpp8
-rw-r--r--llvm/tools/dsymutil/DwarfLinker.cpp3
-rw-r--r--llvm/tools/dsymutil/MachODebugMapParser.cpp14
-rw-r--r--llvm/tools/llvm-cxxdump/llvm-cxxdump.cpp12
-rw-r--r--llvm/tools/llvm-nm/llvm-nm.cpp12
-rw-r--r--llvm/tools/llvm-objdump/COFFDump.cpp6
-rw-r--r--llvm/tools/llvm-objdump/MachODump.cpp176
-rw-r--r--llvm/tools/llvm-objdump/llvm-objdump.cpp34
-rw-r--r--llvm/tools/llvm-readobj/ARMEHABIPrinter.h11
-rw-r--r--llvm/tools/llvm-readobj/ARMWinEHPrinter.cpp44
-rw-r--r--llvm/tools/llvm-readobj/COFFDumper.cpp10
-rw-r--r--llvm/tools/llvm-readobj/MachODumper.cpp11
-rw-r--r--llvm/tools/llvm-readobj/Win64EHDumper.cpp6
-rw-r--r--llvm/tools/llvm-readobj/llvm-readobj.h10
-rw-r--r--llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp7
-rw-r--r--llvm/tools/obj2yaml/coff2yaml.cpp11
-rw-r--r--llvm/tools/obj2yaml/elf2yaml.cpp22
-rw-r--r--llvm/tools/sancov/sancov.cc4
18 files changed, 278 insertions, 123 deletions
diff --git a/llvm/tools/dsymutil/DebugMap.cpp b/llvm/tools/dsymutil/DebugMap.cpp
index 114e22c0745..5130cd62ed2 100644
--- a/llvm/tools/dsymutil/DebugMap.cpp
+++ b/llvm/tools/dsymutil/DebugMap.cpp
@@ -228,10 +228,14 @@ MappingTraits<dsymutil::DebugMapObject>::YamlDMO::denormalize(IO &IO) {
// look them up here and rewrite them.
for (const auto &Sym : ErrOrObjectFile->symbols()) {
uint64_t Address = Sym.getValue();
- ErrorOr<StringRef> Name = Sym.getName();
+ Expected<StringRef> Name = Sym.getName();
if (!Name ||
- (Sym.getFlags() & (SymbolRef::SF_Absolute | SymbolRef::SF_Common)))
+ (Sym.getFlags() & (SymbolRef::SF_Absolute | SymbolRef::SF_Common))) {
+ // TODO: Actually report errors helpfully.
+ if (!Name)
+ consumeError(Name.takeError());
continue;
+ }
SymbolAddresses[*Name] = Address;
}
}
diff --git a/llvm/tools/dsymutil/DwarfLinker.cpp b/llvm/tools/dsymutil/DwarfLinker.cpp
index d08f30dadab..f560ec6075d 100644
--- a/llvm/tools/dsymutil/DwarfLinker.cpp
+++ b/llvm/tools/dsymutil/DwarfLinker.cpp
@@ -1951,8 +1951,9 @@ findValidRelocsMachO(const object::SectionRef &Section,
auto Sym = Reloc.getSymbol();
if (Sym != Obj.symbol_end()) {
- ErrorOr<StringRef> SymbolName = Sym->getName();
+ Expected<StringRef> SymbolName = Sym->getName();
if (!SymbolName) {
+ consumeError(SymbolName.takeError());
Linker.reportWarning("error getting relocation symbol name.");
continue;
}
diff --git a/llvm/tools/dsymutil/MachODebugMapParser.cpp b/llvm/tools/dsymutil/MachODebugMapParser.cpp
index 29529942cb8..87577610752 100644
--- a/llvm/tools/dsymutil/MachODebugMapParser.cpp
+++ b/llvm/tools/dsymutil/MachODebugMapParser.cpp
@@ -402,9 +402,12 @@ void MachODebugMapParser::loadCurrentObjectFileSymbols(
for (auto Sym : Obj.symbols()) {
uint64_t Addr = Sym.getValue();
- ErrorOr<StringRef> Name = Sym.getName();
- if (!Name)
+ Expected<StringRef> Name = Sym.getName();
+ if (!Name) {
+ // TODO: Actually report errors helpfully.
+ consumeError(Name.takeError());
continue;
+ }
// The value of some categories of symbols isn't meaningful. For
// example common symbols store their size in the value field, not
// their address. Absolute symbols have a fixed address that can
@@ -457,9 +460,12 @@ void MachODebugMapParser::loadMainBinarySymbols(
if (Section == MainBinary.section_end() || Section->isText())
continue;
uint64_t Addr = Sym.getValue();
- ErrorOr<StringRef> NameOrErr = Sym.getName();
- if (!NameOrErr)
+ Expected<StringRef> NameOrErr = Sym.getName();
+ if (!NameOrErr) {
+ // TODO: Actually report errors helpfully.
+ consumeError(NameOrErr.takeError());
continue;
+ }
StringRef Name = *NameOrErr;
if (Name.size() == 0 || Name[0] == '\0')
continue;
diff --git a/llvm/tools/llvm-cxxdump/llvm-cxxdump.cpp b/llvm/tools/llvm-cxxdump/llvm-cxxdump.cpp
index 5048987865f..dc1cc23c232 100644
--- a/llvm/tools/llvm-cxxdump/llvm-cxxdump.cpp
+++ b/llvm/tools/llvm-cxxdump/llvm-cxxdump.cpp
@@ -79,8 +79,8 @@ static void collectRelocatedSymbols(const ObjectFile *Obj,
const object::symbol_iterator RelocSymI = Reloc.getSymbol();
if (RelocSymI == Obj->symbol_end())
continue;
- ErrorOr<StringRef> RelocSymName = RelocSymI->getName();
- error(RelocSymName.getError());
+ Expected<StringRef> RelocSymName = RelocSymI->getName();
+ error(errorToErrorCode(RelocSymName.takeError()));
uint64_t Offset = Reloc.getOffset();
if (Offset >= SymOffset && Offset < SymEnd) {
*I = *RelocSymName;
@@ -101,8 +101,8 @@ static void collectRelocationOffsets(
const object::symbol_iterator RelocSymI = Reloc.getSymbol();
if (RelocSymI == Obj->symbol_end())
continue;
- ErrorOr<StringRef> RelocSymName = RelocSymI->getName();
- error(RelocSymName.getError());
+ Expected<StringRef> RelocSymName = RelocSymI->getName();
+ error(errorToErrorCode(RelocSymName.takeError()));
uint64_t Offset = Reloc.getOffset();
if (Offset >= SymOffset && Offset < SymEnd)
Collection[std::make_pair(SymName, Offset - SymOffset)] = *RelocSymName;
@@ -175,8 +175,8 @@ static void dumpCXXData(const ObjectFile *Obj) {
for (auto &P : SymAddr) {
object::SymbolRef Sym = P.first;
uint64_t SymSize = P.second;
- ErrorOr<StringRef> SymNameOrErr = Sym.getName();
- error(SymNameOrErr.getError());
+ Expected<StringRef> SymNameOrErr = Sym.getName();
+ error(errorToErrorCode(SymNameOrErr.takeError()));
StringRef SymName = *SymNameOrErr;
ErrorOr<object::section_iterator> SecIOrErr = Sym.getSection();
error(SecIOrErr.getError());
diff --git a/llvm/tools/llvm-nm/llvm-nm.cpp b/llvm/tools/llvm-nm/llvm-nm.cpp
index dad04b9594d..f86e758eb08 100644
--- a/llvm/tools/llvm-nm/llvm-nm.cpp
+++ b/llvm/tools/llvm-nm/llvm-nm.cpp
@@ -724,9 +724,11 @@ static char getSymbolNMTypeChar(ELFObjectFileBase &Obj,
}
if (SymI->getELFType() == ELF::STT_SECTION) {
- ErrorOr<StringRef> Name = SymI->getName();
- if (error(Name.getError()))
+ Expected<StringRef> Name = SymI->getName();
+ if (!Name) {
+ consumeError(Name.takeError());
return '?';
+ }
return StringSwitch<char>(*Name)
.StartsWith(".debug", 'N')
.StartsWith(".note", 'n')
@@ -741,9 +743,11 @@ static char getSymbolNMTypeChar(COFFObjectFile &Obj, symbol_iterator I) {
// OK, this is COFF.
symbol_iterator SymI(I);
- ErrorOr<StringRef> Name = SymI->getName();
- if (error(Name.getError()))
+ Expected<StringRef> Name = SymI->getName();
+ if (!Name) {
+ consumeError(Name.takeError());
return '?';
+ }
char Ret = StringSwitch<char>(*Name)
.StartsWith(".debug", 'N')
diff --git a/llvm/tools/llvm-objdump/COFFDump.cpp b/llvm/tools/llvm-objdump/COFFDump.cpp
index aee771e42a2..c20edfbdc68 100644
--- a/llvm/tools/llvm-objdump/COFFDump.cpp
+++ b/llvm/tools/llvm-objdump/COFFDump.cpp
@@ -215,9 +215,9 @@ static std::error_code resolveSymbolName(const std::vector<RelocationRef> &Rels,
SymbolRef Sym;
if (std::error_code EC = resolveSymbol(Rels, Offset, Sym))
return EC;
- ErrorOr<StringRef> NameOrErr = Sym.getName();
- if (std::error_code EC = NameOrErr.getError())
- return EC;
+ Expected<StringRef> NameOrErr = Sym.getName();
+ if (!NameOrErr)
+ return errorToErrorCode(NameOrErr.takeError());
Name = *NameOrErr;
return std::error_code();
}
diff --git a/llvm/tools/llvm-objdump/MachODump.cpp b/llvm/tools/llvm-objdump/MachODump.cpp
index 68e945712fd..e13c30bedd1 100644
--- a/llvm/tools/llvm-objdump/MachODump.cpp
+++ b/llvm/tools/llvm-objdump/MachODump.cpp
@@ -273,9 +273,14 @@ static void getSectionsAndSymbols(MachOObjectFile *MachOObj,
SmallVectorImpl<uint64_t> &FoundFns,
uint64_t &BaseSegmentAddress) {
for (const SymbolRef &Symbol : MachOObj->symbols()) {
- ErrorOr<StringRef> SymName = Symbol.getName();
- if (std::error_code EC = SymName.getError())
- report_fatal_error(EC.message());
+ Expected<StringRef> SymName = Symbol.getName();
+ if (!SymName) {
+ std::string Buf;
+ raw_string_ostream OS(Buf);
+ logAllUnhandledErrors(SymName.takeError(), OS, "");
+ OS.flush();
+ report_fatal_error(Buf);
+ }
if (!SymName->startswith("ltmp"))
Symbols.push_back(Symbol);
}
@@ -353,9 +358,14 @@ static void PrintIndirectSymbolTable(MachOObjectFile *O, bool verbose,
if (indirect_symbol < Symtab.nsyms) {
symbol_iterator Sym = O->getSymbolByIndex(indirect_symbol);
SymbolRef Symbol = *Sym;
- ErrorOr<StringRef> SymName = Symbol.getName();
- if (std::error_code EC = SymName.getError())
- report_fatal_error(EC.message());
+ Expected<StringRef> SymName = Symbol.getName();
+ if (!SymName) {
+ std::string Buf;
+ raw_string_ostream OS(Buf);
+ logAllUnhandledErrors(SymName.takeError(), OS, "");
+ OS.flush();
+ report_fatal_error(Buf);
+ }
outs() << *SymName;
} else {
outs() << "?";
@@ -587,9 +597,14 @@ static void CreateSymbolAddressMap(MachOObjectFile *O,
if (ST == SymbolRef::ST_Function || ST == SymbolRef::ST_Data ||
ST == SymbolRef::ST_Other) {
uint64_t Address = Symbol.getValue();
- ErrorOr<StringRef> SymNameOrErr = Symbol.getName();
- if (std::error_code EC = SymNameOrErr.getError())
- report_fatal_error(EC.message());
+ Expected<StringRef> SymNameOrErr = Symbol.getName();
+ if (!SymNameOrErr) {
+ std::string Buf;
+ raw_string_ostream OS(Buf);
+ logAllUnhandledErrors(SymNameOrErr.takeError(), OS, "");
+ OS.flush();
+ report_fatal_error(Buf);
+ }
StringRef SymName = *SymNameOrErr;
if (!SymName.startswith(".objc"))
(*AddrMap)[Address] = SymName;
@@ -823,9 +838,14 @@ static void DumpLiteralPointerSection(MachOObjectFile *O,
[&](const std::pair<uint64_t, SymbolRef> &P) { return P.first == i; });
if (Reloc != Relocs.end()) {
symbol_iterator RelocSym = Reloc->second;
- ErrorOr<StringRef> SymName = RelocSym->getName();
- if (std::error_code EC = SymName.getError())
- report_fatal_error(EC.message());
+ Expected<StringRef> SymName = RelocSym->getName();
+ if (!SymName) {
+ std::string Buf;
+ raw_string_ostream OS(Buf);
+ logAllUnhandledErrors(SymName.takeError(), OS, "");
+ OS.flush();
+ report_fatal_error(Buf);
+ }
outs() << "external relocation entry for symbol:" << *SymName << "\n";
continue;
}
@@ -1778,9 +1798,14 @@ static int SymbolizerGetOpInfo(void *DisInfo, uint64_t Pc, uint64_t Offset,
}
}
if (reloc_found && isExtern) {
- ErrorOr<StringRef> SymName = Symbol.getName();
- if (std::error_code EC = SymName.getError())
- report_fatal_error(EC.message());
+ Expected<StringRef> SymName = Symbol.getName();
+ if (!SymName) {
+ std::string Buf;
+ raw_string_ostream OS(Buf);
+ logAllUnhandledErrors(SymName.takeError(), OS, "");
+ OS.flush();
+ report_fatal_error(Buf);
+ }
const char *name = SymName->data();
op_info->AddSymbol.Present = 1;
op_info->AddSymbol.Name = name;
@@ -1848,9 +1873,14 @@ static int SymbolizerGetOpInfo(void *DisInfo, uint64_t Pc, uint64_t Offset,
// is the offset from the external symbol.
if (info->O->getAnyRelocationPCRel(RE))
op_info->Value -= Pc + Offset + Size;
- ErrorOr<StringRef> SymName = Symbol.getName();
- if (std::error_code EC = SymName.getError())
- report_fatal_error(EC.message());
+ Expected<StringRef> SymName = Symbol.getName();
+ if (!SymName) {
+ std::string Buf;
+ raw_string_ostream OS(Buf);
+ logAllUnhandledErrors(SymName.takeError(), OS, "");
+ OS.flush();
+ report_fatal_error(Buf);
+ }
const char *name = SymName->data();
unsigned Type = info->O->getAnyRelocationType(RE);
if (Type == MachO::X86_64_RELOC_SUBTRACTOR) {
@@ -1865,9 +1895,14 @@ static int SymbolizerGetOpInfo(void *DisInfo, uint64_t Pc, uint64_t Offset,
op_info->SubtractSymbol.Name = name;
symbol_iterator RelocSymNext = info->O->getSymbolByIndex(SymbolNum);
Symbol = *RelocSymNext;
- ErrorOr<StringRef> SymNameNext = Symbol.getName();
- if (std::error_code EC = SymNameNext.getError())
- report_fatal_error(EC.message());
+ Expected<StringRef> SymNameNext = Symbol.getName();
+ if (!SymNameNext) {
+ std::string Buf;
+ raw_string_ostream OS(Buf);
+ logAllUnhandledErrors(SymNameNext.takeError(), OS, "");
+ OS.flush();
+ report_fatal_error(Buf);
+ }
name = SymNameNext->data();
}
}
@@ -1938,9 +1973,14 @@ static int SymbolizerGetOpInfo(void *DisInfo, uint64_t Pc, uint64_t Offset,
}
if (isExtern) {
- ErrorOr<StringRef> SymName = Symbol.getName();
- if (std::error_code EC = SymName.getError())
- report_fatal_error(EC.message());
+ Expected<StringRef> SymName = Symbol.getName();
+ if (!SymName) {
+ std::string Buf;
+ raw_string_ostream OS(Buf);
+ logAllUnhandledErrors(SymName.takeError(), OS, "");
+ OS.flush();
+ report_fatal_error(Buf);
+ }
const char *name = SymName->data();
op_info->AddSymbol.Present = 1;
op_info->AddSymbol.Name = name;
@@ -2058,9 +2098,14 @@ static int SymbolizerGetOpInfo(void *DisInfo, uint64_t Pc, uint64_t Offset,
// NOTE: Scattered relocations don't exist on arm64.
if (!info->O->getPlainRelocationExternal(RE))
return 0;
- ErrorOr<StringRef> SymName = Reloc->getSymbol()->getName();
- if (std::error_code EC = SymName.getError())
- report_fatal_error(EC.message());
+ Expected<StringRef> SymName = Reloc->getSymbol()->getName();
+ if (!SymName) {
+ std::string Buf;
+ raw_string_ostream OS(Buf);
+ logAllUnhandledErrors(SymName.takeError(), OS, "");
+ OS.flush();
+ report_fatal_error(Buf);
+ }
const char *name = SymName->data();
op_info->AddSymbol.Present = 1;
op_info->AddSymbol.Name = name;
@@ -2188,9 +2233,14 @@ static const char *GuessIndirectSymbol(uint64_t ReferenceValue,
if (indirect_symbol < Symtab.nsyms) {
symbol_iterator Sym = info->O->getSymbolByIndex(indirect_symbol);
SymbolRef Symbol = *Sym;
- ErrorOr<StringRef> SymName = Symbol.getName();
- if (std::error_code EC = SymName.getError())
- report_fatal_error(EC.message());
+ Expected<StringRef> SymName = Symbol.getName();
+ if (!SymName) {
+ std::string Buf;
+ raw_string_ostream OS(Buf);
+ logAllUnhandledErrors(SymName.takeError(), OS, "");
+ OS.flush();
+ report_fatal_error(Buf);
+ }
const char *name = SymName->data();
return name;
}
@@ -2223,9 +2273,14 @@ static const char *GuessIndirectSymbol(uint64_t ReferenceValue,
if (indirect_symbol < Symtab.nsyms) {
symbol_iterator Sym = info->O->getSymbolByIndex(indirect_symbol);
SymbolRef Symbol = *Sym;
- ErrorOr<StringRef> SymName = Symbol.getName();
- if (std::error_code EC = SymName.getError())
- report_fatal_error(EC.message());
+ Expected<StringRef> SymName = Symbol.getName();
+ if (!SymName) {
+ std::string Buf;
+ raw_string_ostream OS(Buf);
+ logAllUnhandledErrors(SymName.takeError(), OS, "");
+ OS.flush();
+ report_fatal_error(Buf);
+ }
const char *name = SymName->data();
return name;
}
@@ -2452,9 +2507,14 @@ static const char *get_symbol_64(uint32_t sect_offset, SectionRef S,
const char *SymbolName = nullptr;
if (reloc_found && isExtern) {
n_value = Symbol.getValue();
- ErrorOr<StringRef> NameOrError = Symbol.getName();
- if (std::error_code EC = NameOrError.getError())
- report_fatal_error(EC.message());
+ Expected<StringRef> NameOrError = Symbol.getName();
+ if (!NameOrError) {
+ std::string Buf;
+ raw_string_ostream OS(Buf);
+ logAllUnhandledErrors(NameOrError.takeError(), OS, "");
+ OS.flush();
+ report_fatal_error(Buf);
+ }
StringRef Name = *NameOrError;
if (!Name.empty()) {
SymbolName = Name.data();
@@ -6100,9 +6160,14 @@ static void DisassembleMachO(StringRef Filename, MachOObjectFile *MachOOF,
if (ST == SymbolRef::ST_Function || ST == SymbolRef::ST_Data ||
ST == SymbolRef::ST_Other) {
uint64_t Address = Symbol.getValue();
- ErrorOr<StringRef> SymNameOrErr = Symbol.getName();
- if (std::error_code EC = SymNameOrErr.getError())
- report_fatal_error(EC.message());
+ Expected<StringRef> SymNameOrErr = Symbol.getName();
+ if (!SymNameOrErr) {
+ std::string Buf;
+ raw_string_ostream OS(Buf);
+ logAllUnhandledErrors(SymNameOrErr.takeError(), OS, "");
+ OS.flush();
+ report_fatal_error(Buf);
+ }
StringRef SymName = *SymNameOrErr;
AddrMap[Address] = SymName;
if (!DisSymName.empty() && DisSymName == SymName)
@@ -6142,9 +6207,14 @@ static void DisassembleMachO(StringRef Filename, MachOObjectFile *MachOOF,
// Disassemble symbol by symbol.
for (unsigned SymIdx = 0; SymIdx != Symbols.size(); SymIdx++) {
- ErrorOr<StringRef> SymNameOrErr = Symbols[SymIdx].getName();
- if (std::error_code EC = SymNameOrErr.getError())
- report_fatal_error(EC.message());
+ Expected<StringRef> SymNameOrErr = Symbols[SymIdx].getName();
+ if (!SymNameOrErr) {
+ std::string Buf;
+ raw_string_ostream OS(Buf);
+ logAllUnhandledErrors(SymNameOrErr.takeError(), OS, "");
+ OS.flush();
+ report_fatal_error(Buf);
+ }
StringRef SymName = *SymNameOrErr;
ErrorOr<SymbolRef::Type> STOrErr = Symbols[SymIdx].getType();
@@ -6412,9 +6482,14 @@ static void findUnwindRelocNameAddend(const MachOObjectFile *Obj,
const RelocationRef &Reloc, uint64_t Addr,
StringRef &Name, uint64_t &Addend) {
if (Reloc.getSymbol() != Obj->symbol_end()) {
- ErrorOr<StringRef> NameOrErr = Reloc.getSymbol()->getName();
- if (std::error_code EC = NameOrErr.getError())
- report_fatal_error(EC.message());
+ Expected<StringRef> NameOrErr = Reloc.getSymbol()->getName();
+ if (!NameOrErr) {
+ std::string Buf;
+ raw_string_ostream OS(Buf);
+ logAllUnhandledErrors(NameOrErr.takeError(), OS, "");
+ OS.flush();
+ report_fatal_error(Buf);
+ }
Name = *NameOrErr;
Addend = Addr;
return;
@@ -6440,9 +6515,14 @@ static void findUnwindRelocNameAddend(const MachOObjectFile *Obj,
section_iterator SymSection = *Sym->second.getSection();
if (RelocSection == *SymSection) {
// There's a valid symbol in the same section before this reference.
- ErrorOr<StringRef> NameOrErr = Sym->second.getName();
- if (std::error_code EC = NameOrErr.getError())
- report_fatal_error(EC.message());
+ Expected<StringRef> NameOrErr = Sym->second.getName();
+ if (!NameOrErr) {
+ std::string Buf;
+ raw_string_ostream OS(Buf);
+ logAllUnhandledErrors(NameOrErr.takeError(), OS, "");
+ OS.flush();
+ report_fatal_error(Buf);
+ }
Name = *NameOrErr;
Addend = Addr - Sym->first;
return;
diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp
index 6eab69c1b2e..c99e4b0e205 100644
--- a/llvm/tools/llvm-objdump/llvm-objdump.cpp
+++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp
@@ -494,9 +494,9 @@ static std::error_code getRelocationValueString(const ELFObjectFile<ELFT> *Obj,
return EC;
Target = *SecName;
} else {
- ErrorOr<StringRef> SymName = symb->getName(StrTab);
+ Expected<StringRef> SymName = symb->getName(StrTab);
if (!SymName)
- return SymName.getError();
+ return errorToErrorCode(SymName.takeError());
Target = *SymName;
}
switch (EF.getHeader()->e_machine) {
@@ -586,9 +586,9 @@ static std::error_code getRelocationValueString(const COFFObjectFile *Obj,
const RelocationRef &Rel,
SmallVectorImpl<char> &Result) {
symbol_iterator SymI = Rel.getSymbol();
- ErrorOr<StringRef> SymNameOrErr = SymI->getName();
- if (std::error_code EC = SymNameOrErr.getError())
- return EC;
+ Expected<StringRef> SymNameOrErr = SymI->getName();
+ if (!SymNameOrErr)
+ return errorToErrorCode(SymNameOrErr.takeError());
StringRef SymName = *SymNameOrErr;
Result.append(SymName.begin(), SymName.end());
return std::error_code();
@@ -613,9 +613,14 @@ static void printRelocationTargetName(const MachOObjectFile *O,
report_fatal_error(ec.message());
if (*Addr != Val)
continue;
- ErrorOr<StringRef> Name = Symbol.getName();
- if (std::error_code EC = Name.getError())
- report_fatal_error(EC.message());
+ Expected<StringRef> Name = Symbol.getName();
+ if (!Name) {
+ std::string Buf;
+ raw_string_ostream OS(Buf);
+ logAllUnhandledErrors(Name.takeError(), OS, "");
+ OS.flush();
+ report_fatal_error(Buf);
+ }
fmt << *Name;
return;
}
@@ -646,8 +651,8 @@ static void printRelocationTargetName(const MachOObjectFile *O,
if (isExtern) {
symbol_iterator SI = O->symbol_begin();
advance(SI, Val);
- ErrorOr<StringRef> SOrErr = SI->getName();
- error(SOrErr.getError());
+ Expected<StringRef> SOrErr = SI->getName();
+ error(errorToErrorCode(SOrErr.takeError()));
S = *SOrErr;
} else {
section_iterator SI = O->section_begin();
@@ -952,8 +957,8 @@ static void DisassembleObject(const ObjectFile *Obj, bool InlineRelocs) {
error(AddressOrErr.getError());
uint64_t Address = *AddressOrErr;
- ErrorOr<StringRef> Name = Symbol.getName();
- error(Name.getError());
+ Expected<StringRef> Name = Symbol.getName();
+ error(errorToErrorCode(Name.takeError()));
if (Name->empty())
continue;
@@ -1358,8 +1363,9 @@ void llvm::PrintSymbolTable(const ObjectFile *o) {
if (Type == SymbolRef::ST_Debug && Section != o->section_end()) {
Section->getName(Name);
} else {
- ErrorOr<StringRef> NameOrErr = Symbol.getName();
- error(NameOrErr.getError());
+ Expected<StringRef> NameOrErr = Symbol.getName();
+ if (!NameOrErr)
+ report_error(o->getFileName(), NameOrErr.takeError());
Name = *NameOrErr;
}
diff --git a/llvm/tools/llvm-readobj/ARMEHABIPrinter.h b/llvm/tools/llvm-readobj/ARMEHABIPrinter.h
index 42f2a12367d..5845eb02d11 100644
--- a/llvm/tools/llvm-readobj/ARMEHABIPrinter.h
+++ b/llvm/tools/llvm-readobj/ARMEHABIPrinter.h
@@ -355,8 +355,15 @@ PrinterContext<ET>::FunctionAtAddress(unsigned Section,
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);
+ Sym.getType() == ELF::STT_FUNC) {
+ auto NameOrErr = Sym.getName(StrTable);
+ if (!NameOrErr) {
+ // TODO: Actually report errors helpfully.
+ consumeError(NameOrErr.takeError());
+ return readobj_error::unknown_symbol;
+ }
+ return *NameOrErr;
+ }
return readobj_error::unknown_symbol;
}
diff --git a/llvm/tools/llvm-readobj/ARMWinEHPrinter.cpp b/llvm/tools/llvm-readobj/ARMWinEHPrinter.cpp
index 0f74a998707..8d00c90b3c1 100644
--- a/llvm/tools/llvm-readobj/ARMWinEHPrinter.cpp
+++ b/llvm/tools/llvm-readobj/ARMWinEHPrinter.cpp
@@ -570,9 +570,14 @@ bool Decoder::dumpXDataRecord(const COFFObjectFile &COFF,
if (!Symbol)
Symbol = getSymbol(COFF, Address, /*FunctionOnly=*/true);
- ErrorOr<StringRef> Name = Symbol->getName();
- if (std::error_code EC = Name.getError())
- report_fatal_error(EC.message());
+ Expected<StringRef> Name = Symbol->getName();
+ if (!Name) {
+ std::string Buf;
+ llvm::raw_string_ostream OS(Buf);
+ logAllUnhandledErrors(Name.takeError(), OS, "");
+ OS.flush();
+ report_fatal_error(Buf);
+ }
ListScope EHS(SW, "ExceptionHandler");
SW.printString("Routine", formatSymbol(*Name, Address));
@@ -604,9 +609,14 @@ bool Decoder::dumpUnpackedEntry(const COFFObjectFile &COFF,
StringRef FunctionName;
uint64_t FunctionAddress;
if (Function) {
- ErrorOr<StringRef> FunctionNameOrErr = Function->getName();
- if (std::error_code EC = FunctionNameOrErr.getError())
- report_fatal_error(EC.message());
+ Expected<StringRef> FunctionNameOrErr = Function->getName();
+ if (!FunctionNameOrErr) {
+ std::string Buf;
+ llvm::raw_string_ostream OS(Buf);
+ logAllUnhandledErrors(FunctionNameOrErr.takeError(), OS, "");
+ OS.flush();
+ report_fatal_error(Buf);
+ }
FunctionName = *FunctionNameOrErr;
ErrorOr<uint64_t> FunctionAddressOrErr = Function->getAddress();
if (std::error_code EC = FunctionAddressOrErr.getError())
@@ -622,9 +632,14 @@ bool Decoder::dumpUnpackedEntry(const COFFObjectFile &COFF,
SW.printString("Function", formatSymbol(FunctionName, FunctionAddress));
if (XDataRecord) {
- ErrorOr<StringRef> Name = XDataRecord->getName();
- if (std::error_code EC = Name.getError())
- report_fatal_error(EC.message());
+ Expected<StringRef> Name = XDataRecord->getName();
+ if (!Name) {
+ std::string Buf;
+ llvm::raw_string_ostream OS(Buf);
+ logAllUnhandledErrors(Name.takeError(), OS, "");
+ OS.flush();
+ report_fatal_error(Buf);
+ }
ErrorOr<uint64_t> AddressOrErr = XDataRecord->getAddress();
if (std::error_code EC = AddressOrErr.getError())
@@ -671,9 +686,14 @@ bool Decoder::dumpPackedEntry(const object::COFFObjectFile &COFF,
StringRef FunctionName;
uint64_t FunctionAddress;
if (Function) {
- ErrorOr<StringRef> FunctionNameOrErr = Function->getName();
- if (std::error_code EC = FunctionNameOrErr.getError())
- report_fatal_error(EC.message());
+ Expected<StringRef> FunctionNameOrErr = Function->getName();
+ if (!FunctionNameOrErr) {
+ std::string Buf;
+ llvm::raw_string_ostream OS(Buf);
+ logAllUnhandledErrors(FunctionNameOrErr.takeError(), OS, "");
+ OS.flush();
+ report_fatal_error(Buf);
+ }
FunctionName = *FunctionNameOrErr;
ErrorOr<uint64_t> FunctionAddressOrErr = Function->getAddress();
FunctionAddress = *FunctionAddressOrErr;
diff --git a/llvm/tools/llvm-readobj/COFFDumper.cpp b/llvm/tools/llvm-readobj/COFFDumper.cpp
index da869817f86..56c83c2046d 100644
--- a/llvm/tools/llvm-readobj/COFFDumper.cpp
+++ b/llvm/tools/llvm-readobj/COFFDumper.cpp
@@ -187,9 +187,9 @@ std::error_code COFFDumper::resolveSymbolName(const coff_section *Section,
SymbolRef Symbol;
if (std::error_code EC = resolveSymbol(Section, Offset, Symbol))
return EC;
- ErrorOr<StringRef> NameOrErr = Symbol.getName();
- if (std::error_code EC = NameOrErr.getError())
- return EC;
+ Expected<StringRef> NameOrErr = Symbol.getName();
+ if (!NameOrErr)
+ return errorToErrorCode(NameOrErr.takeError());
Name = *NameOrErr;
return std::error_code();
}
@@ -2605,8 +2605,8 @@ void COFFDumper::printRelocation(const SectionRef &Section,
Reloc.getTypeName(RelocName);
symbol_iterator Symbol = Reloc.getSymbol();
if (Symbol != Obj->symbol_end()) {
- ErrorOr<StringRef> SymbolNameOrErr = Symbol->getName();
- error(SymbolNameOrErr.getError());
+ Expected<StringRef> SymbolNameOrErr = Symbol->getName();
+ error(errorToErrorCode(SymbolNameOrErr.takeError()));
SymbolName = *SymbolNameOrErr;
}
diff --git a/llvm/tools/llvm-readobj/MachODumper.cpp b/llvm/tools/llvm-readobj/MachODumper.cpp
index 8bd09b62a1f..2faf36842ed 100644
--- a/llvm/tools/llvm-readobj/MachODumper.cpp
+++ b/llvm/tools/llvm-readobj/MachODumper.cpp
@@ -541,8 +541,9 @@ void MachODumper::printRelocation(const MachOObjectFile *Obj,
if (IsExtern) {
symbol_iterator Symbol = Reloc.getSymbol();
if (Symbol != Obj->symbol_end()) {
- ErrorOr<StringRef> TargetNameOrErr = Symbol->getName();
- error(TargetNameOrErr.getError());
+ Expected<StringRef> TargetNameOrErr = Symbol->getName();
+ if (!TargetNameOrErr)
+ error(errorToErrorCode(TargetNameOrErr.takeError()));
TargetName = *TargetNameOrErr;
}
} else if (!IsScattered) {
@@ -605,7 +606,11 @@ void MachODumper::printDynamicSymbols() {
void MachODumper::printSymbol(const SymbolRef &Symbol) {
StringRef SymbolName;
- if (ErrorOr<StringRef> SymbolNameOrErr = Symbol.getName())
+ Expected<StringRef> SymbolNameOrErr = Symbol.getName();
+ if (!SymbolNameOrErr) {
+ // TODO: Actually report errors helpfully.
+ consumeError(SymbolNameOrErr.takeError());
+ } else
SymbolName = *SymbolNameOrErr;
MachOSymbol MOSymbol;
diff --git a/llvm/tools/llvm-readobj/Win64EHDumper.cpp b/llvm/tools/llvm-readobj/Win64EHDumper.cpp
index 2da5ae3200f..e6e8367f293 100644
--- a/llvm/tools/llvm-readobj/Win64EHDumper.cpp
+++ b/llvm/tools/llvm-readobj/Win64EHDumper.cpp
@@ -120,13 +120,17 @@ static std::string formatSymbol(const Dumper::Context &Ctx,
SymbolRef Symbol;
if (!Ctx.ResolveSymbol(Section, Offset, Symbol, Ctx.UserData)) {
- if (ErrorOr<StringRef> Name = Symbol.getName()) {
+ Expected<StringRef> Name = Symbol.getName();
+ if (Name) {
OS << *Name;
if (Displacement > 0)
OS << format(" +0x%X (0x%" PRIX64 ")", Displacement, Offset);
else
OS << format(" (0x%" PRIX64 ")", Offset);
return OS.str();
+ } else {
+ // TODO: Actually report errors helpfully.
+ consumeError(Name.takeError());
}
}
diff --git a/llvm/tools/llvm-readobj/llvm-readobj.h b/llvm/tools/llvm-readobj/llvm-readobj.h
index 7155d7e7298..b169c002918 100644
--- a/llvm/tools/llvm-readobj/llvm-readobj.h
+++ b/llvm/tools/llvm-readobj/llvm-readobj.h
@@ -13,6 +13,7 @@
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/ErrorOr.h"
+#include "llvm/Support/Error.h"
#include <string>
namespace llvm {
@@ -28,6 +29,15 @@ namespace llvm {
return *EO;
reportError(EO.getError().message());
}
+ template <class T> T unwrapOrError(Expected<T> EO) {
+ if (EO)
+ return *EO;
+ std::string Buf;
+ raw_string_ostream OS(Buf);
+ logAllUnhandledErrors(EO.takeError(), OS, "");
+ OS.flush();
+ reportError(Buf);
+ }
bool relocAddressLess(object::RelocationRef A,
object::RelocationRef B);
} // namespace llvm
diff --git a/llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp b/llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp
index 6c0c738b59f..d65fde1d696 100644
--- a/llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp
+++ b/llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp
@@ -340,9 +340,12 @@ static int printLineInfoForInput(bool LoadObjects, bool UseDebugObj) {
continue;
SymbolRef::Type Type = *TypeOrErr;
if (Type == object::SymbolRef::ST_Function) {
- ErrorOr<StringRef> Name = Sym.getName();
- if (!Name)
+ Expected<StringRef> Name = Sym.getName();
+ if (!Name) {
+ // TODO: Actually report errors helpfully.
+ consumeError(Name.takeError());
continue;
+ }
ErrorOr<uint64_t> AddrOrErr = Sym.getAddress();
if (!AddrOrErr)
continue;
diff --git a/llvm/tools/obj2yaml/coff2yaml.cpp b/llvm/tools/obj2yaml/coff2yaml.cpp
index aea6fe90d70..c734601ede7 100644
--- a/llvm/tools/obj2yaml/coff2yaml.cpp
+++ b/llvm/tools/obj2yaml/coff2yaml.cpp
@@ -121,9 +121,14 @@ void COFFDumper::dumpSections(unsigned NumSections) {
const object::coff_relocation *reloc = Obj.getCOFFRelocation(Reloc);
COFFYAML::Relocation Rel;
object::symbol_iterator Sym = Reloc.getSymbol();
- ErrorOr<StringRef> SymbolNameOrErr = Sym->getName();
- if (std::error_code EC = SymbolNameOrErr.getError())
- report_fatal_error(EC.message());
+ Expected<StringRef> SymbolNameOrErr = Sym->getName();
+ if (!SymbolNameOrErr) {
+ std::string Buf;
+ raw_string_ostream OS(Buf);
+ logAllUnhandledErrors(SymbolNameOrErr.takeError(), OS, "");
+ OS.flush();
+ report_fatal_error(Buf);
+ }
Rel.SymbolName = *SymbolNameOrErr;
Rel.VirtualAddress = reloc->VirtualAddress;
Rel.Type = reloc->Type;
diff --git a/llvm/tools/obj2yaml/elf2yaml.cpp b/llvm/tools/obj2yaml/elf2yaml.cpp
index e05f428e16a..782832d5457 100644
--- a/llvm/tools/obj2yaml/elf2yaml.cpp
+++ b/llvm/tools/obj2yaml/elf2yaml.cpp
@@ -179,10 +179,10 @@ ELFDumper<ELFT>::dumpSymbol(const Elf_Sym *Sym, const Elf_Shdr *SymTab,
S.Size = Sym->st_size;
S.Other = Sym->st_other;
- ErrorOr<StringRef> NameOrErr = Sym->getName(StrTable);
- if (std::error_code EC = NameOrErr.getError())
- return EC;
- S.Name = NameOrErr.get();
+ Expected<StringRef> SymbolNameOrErr = Sym->getName(StrTable);
+ if (!SymbolNameOrErr)
+ return errorToErrorCode(SymbolNameOrErr.takeError());
+ S.Name = SymbolNameOrErr.get();
ErrorOr<const Elf_Shdr *> ShdrOrErr = Obj.getSection(Sym, SymTab, ShndxTable);
if (std::error_code EC = ShdrOrErr.getError())
@@ -191,7 +191,7 @@ ELFDumper<ELFT>::dumpSymbol(const Elf_Sym *Sym, const Elf_Shdr *SymTab,
if (!Shdr)
return obj2yaml_error::success;
- NameOrErr = Obj.getSectionName(Shdr);
+ ErrorOr<StringRef> NameOrErr = Obj.getSectionName(Shdr);
if (std::error_code EC = NameOrErr.getError())
return EC;
S.Section = NameOrErr.get();
@@ -217,9 +217,9 @@ std::error_code ELFDumper<ELFT>::dumpRelocation(const RelT *Rel,
return EC;
StringRef StrTab = *StrTabOrErr;
- ErrorOr<StringRef> NameOrErr = Sym->getName(StrTab);
- if (std::error_code EC = NameOrErr.getError())
- return EC;
+ Expected<StringRef> NameOrErr = Sym->getName(StrTab);
+ if (!NameOrErr)
+ return errorToErrorCode(NameOrErr.takeError());
R.Symbol = NameOrErr.get();
return obj2yaml_error::success;
@@ -368,9 +368,9 @@ ErrorOr<ELFYAML::Group *> ELFDumper<ELFT>::dumpGroup(const Elf_Shdr *Shdr) {
auto sectionContents = Obj.getSectionContents(Shdr);
if (std::error_code ec = sectionContents.getError())
return ec;
- ErrorOr<StringRef> symbolName = symbol->getName(StrTab);
- if (std::error_code EC = symbolName.getError())
- return EC;
+ Expected<StringRef> symbolName = symbol->getName(StrTab);
+ if (!symbolName)
+ return errorToErrorCode(symbolName.takeError());
S->Info = *symbolName;
const Elf_Word *groupMembers =
reinterpret_cast<const Elf_Word *>(sectionContents->data());
diff --git a/llvm/tools/sancov/sancov.cc b/llvm/tools/sancov/sancov.cc
index bf6762e29a0..6ab5f14eabc 100644
--- a/llvm/tools/sancov/sancov.cc
+++ b/llvm/tools/sancov/sancov.cc
@@ -314,8 +314,8 @@ findSanitizerCovFunctions(const object::ObjectFile &O) {
ErrorOr<uint64_t> AddressOrErr = Symbol.getAddress();
FailIfError(AddressOrErr);
- ErrorOr<StringRef> NameOrErr = Symbol.getName();
- FailIfError(NameOrErr);
+ Expected<StringRef> NameOrErr = Symbol.getName();
+ FailIfError(errorToErrorCode(NameOrErr.takeError()));
StringRef Name = NameOrErr.get();
if (Name == "__sanitizer_cov" || Name == "__sanitizer_cov_with_check" ||
OpenPOWER on IntegriCloud