[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