[llvm] r242656 - llvm-readobj: call exit(1) on error.
Filipe Cabecinhas
filcab at gmail.com
Sun Jul 19 22:23:27 PDT 2015
Thanks, I was going to ask for (or do) this after you introduced
reportError()
Filipe
On Sunday, July 19, 2015, Rafael Espindola <rafael.espindola at gmail.com>
wrote:
> Author: rafael
> Date: Sun Jul 19 22:23:55 2015
> New Revision: 242656
>
> URL: http://llvm.org/viewvc/llvm-project?rev=242656&view=rev
> Log:
> llvm-readobj: call exit(1) on error.
>
> llvm-readobj exists for testing llvm. We can safely stop the program
> the first time we know the input in corrupted.
>
> This is in preparation for making it handle a few more broken files.
>
> Modified:
> llvm/trunk/test/Object/corrupt.test
> llvm/trunk/tools/llvm-readobj/COFFDumper.cpp
> llvm/trunk/tools/llvm-readobj/ELFDumper.cpp
> llvm/trunk/tools/llvm-readobj/MachODumper.cpp
> llvm/trunk/tools/llvm-readobj/Win64EHDumper.cpp
> llvm/trunk/tools/llvm-readobj/llvm-readobj.cpp
> llvm/trunk/tools/llvm-readobj/llvm-readobj.h
>
> Modified: llvm/trunk/test/Object/corrupt.test
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/corrupt.test?rev=242656&r1=242655&r2=242656&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/Object/corrupt.test (original)
> +++ llvm/trunk/test/Object/corrupt.test Sun Jul 19 22:23:55 2015
> @@ -17,7 +17,6 @@ RUN: 2>&1 | FileCheck --check-prefix
> SECNAME: Error reading file: Invalid data was encountered while parsing
> the file.
>
> SECDATA: Error reading file: Invalid data was encountered while parsing
> the file.
> -SECDATA: Error reading file: Invalid data was encountered while parsing
> the file.
>
> SYMNAME: Error reading file: Invalid data was encountered while parsing
> the file.
>
>
> Modified: llvm/trunk/tools/llvm-readobj/COFFDumper.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/COFFDumper.cpp?rev=242656&r1=242655&r2=242656&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-readobj/COFFDumper.cpp (original)
> +++ llvm/trunk/tools/llvm-readobj/COFFDumper.cpp Sun Jul 19 22:23:55 2015
> @@ -385,14 +385,12 @@ void COFFDumper::printFileHeaders() {
> // Print PE header. This header does not exist if this is an object
> file and
> // not an executable.
> const pe32_header *PEHeader = nullptr;
> - if (error(Obj->getPE32Header(PEHeader)))
> - return;
> + error(Obj->getPE32Header(PEHeader));
> if (PEHeader)
> printPEHeader<pe32_header>(PEHeader);
>
> const pe32plus_header *PEPlusHeader = nullptr;
> - if (error(Obj->getPE32PlusHeader(PEPlusHeader)))
> - return;
> + error(Obj->getPE32PlusHeader(PEPlusHeader));
> if (PEPlusHeader)
> printPEHeader<pe32plus_header>(PEPlusHeader);
>
> @@ -477,8 +475,7 @@ void COFFDumper::printBaseOfDataField(co
>
> void COFFDumper::printCodeViewDebugInfo(const SectionRef &Section) {
> StringRef Data;
> - if (error(Section.getContents(Data)))
> - return;
> + error(Section.getContents(Data));
>
> SmallVector<StringRef, 10> FunctionNames;
> StringMap<StringRef> FunctionLineTables;
> @@ -534,9 +531,8 @@ void COFFDumper::printCodeViewDebugInfo(
> }
>
> StringRef FunctionName;
> - if (error(resolveSymbolName(Obj->getCOFFSection(Section), Offset,
> - FunctionName)))
> - return;
> + error(resolveSymbolName(Obj->getCOFFSection(Section), Offset,
> + FunctionName));
> W.printString("FunctionName", FunctionName);
> if (FunctionLineTables.count(FunctionName) != 0) {
> // Saw debug info for this function already?
> @@ -695,9 +691,8 @@ void COFFDumper::printCodeViewSymbolsSub
> uint32_t CodeSize = DE.getU32(&Offset);
> DE.getU8(&Offset, Unused, 12);
> StringRef SectionName;
> - if (error(resolveSymbolName(Obj->getCOFFSection(Section),
> - OffsetInSection + Offset, SectionName)))
> - return;
> + error(resolveSymbolName(Obj->getCOFFSection(Section),
> + OffsetInSection + Offset, SectionName));
> Offset += 4;
> DE.getU8(&Offset, Unused, 3);
> StringRef DisplayName = DE.getCStr(&Offset);
> @@ -748,8 +743,7 @@ void COFFDumper::printSections() {
> const coff_section *Section = Obj->getCOFFSection(Sec);
>
> StringRef Name;
> - if (error(Sec.getName(Name)))
> - Name = "";
> + error(Sec.getName(Name));
>
> DictScope D(W, "Section");
> W.printNumber("Number", SectionNumber);
> @@ -788,8 +782,7 @@ void COFFDumper::printSections() {
> if (opts::SectionData &&
> !(Section->Characteristics &
> COFF::IMAGE_SCN_CNT_UNINITIALIZED_DATA)) {
> StringRef Data;
> - if (error(Sec.getContents(Data)))
> - break;
> + error(Sec.getContents(Data));
>
> W.printBinaryBlock("SectionData", Data);
> }
> @@ -803,8 +796,7 @@ void COFFDumper::printRelocations() {
> for (const SectionRef &Section : Obj->sections()) {
> ++SectionNumber;
> StringRef Name;
> - if (error(Section.getName(Name)))
> - continue;
> + error(Section.getName(Name));
>
> bool PrintedGroup = false;
> for (const RelocationRef &Reloc : Section.relocations()) {
> @@ -834,8 +826,7 @@ void COFFDumper::printRelocation(const S
> symbol_iterator Symbol = Reloc.getSymbol();
> if (Symbol != Obj->symbol_end()) {
> ErrorOr<StringRef> SymbolNameOrErr = Symbol->getName();
> - if (error(SymbolNameOrErr.getError()))
> - return;
> + error(SymbolNameOrErr.getError());
> SymbolName = *SymbolNameOrErr;
> }
>
> @@ -914,8 +905,7 @@ void COFFDumper::printSymbol(const Symbo
> for (uint8_t I = 0; I < Symbol.getNumberOfAuxSymbols(); ++I) {
> if (Symbol.isFunctionDefinition()) {
> const coff_aux_function_definition *Aux;
> - if (error(getSymbolAuxData(Obj, Symbol, I, Aux)))
> - break;
> + error(getSymbolAuxData(Obj, Symbol, I, Aux));
>
> DictScope AS(W, "AuxFunctionDef");
> W.printNumber("TagIndex", Aux->TagIndex);
> @@ -925,8 +915,7 @@ void COFFDumper::printSymbol(const Symbo
>
> } else if (Symbol.isAnyUndefined()) {
> const coff_aux_weak_external *Aux;
> - if (error(getSymbolAuxData(Obj, Symbol, I, Aux)))
> - break;
> + error(getSymbolAuxData(Obj, Symbol, I, Aux));
>
> ErrorOr<COFFSymbolRef> Linked = Obj->getSymbol(Aux->TagIndex);
> StringRef LinkedName;
> @@ -943,8 +932,7 @@ void COFFDumper::printSymbol(const Symbo
>
> } else if (Symbol.isFileRecord()) {
> const char *FileName;
> - if (error(getSymbolAuxData(Obj, Symbol, I, FileName)))
> - break;
> + error(getSymbolAuxData(Obj, Symbol, I, FileName));
>
> DictScope AS(W, "AuxFileRecord");
>
> @@ -954,8 +942,7 @@ void COFFDumper::printSymbol(const Symbo
> break;
> } else if (Symbol.isSectionDefinition()) {
> const coff_aux_section_definition *Aux;
> - if (error(getSymbolAuxData(Obj, Symbol, I, Aux)))
> - break;
> + error(getSymbolAuxData(Obj, Symbol, I, Aux));
>
> int32_t AuxNumber = Aux->getNumber(Symbol.isBigObj());
>
> @@ -986,8 +973,7 @@ void COFFDumper::printSymbol(const Symbo
> }
> } else if (Symbol.isCLRToken()) {
> const coff_aux_clr_token *Aux;
> - if (error(getSymbolAuxData(Obj, Symbol, I, Aux)))
> - break;
> + error(getSymbolAuxData(Obj, Symbol, I, Aux));
>
> ErrorOr<COFFSymbolRef> ReferredSym =
> Obj->getSymbol(Aux->SymbolTableIndex);
> @@ -1040,9 +1026,9 @@ void COFFDumper::printImportedSymbols(
> iterator_range<imported_symbol_iterator> Range) {
> for (const ImportedSymbolRef &I : Range) {
> StringRef Sym;
> - if (error(I.getSymbolName(Sym))) return;
> + error(I.getSymbolName(Sym));
> uint16_t Ordinal;
> - if (error(I.getOrdinal(Ordinal))) return;
> + error(I.getOrdinal(Ordinal));
> W.printNumber("Symbol", Sym, Ordinal);
> }
> }
> @@ -1054,12 +1040,12 @@ void COFFDumper::printDelayImportedSymbo
> for (const ImportedSymbolRef &S : Range) {
> DictScope Import(W, "Import");
> StringRef Sym;
> - if (error(S.getSymbolName(Sym))) return;
> + error(S.getSymbolName(Sym));
> uint16_t Ordinal;
> - if (error(S.getOrdinal(Ordinal))) return;
> + error(S.getOrdinal(Ordinal));
> W.printNumber("Symbol", Sym, Ordinal);
> uint64_t Addr;
> - if (error(I.getImportAddress(Index++, Addr))) return;
> + error(I.getImportAddress(Index++, Addr));
> W.printHex("Address", Addr);
> }
> }
> @@ -1069,12 +1055,12 @@ void COFFDumper::printCOFFImports() {
> for (const ImportDirectoryEntryRef &I : Obj->import_directories()) {
> DictScope Import(W, "Import");
> StringRef Name;
> - if (error(I.getName(Name))) return;
> + error(I.getName(Name));
> W.printString("Name", Name);
> uint32_t Addr;
> - if (error(I.getImportLookupTableRVA(Addr))) return;
> + error(I.getImportLookupTableRVA(Addr));
> W.printHex("ImportLookupTableRVA", Addr);
> - if (error(I.getImportAddressTableRVA(Addr))) return;
> + error(I.getImportAddressTableRVA(Addr));
> W.printHex("ImportAddressTableRVA", Addr);
> printImportedSymbols(I.imported_symbols());
> }
> @@ -1083,10 +1069,10 @@ void COFFDumper::printCOFFImports() {
> for (const DelayImportDirectoryEntryRef &I :
> Obj->delay_import_directories()) {
> DictScope Import(W, "DelayImport");
> StringRef Name;
> - if (error(I.getName(Name))) return;
> + error(I.getName(Name));
> W.printString("Name", Name);
> const delay_import_directory_table_entry *Table;
> - if (error(I.getDelayImportTable(Table))) return;
> + error(I.getDelayImportTable(Table));
> W.printHex("Attributes", Table->Attributes);
> W.printHex("ModuleHandle", Table->ModuleHandle);
> W.printHex("ImportAddressTable", Table->DelayImportAddressTable);
> @@ -1104,12 +1090,9 @@ void COFFDumper::printCOFFExports() {
> StringRef Name;
> uint32_t Ordinal, RVA;
>
> - if (error(E.getSymbolName(Name)))
> - continue;
> - if (error(E.getOrdinal(Ordinal)))
> - continue;
> - if (error(E.getExportRVA(RVA)))
> - continue;
> + error(E.getSymbolName(Name));
> + error(E.getOrdinal(Ordinal));
> + error(E.getExportRVA(RVA));
>
> W.printNumber("Ordinal", Ordinal);
> W.printString("Name", Name);
> @@ -1122,13 +1105,11 @@ void COFFDumper::printCOFFDirectives() {
> StringRef Contents;
> StringRef Name;
>
> - if (error(Section.getName(Name)))
> - continue;
> + error(Section.getName(Name));
> if (Name != ".drectve")
> continue;
>
> - if (error(Section.getContents(Contents)))
> - return;
> + error(Section.getContents(Contents));
>
> W.printString("Directive(s)", Contents);
> }
> @@ -1152,10 +1133,8 @@ void COFFDumper::printCOFFBaseReloc() {
> for (const BaseRelocRef &I : Obj->base_relocs()) {
> uint8_t Type;
> uint32_t RVA;
> - if (error(I.getRVA(RVA)))
> - continue;
> - if (error(I.getType(Type)))
> - continue;
> + error(I.getRVA(RVA));
> + error(I.getType(Type));
> DictScope Import(W, "Entry");
> W.printString("Type", getBaseRelocTypeName(Type));
> W.printHex("Address", RVA);
>
> Modified: llvm/trunk/tools/llvm-readobj/ELFDumper.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/ELFDumper.cpp?rev=242656&r1=242655&r2=242656&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-readobj/ELFDumper.cpp (original)
> +++ llvm/trunk/tools/llvm-readobj/ELFDumper.cpp Sun Jul 19 22:23:55 2015
> @@ -164,8 +164,8 @@ getSectionNameIndex(const ELFO &Obj, con
> if (SectionIndex == SHN_XINDEX)
> SectionIndex = Obj.getExtendedSymbolTableIndex(&*Symbol);
> ErrorOr<const typename ELFO::Elf_Shdr *> Sec =
> Obj.getSection(SectionIndex);
> - if (!error(Sec.getError()))
> - SectionName = errorOrDefault(Obj.getSectionName(*Sec));
> + error(Sec.getError());
> + SectionName = errorOrDefault(Obj.getSectionName(*Sec));
> }
> }
>
> @@ -752,19 +752,17 @@ void ELFDumper<ELFT>::printRelocation(co
> Obj->getRelocationSymbol(Sec, &Rel);
> if (Sym.second && Sym.second->getType() == ELF::STT_SECTION) {
> ErrorOr<const Elf_Shdr *> Sec = Obj->getSection(Sym.second);
> - if (!error(Sec.getError())) {
> - ErrorOr<StringRef> SecName = Obj->getSectionName(*Sec);
> - if (SecName)
> - TargetName = SecName.get();
> - }
> + error(Sec.getError());
> + ErrorOr<StringRef> SecName = Obj->getSectionName(*Sec);
> + if (SecName)
> + TargetName = SecName.get();
> } else if (Sym.first) {
> const Elf_Shdr *SymTable = Sym.first;
> ErrorOr<const Elf_Shdr *> StrTableSec =
> Obj->getSection(SymTable->sh_link);
> - if (!error(StrTableSec.getError())) {
> - ErrorOr<StringRef> StrTableOrErr =
> Obj->getStringTable(*StrTableSec);
> - if (!error(StrTableOrErr.getError()))
> - TargetName = errorOrDefault(Sym.second->getName(*StrTableOrErr));
> - }
> + error(StrTableSec.getError());
> + ErrorOr<StringRef> StrTableOrErr = Obj->getStringTable(*StrTableSec);
> + error(StrTableOrErr.getError());
> + TargetName = errorOrDefault(Sym.second->getName(*StrTableOrErr));
> }
>
> if (opts::ExpandRelocs) {
>
> Modified: llvm/trunk/tools/llvm-readobj/MachODumper.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/MachODumper.cpp?rev=242656&r1=242655&r2=242656&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-readobj/MachODumper.cpp (original)
> +++ llvm/trunk/tools/llvm-readobj/MachODumper.cpp Sun Jul 19 22:23:55 2015
> @@ -375,8 +375,7 @@ void MachODumper::printSections(const Ma
> DataRefImpl DR = Section.getRawDataRefImpl();
>
> StringRef Name;
> - if (error(Section.getName(Name)))
> - Name = "";
> + error(Section.getName(Name));
>
> ArrayRef<char> RawName = Obj->getSectionRawName(DR);
> StringRef SegmentName = Obj->getSectionFinalSegmentName(DR);
> @@ -419,8 +418,7 @@ void MachODumper::printSections(const Ma
> bool IsBSS = Section.isBSS();
> if (!IsBSS) {
> StringRef Data;
> - if (error(Section.getContents(Data)))
> - break;
> + error(Section.getContents(Data));
>
> W.printBinaryBlock("SectionData", Data);
> }
> @@ -434,8 +432,7 @@ void MachODumper::printRelocations() {
> std::error_code EC;
> for (const SectionRef &Section : Obj->sections()) {
> StringRef Name;
> - if (error(Section.getName(Name)))
> - continue;
> + error(Section.getName(Name));
>
> bool PrintedGroup = false;
> for (const RelocationRef &Reloc : Section.relocations()) {
> @@ -475,15 +472,13 @@ void MachODumper::printRelocation(const
> symbol_iterator Symbol = Reloc.getSymbol();
> if (Symbol != Obj->symbol_end()) {
> ErrorOr<StringRef> TargetNameOrErr = Symbol->getName();
> - if (error(TargetNameOrErr.getError()))
> - return;
> + error(TargetNameOrErr.getError());
> TargetName = *TargetNameOrErr;
> }
> } else if (!IsScattered) {
> section_iterator SecI = Obj->getRelocationSection(DR);
> if (SecI != Obj->section_end()) {
> - if (error(SecI->getName(TargetName)))
> - return;
> + error(SecI->getName(TargetName));
> }
> }
> if (TargetName.empty())
> @@ -548,7 +543,8 @@ void MachODumper::printSymbol(const Symb
>
> StringRef SectionName = "";
> section_iterator SecI(Obj->section_begin());
> - if (!error(Symbol.getSection(SecI)) && SecI != Obj->section_end())
> + error(Symbol.getSection(SecI));
> + if (SecI != Obj->section_end())
> error(SecI->getName(SectionName));
>
> DictScope D(W, "Symbol");
>
> Modified: llvm/trunk/tools/llvm-readobj/Win64EHDumper.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/Win64EHDumper.cpp?rev=242656&r1=242655&r2=242656&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-readobj/Win64EHDumper.cpp (original)
> +++ llvm/trunk/tools/llvm-readobj/Win64EHDumper.cpp Sun Jul 19 22:23:55
> 2015
> @@ -284,11 +284,11 @@ void Dumper::printRuntimeFunction(const
>
> const coff_section *XData;
> uint64_t Offset;
> - if (error(resolveRelocation(Ctx, Section, SectionOffset + 8, XData,
> Offset)))
> - return;
> + resolveRelocation(Ctx, Section, SectionOffset + 8, XData, Offset);
>
> ArrayRef<uint8_t> Contents;
> - if (error(Ctx.COFF.getSectionContents(XData, Contents)) ||
> Contents.empty())
> + error(Ctx.COFF.getSectionContents(XData, Contents));
> + if (Contents.empty())
> return;
>
> Offset = Offset + RF.UnwindInfoOffset;
> @@ -302,15 +302,15 @@ void Dumper::printRuntimeFunction(const
> void Dumper::printData(const Context &Ctx) {
> for (const auto &Section : Ctx.COFF.sections()) {
> StringRef Name;
> - if (error(Section.getName(Name)))
> - continue;
> + Section.getName(Name);
>
> if (Name != ".pdata" && !Name.startswith(".pdata$"))
> continue;
>
> const coff_section *PData = Ctx.COFF.getCOFFSection(Section);
> ArrayRef<uint8_t> Contents;
> - if (error(Ctx.COFF.getSectionContents(PData, Contents)) ||
> Contents.empty())
> + error(Ctx.COFF.getSectionContents(PData, Contents));
> + if (Contents.empty())
> continue;
>
> const RuntimeFunction *Entries =
>
> Modified: llvm/trunk/tools/llvm-readobj/llvm-readobj.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/llvm-readobj.cpp?rev=242656&r1=242655&r2=242656&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-readobj/llvm-readobj.cpp (original)
> +++ llvm/trunk/tools/llvm-readobj/llvm-readobj.cpp Sun Jul 19 22:23:55 2015
> @@ -188,22 +188,19 @@ namespace opts {
>
> } // namespace opts
>
> -static int ReturnValue = EXIT_SUCCESS;
> -
> static void reportError(Twine Msg) {
> - ReturnValue = EXIT_FAILURE;
> outs() << Msg << "\n";
> outs().flush();
> + exit(1);
> }
>
> namespace llvm {
>
> -bool error(std::error_code EC) {
> +void error(std::error_code EC) {
> if (!EC)
> - return false;
> + return;
>
> reportError(Twine("\nError reading file: ") + EC.message() + ".");
> - return true;
> }
>
> bool relocAddressLess(RelocationRef a, RelocationRef b) {
> @@ -408,5 +405,5 @@ int main(int argc, const char *argv[]) {
> std::for_each(opts::InputFilenames.begin(), opts::InputFilenames.end(),
> dumpInput);
>
> - return ReturnValue;
> + return 0;
> }
>
> Modified: llvm/trunk/tools/llvm-readobj/llvm-readobj.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/llvm-readobj.h?rev=242656&r1=242655&r2=242656&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-readobj/llvm-readobj.h (original)
> +++ llvm/trunk/tools/llvm-readobj/llvm-readobj.h Sun Jul 19 22:23:55 2015
> @@ -19,7 +19,7 @@ namespace llvm {
> }
>
> // Various helper functions.
> - bool error(std::error_code ec);
> + void error(std::error_code ec);
> bool relocAddressLess(object::RelocationRef A,
> object::RelocationRef B);
> } // namespace llvm
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu <javascript:;>
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
--
F
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150719/fc0c7ff2/attachment.html>
More information about the llvm-commits
mailing list