diff options
| -rw-r--r-- | llvm/include/llvm/DebugInfo/GSYM/DwarfTransformer.h | 22 | ||||
| -rw-r--r-- | llvm/include/llvm/DebugInfo/GSYM/ObjectFileTransformer.h | 6 | ||||
| -rw-r--r-- | llvm/lib/DebugInfo/GSYM/DwarfTransformer.cpp | 91 | ||||
| -rw-r--r-- | llvm/lib/DebugInfo/GSYM/ObjectFileTransformer.cpp | 12 | ||||
| -rw-r--r-- | llvm/tools/llvm-gsymutil/llvm-gsymutil.cpp | 8 | ||||
| -rw-r--r-- | llvm/unittests/DebugInfo/GSYM/GSYMTest.cpp | 44 |
6 files changed, 99 insertions, 84 deletions
diff --git a/llvm/include/llvm/DebugInfo/GSYM/DwarfTransformer.h b/llvm/include/llvm/DebugInfo/GSYM/DwarfTransformer.h index b8d7199..fd2433a 100644 --- a/llvm/include/llvm/DebugInfo/GSYM/DwarfTransformer.h +++ b/llvm/include/llvm/DebugInfo/GSYM/DwarfTransformer.h @@ -36,23 +36,25 @@ public: /// /// \param D The DWARF to use when converting to GSYM. /// - /// \param OS The stream to log warnings and non fatal issues to. - /// /// \param G The GSYM creator to populate with the function information /// from the debug info. - DwarfTransformer(DWARFContext &D, raw_ostream &OS, GsymCreator &G) : - DICtx(D), Log(OS), Gsym(G) {} + DwarfTransformer(DWARFContext &D, GsymCreator &G) : DICtx(D), Gsym(G) {} /// Extract the DWARF from the supplied object file and convert it into the /// Gsym format in the GsymCreator object that is passed in. Returns an /// error if something fatal is encountered. /// + /// \param NumThreads The number of threads that the conversion process can + /// use. + /// + /// \param OS The stream to log warnings and non fatal issues to. If NULL + /// then don't log. + /// /// \returns An error indicating any fatal issues that happen when parsing /// the DWARF, or Error::success() if all goes well. - llvm::Error convert(uint32_t NumThreads); - - llvm::Error verify(StringRef GsymPath); + llvm::Error convert(uint32_t NumThreads, raw_ostream *OS); + llvm::Error verify(StringRef GsymPath, raw_ostream &OS); private: @@ -69,17 +71,17 @@ private: /// \param Strm The thread specific log stream for any non fatal errors and /// warnings. Once a thread has finished parsing an entire compile unit, all /// information in this temporary stream will be forwarded to the member - /// variable log. This keeps logging thread safe. + /// variable log. This keeps logging thread safe. If the value is NULL, then + /// don't log. /// /// \param CUI The compile unit specific information that contains the DWARF /// line table, cached file list, and other compile unit specific /// information. /// /// \param Die The DWARF debug info entry to parse. - void handleDie(raw_ostream &Strm, CUInfo &CUI, DWARFDie Die); + void handleDie(raw_ostream *Strm, CUInfo &CUI, DWARFDie Die); DWARFContext &DICtx; - raw_ostream &Log; GsymCreator &Gsym; friend class DwarfTransformerTest; diff --git a/llvm/include/llvm/DebugInfo/GSYM/ObjectFileTransformer.h b/llvm/include/llvm/DebugInfo/GSYM/ObjectFileTransformer.h index dcbda39..2018e09 100644 --- a/llvm/include/llvm/DebugInfo/GSYM/ObjectFileTransformer.h +++ b/llvm/include/llvm/DebugInfo/GSYM/ObjectFileTransformer.h @@ -32,15 +32,15 @@ public: /// /// \param Obj The object file that contains the DWARF debug info. /// - /// \param Log The stream to log warnings and non fatal issues to. + /// \param Log The stream to log warnings and non fatal issues to. If NULL, + /// don't log. /// /// \param Gsym The GSYM creator to populate with the function information /// from the debug info. /// /// \returns An error indicating any fatal issues that happen when parsing /// the DWARF, or Error::success() if all goes well. - static llvm::Error convert(const object::ObjectFile &Obj, - raw_ostream &Log, + static llvm::Error convert(const object::ObjectFile &Obj, raw_ostream *Log, GsymCreator &Gsym); }; diff --git a/llvm/lib/DebugInfo/GSYM/DwarfTransformer.cpp b/llvm/lib/DebugInfo/GSYM/DwarfTransformer.cpp index a3f1a37..c9f9f6c 100644 --- a/llvm/lib/DebugInfo/GSYM/DwarfTransformer.cpp +++ b/llvm/lib/DebugInfo/GSYM/DwarfTransformer.cpp @@ -205,7 +205,7 @@ static bool hasInlineInfo(DWARFDie Die, uint32_t Depth) { return false; } -static void parseInlineInfo(GsymCreator &Gsym, raw_ostream &Log, CUInfo &CUI, +static void parseInlineInfo(GsymCreator &Gsym, raw_ostream *Log, CUInfo &CUI, DWARFDie Die, uint32_t Depth, FunctionInfo &FI, InlineInfo &parent) { if (!hasInlineInfo(Die, Depth)) @@ -223,11 +223,11 @@ static void parseInlineInfo(GsymCreator &Gsym, raw_ostream &Log, CUInfo &CUI, AddressRange InlineRange(Range.LowPC, Range.HighPC); if (parent.Ranges.contains(InlineRange)) { II.Ranges.insert(InlineRange); - } else { - Log << "error: inlined function DIE at " << HEX32(Die.getOffset()) - << " has a range [" << HEX64(Range.LowPC) << " - " - << HEX64(Range.HighPC) << ") that isn't contained in any parent " - << "address ranges, this inline range will be removed.\n"; + } else if (Log) { + *Log << "error: inlined function DIE at " << HEX32(Die.getOffset()) + << " has a range [" << HEX64(Range.LowPC) << " - " + << HEX64(Range.HighPC) << ") that isn't contained in any parent " + << "address ranges, this inline range will be removed.\n"; } } } @@ -252,7 +252,7 @@ static void parseInlineInfo(GsymCreator &Gsym, raw_ostream &Log, CUInfo &CUI, } } -static void convertFunctionLineTable(raw_ostream &Log, CUInfo &CUI, +static void convertFunctionLineTable(raw_ostream *Log, CUInfo &CUI, DWARFDie Die, GsymCreator &Gsym, FunctionInfo &FI) { std::vector<uint32_t> RowVector; @@ -294,10 +294,12 @@ static void convertFunctionLineTable(raw_ostream &Log, CUInfo &CUI, // an error, but not worth stopping the creation of the GSYM. if (!FI.Range.contains(RowAddress)) { if (RowAddress < FI.Range.start()) { - Log << "error: DIE has a start address whose LowPC is between the " - "line table Row[" << RowIndex << "] with address " - << HEX64(RowAddress) << " and the next one.\n"; - Die.dump(Log, 0, DIDumpOptions::getForSingleDIE()); + if (Log) { + *Log << "error: DIE has a start address whose LowPC is between the " + "line table Row[" << RowIndex << "] with address " + << HEX64(RowAddress) << " and the next one.\n"; + Die.dump(*Log, 0, DIDumpOptions::getForSingleDIE()); + } RowAddress = FI.Range.start(); } else { continue; @@ -314,18 +316,18 @@ static void convertFunctionLineTable(raw_ostream &Log, CUInfo &CUI, // so break out after printing a warning. auto FirstLE = FI.OptLineTable->first(); if (FirstLE && *FirstLE == LE) { - if (!Gsym.isQuiet()) { - Log << "warning: duplicate line table detected for DIE:\n"; - Die.dump(Log, 0, DIDumpOptions::getForSingleDIE()); + if (Log && !Gsym.isQuiet()) { + *Log << "warning: duplicate line table detected for DIE:\n"; + Die.dump(*Log, 0, DIDumpOptions::getForSingleDIE()); } } else { - // Print out (ignore if os == nulls as this is expensive) - Log << "error: line table has addresses that do not " - << "monotonically increase:\n"; - for (uint32_t RowIndex2 : RowVector) { - CUI.LineTable->Rows[RowIndex2].dump(Log); + if (Log) { + *Log << "error: line table has addresses that do not " + << "monotonically increase:\n"; + for (uint32_t RowIndex2 : RowVector) + CUI.LineTable->Rows[RowIndex2].dump(*Log); + Die.dump(*Log, 0, DIDumpOptions::getForSingleDIE()); } - Die.dump(Log, 0, DIDumpOptions::getForSingleDIE()); } break; } @@ -354,7 +356,7 @@ static void convertFunctionLineTable(raw_ostream &Log, CUInfo &CUI, FI.OptLineTable = std::nullopt; } -void DwarfTransformer::handleDie(raw_ostream &OS, CUInfo &CUI, DWARFDie Die) { +void DwarfTransformer::handleDie(raw_ostream *OS, CUInfo &CUI, DWARFDie Die) { switch (Die.getTag()) { case dwarf::DW_TAG_subprogram: { Expected<DWARFAddressRangesVector> RangesOrError = Die.getAddressRanges(); @@ -367,9 +369,11 @@ void DwarfTransformer::handleDie(raw_ostream &OS, CUInfo &CUI, DWARFDie Die) { break; auto NameIndex = getQualifiedNameIndex(Die, CUI.Language, Gsym); if (!NameIndex) { - OS << "error: function at " << HEX64(Die.getOffset()) - << " has no name\n "; - Die.dump(OS, 0, DIDumpOptions::getForSingleDIE()); + if (OS) { + *OS << "error: function at " << HEX64(Die.getOffset()) + << " has no name\n "; + Die.dump(*OS, 0, DIDumpOptions::getForSingleDIE()); + } break; } @@ -398,11 +402,13 @@ void DwarfTransformer::handleDie(raw_ostream &OS, CUInfo &CUI, DWARFDie Die) { if (Range.LowPC != 0) { if (!Gsym.isQuiet()) { // Unexpected invalid address, emit a warning - OS << "warning: DIE has an address range whose start address is " - "not in any executable sections (" - << *Gsym.GetValidTextRanges() - << ") and will not be processed:\n"; - Die.dump(OS, 0, DIDumpOptions::getForSingleDIE()); + if (OS) { + *OS << "warning: DIE has an address range whose start address " + "is not in any executable sections (" + << *Gsym.GetValidTextRanges() + << ") and will not be processed:\n"; + Die.dump(*OS, 0, DIDumpOptions::getForSingleDIE()); + } } } break; @@ -429,10 +435,10 @@ void DwarfTransformer::handleDie(raw_ostream &OS, CUInfo &CUI, DWARFDie Die) { // information object, we will know if we got anything valid from the // debug info. if (FI.Inline->Children.empty()) { - if (!Gsym.isQuiet()) { - OS << "warning: DIE contains inline function information that has " + if (OS && !Gsym.isQuiet()) { + *OS << "warning: DIE contains inline function information that has " "no valid ranges, removing inline information:\n"; - Die.dump(OS, 0, DIDumpOptions::getForSingleDIE()); + Die.dump(*OS, 0, DIDumpOptions::getForSingleDIE()); } FI.Inline = std::nullopt; } @@ -447,18 +453,18 @@ void DwarfTransformer::handleDie(raw_ostream &OS, CUInfo &CUI, DWARFDie Die) { handleDie(OS, CUI, ChildDie); } -Error DwarfTransformer::convert(uint32_t NumThreads) { +Error DwarfTransformer::convert(uint32_t NumThreads, raw_ostream *OS) { size_t NumBefore = Gsym.getNumFunctionInfos(); auto getDie = [&](DWARFUnit &DwarfUnit) -> DWARFDie { DWARFDie ReturnDie = DwarfUnit.getUnitDIE(false); if (std::optional<uint64_t> DWOId = DwarfUnit.getDWOId()) { DWARFUnit *DWOCU = DwarfUnit.getNonSkeletonUnitDIE(false).getDwarfUnit(); - if (!DWOCU->isDWOUnit()) { + if (OS && !DWOCU->isDWOUnit()) { std::string DWOName = dwarf::toString( DwarfUnit.getUnitDIE().find( {dwarf::DW_AT_dwo_name, dwarf::DW_AT_GNU_dwo_name}), ""); - Log << "warning: Unable to retrieve DWO .debug_info section for " + *OS << "warning: Unable to retrieve DWO .debug_info section for " << DWOName << "\n"; } else { ReturnDie = DWOCU->getUnitDIE(false); @@ -472,7 +478,7 @@ Error DwarfTransformer::convert(uint32_t NumThreads) { for (const auto &CU : DICtx.compile_units()) { DWARFDie Die = getDie(*CU); CUInfo CUI(DICtx, dyn_cast<DWARFCompileUnit>(CU.get())); - handleDie(Log, CUI, Die); + handleDie(OS, CUI, Die); } } else { // LLVM Dwarf parser is not thread-safe and we need to parse all DWARF up @@ -498,15 +504,15 @@ Error DwarfTransformer::convert(uint32_t NumThreads) { DWARFDie Die = getDie(*CU); if (Die) { CUInfo CUI(DICtx, dyn_cast<DWARFCompileUnit>(CU.get())); - pool.async([this, CUI, &LogMutex, Die]() mutable { + pool.async([this, CUI, &LogMutex, OS, Die]() mutable { std::string ThreadLogStorage; raw_string_ostream ThreadOS(ThreadLogStorage); - handleDie(ThreadOS, CUI, Die); + handleDie(OS ? &ThreadOS: nullptr, CUI, Die); ThreadOS.flush(); - if (!ThreadLogStorage.empty()) { + if (OS && !ThreadLogStorage.empty()) { // Print ThreadLogStorage lines into an actual stream under a lock std::lock_guard<std::mutex> guard(LogMutex); - Log << ThreadLogStorage; + *OS << ThreadLogStorage; } }); } @@ -514,11 +520,12 @@ Error DwarfTransformer::convert(uint32_t NumThreads) { pool.wait(); } size_t FunctionsAddedCount = Gsym.getNumFunctionInfos() - NumBefore; - Log << "Loaded " << FunctionsAddedCount << " functions from DWARF.\n"; + if (OS) + *OS << "Loaded " << FunctionsAddedCount << " functions from DWARF.\n"; return Error::success(); } -llvm::Error DwarfTransformer::verify(StringRef GsymPath) { +llvm::Error DwarfTransformer::verify(StringRef GsymPath, raw_ostream &Log) { Log << "Verifying GSYM file \"" << GsymPath << "\":\n"; auto Gsym = GsymReader::openFile(GsymPath); diff --git a/llvm/lib/DebugInfo/GSYM/ObjectFileTransformer.cpp b/llvm/lib/DebugInfo/GSYM/ObjectFileTransformer.cpp index a66889a..a60b2d3 100644 --- a/llvm/lib/DebugInfo/GSYM/ObjectFileTransformer.cpp +++ b/llvm/lib/DebugInfo/GSYM/ObjectFileTransformer.cpp @@ -68,7 +68,7 @@ static std::vector<uint8_t> getUUID(const object::ObjectFile &Obj) { } llvm::Error ObjectFileTransformer::convert(const object::ObjectFile &Obj, - raw_ostream &Log, + raw_ostream *Log, GsymCreator &Gsym) { using namespace llvm::object; @@ -99,7 +99,11 @@ llvm::Error ObjectFileTransformer::convert(const object::ObjectFile &Obj, const uint64_t size = IsELF ? ELFSymbolRef(Sym).getSize() : 0; Expected<StringRef> Name = Sym.getName(); if (!Name) { - logAllUnhandledErrors(Name.takeError(), Log, "ObjectFileTransformer: "); + if (Log) + logAllUnhandledErrors(Name.takeError(), *Log, + "ObjectFileTransformer: "); + else + consumeError(Name.takeError()); continue; } // Remove the leading '_' character in any symbol names if there is one @@ -110,6 +114,8 @@ llvm::Error ObjectFileTransformer::convert(const object::ObjectFile &Obj, FunctionInfo(*AddrOrErr, size, Gsym.insertString(*Name, NoCopy))); } size_t FunctionsAddedCount = Gsym.getNumFunctionInfos() - NumBefore; - Log << "Loaded " << FunctionsAddedCount << " functions from symbol table.\n"; + if (Log) + *Log << "Loaded " << FunctionsAddedCount + << " functions from symbol table.\n"; return Error::success(); } diff --git a/llvm/tools/llvm-gsymutil/llvm-gsymutil.cpp b/llvm/tools/llvm-gsymutil/llvm-gsymutil.cpp index 94b4f2e..a0cac8b 100644 --- a/llvm/tools/llvm-gsymutil/llvm-gsymutil.cpp +++ b/llvm/tools/llvm-gsymutil/llvm-gsymutil.cpp @@ -311,7 +311,7 @@ static llvm::Error handleObjectFile(ObjectFile &Obj, // Quiet is true, or normal output if Quiet is false. This can stop the // errors and warnings from being displayed and producing too much output // when they aren't desired. - auto &LogOS = Quiet ? nulls() : outs(); + raw_ostream *LogOS = Quiet ? nullptr : &outs(); GsymCreator Gsym(Quiet); @@ -344,12 +344,12 @@ static llvm::Error handleObjectFile(ObjectFile &Obj, // Make a DWARF transformer object and populate the ranges of the code // so we don't end up adding invalid functions to GSYM data. - DwarfTransformer DT(*DICtx, LogOS, Gsym); + DwarfTransformer DT(*DICtx, Gsym); if (!TextRanges.empty()) Gsym.SetValidTextRanges(TextRanges); // Convert all DWARF to GSYM. - if (auto Err = DT.convert(ThreadCount)) + if (auto Err = DT.convert(ThreadCount, LogOS)) return Err; // Get the UUID and convert symbol table to GSYM. @@ -375,7 +375,7 @@ static llvm::Error handleObjectFile(ObjectFile &Obj, // Verify the DWARF if requested. This will ensure all the info in the DWARF // can be looked up in the GSYM and that all lookups get matching data. if (Verify) { - if (auto Err = DT.verify(OutFile)) + if (auto Err = DT.verify(OutFile, OS)) return Err; } diff --git a/llvm/unittests/DebugInfo/GSYM/GSYMTest.cpp b/llvm/unittests/DebugInfo/GSYM/GSYMTest.cpp index f3c1b3a..c37d8bbb 100644 --- a/llvm/unittests/DebugInfo/GSYM/GSYMTest.cpp +++ b/llvm/unittests/DebugInfo/GSYM/GSYMTest.cpp @@ -1348,9 +1348,9 @@ TEST(GSYMTest, TestDWARFFunctionWithAddresses) { ASSERT_TRUE(DwarfContext.get() != nullptr); auto &OS = llvm::nulls(); GsymCreator GC; - DwarfTransformer DT(*DwarfContext, OS, GC); + DwarfTransformer DT(*DwarfContext, GC); const uint32_t ThreadCount = 1; - ASSERT_THAT_ERROR(DT.convert(ThreadCount), Succeeded()); + ASSERT_THAT_ERROR(DT.convert(ThreadCount, &OS), Succeeded()); ASSERT_THAT_ERROR(GC.finalize(OS), Succeeded()); SmallString<512> Str; raw_svector_ostream OutStrm(Str); @@ -1425,9 +1425,9 @@ TEST(GSYMTest, TestDWARFFunctionWithAddressAndOffset) { ASSERT_TRUE(DwarfContext.get() != nullptr); auto &OS = llvm::nulls(); GsymCreator GC; - DwarfTransformer DT(*DwarfContext, OS, GC); + DwarfTransformer DT(*DwarfContext, GC); const uint32_t ThreadCount = 1; - ASSERT_THAT_ERROR(DT.convert(ThreadCount), Succeeded()); + ASSERT_THAT_ERROR(DT.convert(ThreadCount, &OS), Succeeded()); ASSERT_THAT_ERROR(GC.finalize(OS), Succeeded()); SmallString<512> Str; raw_svector_ostream OutStrm(Str); @@ -1532,9 +1532,9 @@ TEST(GSYMTest, TestDWARFStructMethodNoMangled) { ASSERT_TRUE(DwarfContext.get() != nullptr); auto &OS = llvm::nulls(); GsymCreator GC; - DwarfTransformer DT(*DwarfContext, OS, GC); + DwarfTransformer DT(*DwarfContext, GC); const uint32_t ThreadCount = 1; - ASSERT_THAT_ERROR(DT.convert(ThreadCount), Succeeded()); + ASSERT_THAT_ERROR(DT.convert(ThreadCount, &OS), Succeeded()); ASSERT_THAT_ERROR(GC.finalize(OS), Succeeded()); SmallString<512> Str; raw_svector_ostream OutStrm(Str); @@ -1632,14 +1632,14 @@ TEST(GSYMTest, TestDWARFTextRanges) { ASSERT_TRUE(DwarfContext.get() != nullptr); auto &OS = llvm::nulls(); GsymCreator GC; - DwarfTransformer DT(*DwarfContext, OS, GC); + DwarfTransformer DT(*DwarfContext, GC); // Only allow addresses between [0x1000 - 0x2000) to be linked into the // GSYM. AddressRanges TextRanges; TextRanges.insert(AddressRange(0x1000, 0x2000)); GC.SetValidTextRanges(TextRanges); const uint32_t ThreadCount = 1; - ASSERT_THAT_ERROR(DT.convert(ThreadCount), Succeeded()); + ASSERT_THAT_ERROR(DT.convert(ThreadCount, &OS), Succeeded()); ASSERT_THAT_ERROR(GC.finalize(OS), Succeeded()); SmallString<512> Str; raw_svector_ostream OutStrm(Str); @@ -1835,9 +1835,9 @@ TEST(GSYMTest, TestDWARFInlineInfo) { ASSERT_TRUE(DwarfContext.get() != nullptr); auto &OS = llvm::nulls(); GsymCreator GC; - DwarfTransformer DT(*DwarfContext, OS, GC); + DwarfTransformer DT(*DwarfContext, GC); const uint32_t ThreadCount = 1; - ASSERT_THAT_ERROR(DT.convert(ThreadCount), Succeeded()); + ASSERT_THAT_ERROR(DT.convert(ThreadCount, &OS), Succeeded()); ASSERT_THAT_ERROR(GC.finalize(OS), Succeeded()); SmallString<512> Str; raw_svector_ostream OutStrm(Str); @@ -2095,9 +2095,9 @@ TEST(GSYMTest, TestDWARFNoLines) { ASSERT_TRUE(DwarfContext.get() != nullptr); auto &OS = llvm::nulls(); GsymCreator GC; - DwarfTransformer DT(*DwarfContext, OS, GC); + DwarfTransformer DT(*DwarfContext, GC); const uint32_t ThreadCount = 1; - ASSERT_THAT_ERROR(DT.convert(ThreadCount), Succeeded()); + ASSERT_THAT_ERROR(DT.convert(ThreadCount, &OS), Succeeded()); ASSERT_THAT_ERROR(GC.finalize(OS), Succeeded()); SmallString<512> Str; raw_svector_ostream OutStrm(Str); @@ -2274,9 +2274,9 @@ TEST(GSYMTest, TestDWARFDeadStripAddr4) { ASSERT_TRUE(DwarfContext.get() != nullptr); auto &OS = llvm::nulls(); GsymCreator GC; - DwarfTransformer DT(*DwarfContext, OS, GC); + DwarfTransformer DT(*DwarfContext, GC); const uint32_t ThreadCount = 1; - ASSERT_THAT_ERROR(DT.convert(ThreadCount), Succeeded()); + ASSERT_THAT_ERROR(DT.convert(ThreadCount, &OS), Succeeded()); ASSERT_THAT_ERROR(GC.finalize(OS), Succeeded()); SmallString<512> Str; raw_svector_ostream OutStrm(Str); @@ -2414,9 +2414,9 @@ TEST(GSYMTest, TestDWARFDeadStripAddr8) { ASSERT_TRUE(DwarfContext.get() != nullptr); auto &OS = llvm::nulls(); GsymCreator GC; - DwarfTransformer DT(*DwarfContext, OS, GC); + DwarfTransformer DT(*DwarfContext, GC); const uint32_t ThreadCount = 1; - ASSERT_THAT_ERROR(DT.convert(ThreadCount), Succeeded()); + ASSERT_THAT_ERROR(DT.convert(ThreadCount, &OS), Succeeded()); ASSERT_THAT_ERROR(GC.finalize(OS), Succeeded()); SmallString<512> Str; raw_svector_ostream OutStrm(Str); @@ -3051,9 +3051,9 @@ TEST(GSYMTest, TestDWARFInlineRangeScopes) { std::string errors; raw_string_ostream OS(errors); GsymCreator GC; - DwarfTransformer DT(*DwarfContext, OS, GC); + DwarfTransformer DT(*DwarfContext, GC); const uint32_t ThreadCount = 1; - ASSERT_THAT_ERROR(DT.convert(ThreadCount), Succeeded()); + ASSERT_THAT_ERROR(DT.convert(ThreadCount, &OS), Succeeded()); ASSERT_THAT_ERROR(GC.finalize(OS), Succeeded()); SmallString<512> Str; raw_svector_ostream OutStrm(Str); @@ -3278,9 +3278,9 @@ TEST(GSYMTest, TestDWARFEmptyInline) { std::string errors; raw_string_ostream OS(errors); GsymCreator GC; - DwarfTransformer DT(*DwarfContext, OS, GC); + DwarfTransformer DT(*DwarfContext, GC); const uint32_t ThreadCount = 1; - ASSERT_THAT_ERROR(DT.convert(ThreadCount), Succeeded()); + ASSERT_THAT_ERROR(DT.convert(ThreadCount, &OS), Succeeded()); ASSERT_THAT_ERROR(GC.finalize(OS), Succeeded()); SmallString<512> Str; raw_svector_ostream OutStrm(Str); @@ -3514,9 +3514,9 @@ TEST(GSYMTest, TestFinalizeForLineTables) { std::string errors; raw_string_ostream OS(errors); GsymCreator GC; - DwarfTransformer DT(*DwarfContext, OS, GC); + DwarfTransformer DT(*DwarfContext, GC); const uint32_t ThreadCount = 1; - ASSERT_THAT_ERROR(DT.convert(ThreadCount), Succeeded()); + ASSERT_THAT_ERROR(DT.convert(ThreadCount, &OS), Succeeded()); ASSERT_THAT_ERROR(GC.finalize(OS), Succeeded()); SmallString<512> Str; raw_svector_ostream OutStrm(Str); |
