From: George Rimar Date: Wed, 28 Jun 2017 07:06:17 +0000 (+0000) Subject: Revert r306512 "[ELF] - Add ability for DWARFContextInMemory to exit early when any... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=61e059d1711dccc3dfedf005471a653743f13c34;p=llvm Revert r306512 "[ELF] - Add ability for DWARFContextInMemory to exit early when any error happen." It broke BB: [13/106] 13 0.022 Generating VCSRevision.h [25/106] 24 1.209 Building CXX object unittests/DebugInfo/DWARF/CMakeFiles/DebugInfoDWARFTests.dir/DWARFDebugInfoTest.cpp.o FAILED: unittests/DebugInfo/DWARF/CMakeFiles/DebugInfoDWARFTests.dir/DWARFDebugInfoTest.cpp.o /home/bb/bin/g++ -DGTEST_HAS_RTTI=0 -DLLVM_BUILD_GLOBAL_ISEL -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -Iunittests/DebugInfo/DWARF -I../llvm-project/llvm/unittests/DebugInfo/DWARF -Iinclude -I../llvm-project/llvm/include -I../llvm-project/llvm/utils/unittest/googletest/include -I../llvm-project/llvm/utils/unittest/googlemock/include -fPIC -fvisibility-inlines-hidden -m32 -std=c++11 -Wall -W -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wno-maybe-uninitialized -Wdelete-non-virtual-dtor -Wno-comment -ffunction-sections -fdata-sections -O3 -UNDEBUG -Wno-variadic-macros -fno-exceptions -fno-rtti -MD -MT unittests/DebugInfo/DWARF/CMakeFiles/DebugInfoDWARFTests.dir/DWARFDebugInfoTest.cpp.o -MF unittests/DebugInfo/DWARF/CMakeFiles/DebugInfoDWARFTests.dir/DWARFDebugInfoTest.cpp.o.d -o unittests/DebugInfo/DWARF/CMakeFiles/DebugInfoDWARFTests.dir/DWARFDebugInfoTest.cpp.o -c ../llvm-project/llvm/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp ../llvm-project/llvm/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp:18:37: fatal error: llvm/Codegen/AsmPrinter.h: No such file or directory #include "llvm/Codegen/AsmPrinter.h" ^ compilation terminated. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@306513 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/DebugInfo/DWARF/DWARFContext.h b/include/llvm/DebugInfo/DWARF/DWARFContext.h index 8850104db29..4bf34d52bcb 100644 --- a/include/llvm/DebugInfo/DWARF/DWARFContext.h +++ b/include/llvm/DebugInfo/DWARF/DWARFContext.h @@ -289,11 +289,6 @@ private: DWARFCompileUnit *getCompileUnitForAddress(uint64_t Address); }; -/// Used as a return value for a error callback passed to DWARF context. -/// Callback should return Halt if client application wants to stop -/// object parsing, or should return Continue otherwise. -enum class ErrorPolicy { Halt, Continue }; - /// DWARFContextInMemory is the simplest possible implementation of a /// DWARFContext. It assumes all content is available in memory and stores /// pointers to it. @@ -351,14 +346,9 @@ class DWARFContextInMemory : public DWARFContext { Error maybeDecompress(const object::SectionRef &Sec, StringRef Name, StringRef &Data); - /// Function used to handle default error reporting policy. Prints a error - /// message and returns Continue, so DWARF context ignores the error. - static ErrorPolicy defaultErrorHandler(Error E); - public: - DWARFContextInMemory( - const object::ObjectFile &Obj, const LoadedObjectInfo *L = nullptr, - function_ref HandleError = defaultErrorHandler); + DWARFContextInMemory(const object::ObjectFile &Obj, + const LoadedObjectInfo *L = nullptr); DWARFContextInMemory(const StringMap> &Sections, uint8_t AddrSize, diff --git a/lib/DebugInfo/DWARF/DWARFContext.cpp b/lib/DebugInfo/DWARF/DWARFContext.cpp index fdd191e0cbf..38147946175 100644 --- a/lib/DebugInfo/DWARF/DWARFContext.cpp +++ b/lib/DebugInfo/DWARF/DWARFContext.cpp @@ -870,13 +870,13 @@ static Expected getSymbolInfo(const object::ObjectFile &Obj, Expected SymAddrOrErr = Sym->getAddress(); if (!SymAddrOrErr) - return createError("failed to compute symbol address: ", + return createError("error: failed to compute symbol address: ", SymAddrOrErr.takeError()); // Also remember what section this symbol is in for later auto SectOrErr = Sym->getSection(); if (!SectOrErr) - return createError("failed to get symbol section: ", + return createError("error: failed to get symbol section: ", SectOrErr.takeError()); RSec = *SectOrErr; @@ -937,14 +937,8 @@ Error DWARFContextInMemory::maybeDecompress(const SectionRef &Sec, return Error::success(); } -ErrorPolicy DWARFContextInMemory::defaultErrorHandler(Error E) { - errs() << "error: " + toString(std::move(E)) << '\n'; - return ErrorPolicy::Continue; -} - -DWARFContextInMemory::DWARFContextInMemory( - const object::ObjectFile &Obj, const LoadedObjectInfo *L, - function_ref HandleError) +DWARFContextInMemory::DWARFContextInMemory(const object::ObjectFile &Obj, + const LoadedObjectInfo *L) : FileName(Obj.getFileName()), IsLittleEndian(Obj.isLittleEndian()), AddressSize(Obj.getBytesInAddress()) { for (const SectionRef &Section : Obj.sections()) { @@ -967,10 +961,9 @@ DWARFContextInMemory::DWARFContextInMemory( Section.getContents(data); if (auto Err = maybeDecompress(Section, name, data)) { - ErrorPolicy EP = HandleError( - createError("failed to decompress '" + name + "', ", std::move(Err))); - if (EP == ErrorPolicy::Halt) - return; + errs() << "error: failed to decompress '" + name + "', " + + toString(std::move(Err)) + << '\n'; continue; } @@ -1062,8 +1055,7 @@ DWARFContextInMemory::DWARFContextInMemory( Expected SymInfoOrErr = getSymbolInfo(Obj, Reloc, L, AddrCache); if (!SymInfoOrErr) { - if (HandleError(SymInfoOrErr.takeError()) == ErrorPolicy::Halt) - return; + errs() << toString(SymInfoOrErr.takeError()) << '\n'; continue; } @@ -1072,11 +1064,7 @@ DWARFContextInMemory::DWARFContextInMemory( if (V.error()) { SmallString<32> Name; Reloc.getTypeName(Name); - ErrorPolicy EP = HandleError( - createError("failed to compute relocation: " + name + ", ", - errorCodeToError(object_error::parse_failed))); - if (EP == ErrorPolicy::Halt) - return; + errs() << "error: failed to compute relocation: " << Name << "\n"; continue; } RelocAddrEntry Rel = {SymInfoOrErr->SectionIndex, Val}; diff --git a/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp b/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp index 03a5b8ba09e..bf004d6ffc2 100644 --- a/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp +++ b/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp @@ -15,14 +15,10 @@ #include "llvm/ADT/Triple.h" #include "llvm/BinaryFormat/Dwarf.h" #include "llvm/Config/llvm-config.h" -#include "llvm/Codegen/AsmPrinter.h" #include "llvm/DebugInfo/DWARF/DWARFCompileUnit.h" #include "llvm/DebugInfo/DWARF/DWARFContext.h" #include "llvm/DebugInfo/DWARF/DWARFDie.h" #include "llvm/DebugInfo/DWARF/DWARFFormValue.h" -#include "llvm/MC/MCContext.h" -#include "llvm/MC/MCSectionELF.h" -#include "llvm/MC/MCStreamer.h" #include "llvm/Object/ObjectFile.h" #include "llvm/ObjectYAML/DWARFEmitter.h" #include "llvm/ObjectYAML/DWARFYAML.h" @@ -2150,47 +2146,4 @@ TEST(DWARFDebugInfo, TestDwarfVerifyCUDontShareLineTable) { "offset:"); } -TEST(DWARFDebugInfo, TestErrorReportingPolicy) { - initLLVMIfNeeded(); - auto ExpectedDG = dwarfgen::Generator::create(Triple("x86_64-pc-linux"), - 4 /*DwarfVersion*/); - if (HandleExpectedError(ExpectedDG)) - return; - dwarfgen::Generator *DG = ExpectedDG.get().get(); - AsmPrinter *AP = DG->getAsmPrinter(); - MCContext *MC = DG->getMCContext(); - - // Emit two compressed sections with broken headers. - AP->OutStreamer->SwitchSection( - MC->getELFSection(".zdebug_foo", 0 /*Type*/, 0 /*Flags*/)); - AP->OutStreamer->EmitBytes("0"); - AP->OutStreamer->SwitchSection( - MC->getELFSection(".zdebug_bar", 0 /*Type*/, 0 /*Flags*/)); - AP->OutStreamer->EmitBytes("0"); - - MemoryBufferRef FileBuffer(DG->generate(), "dwarf"); - auto Obj = object::ObjectFile::createObjectFile(FileBuffer); - EXPECT_TRUE((bool)Obj); - - // Case 1: error handler handles all errors. That allows - // DWARFContextInMemory - // to parse whole file and find both two errors we know about. - int Errors = 0; - DWARFContextInMemory Ctx1(*Obj.get(), nullptr, [&](Error E) { - ++Errors; - consumeError(std::move(E)); - return ErrorPolicy::Continue; - }); - EXPECT_TRUE(Errors == 2); - - // Case 2: error handler stops parsing of object after first error. - Errors = 0; - DWARFContextInMemory Ctx2(*Obj.get(), nullptr, [&](Error E) { - ++Errors; - consumeError(std::move(E)); - return ErrorPolicy::Halt; - }); - EXPECT_TRUE(Errors == 1); -} - } // end anonymous namespace diff --git a/unittests/DebugInfo/DWARF/DwarfGenerator.h b/unittests/DebugInfo/DWARF/DwarfGenerator.h index dd7e8709638..76665e5193e 100644 --- a/unittests/DebugInfo/DWARF/DwarfGenerator.h +++ b/unittests/DebugInfo/DWARF/DwarfGenerator.h @@ -215,7 +215,6 @@ public: BumpPtrAllocator &getAllocator() { return Allocator; } AsmPrinter *getAsmPrinter() const { return Asm.get(); } - MCContext *getMCContext() const { return MC.get(); } DIEAbbrevSet &getAbbrevSet() { return Abbreviations; } DwarfStringPool &getStringPool() { return *StringPool; }