diff options
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/tools/llvm-pdbutil/Diff.cpp | 88 | ||||
-rw-r--r-- | llvm/tools/llvm-pdbutil/DiffPrinter.cpp | 2 |
2 files changed, 50 insertions, 40 deletions
diff --git a/llvm/tools/llvm-pdbutil/Diff.cpp b/llvm/tools/llvm-pdbutil/Diff.cpp index fc374ad3a4c..9e520470790 100644 --- a/llvm/tools/llvm-pdbutil/Diff.cpp +++ b/llvm/tools/llvm-pdbutil/Diff.cpp @@ -348,6 +348,52 @@ getModuleDescriptors(const DbiModuleList &ML) { return List; } +static void diffOneModule( + DiffPrinter &D, const std::pair<uint32_t, DbiModuleDescriptor> Item, + std::vector<std::pair<uint32_t, DbiModuleDescriptor>> &Other, bool Invert) { + D.printFullRow( + truncateQuotedNameFront("Module", Item.second.getModuleName(), 70)); + + auto Iter = llvm::find_if( + Other, [&Item](const std::pair<uint32_t, DbiModuleDescriptor> &Other) { + return Other.second.getModuleName().equals_lower( + Item.second.getModuleName()); + }); + if (Iter == Other.end()) { + // We didn't find this module at all on the other side. Just print one row + // and continue. + D.print<ModiProvider>("- Modi", Item.first, None); + return; + } + + // We did find this module. Go through and compare each field. + const auto *L = &Item; + const auto *R = &*Iter; + if (Invert) + std::swap(L, R); + + D.print<ModiProvider>("- Modi", L->first, R->first); + D.print<StringProvider>("- Obj File Name", + shortFilePath(L->second.getObjFileName(), 28), + shortFilePath(R->second.getObjFileName(), 28)); + D.print<StreamNumberProvider>("- Debug Stream", + L->second.getModuleStreamIndex(), + R->second.getModuleStreamIndex()); + D.print("- C11 Byte Size", L->second.getC11LineInfoByteSize(), + R->second.getC11LineInfoByteSize()); + D.print("- C13 Byte Size", L->second.getC13LineInfoByteSize(), + R->second.getC13LineInfoByteSize()); + D.print("- # of files", L->second.getNumberOfFiles(), + R->second.getNumberOfFiles()); + D.print("- Pdb File Path Index", L->second.getPdbFilePathNameIndex(), + R->second.getPdbFilePathNameIndex()); + D.print("- Source File Name Index", L->second.getSourceFileNameIndex(), + R->second.getSourceFileNameIndex()); + D.print("- Symbol Byte Size", L->second.getSymbolDebugInfoByteSize(), + R->second.getSymbolDebugInfoByteSize()); + Other.erase(Iter); +} + Error DiffStyle::diffDbiStream() { DiffPrinter D(2, "DBI Stream", 40, 30, opts::diff::PrintResultColumn, opts::diff::PrintValueColumns, outs()); @@ -439,45 +485,11 @@ Error DiffStyle::diffDbiStream() { auto MDR = getModuleDescriptors(MR); // Scan all module descriptors from the left, and look for corresponding // module descriptors on the right. - for (const auto &L : MDL) { - D.printFullRow( - truncateQuotedNameFront("Module", L.second.getModuleName(), 70)); + for (const auto &L : MDL) + diffOneModule(D, L, MDR, false); - auto Iter = llvm::find_if( - MDR, [&L](const std::pair<uint32_t, DbiModuleDescriptor> &R) { - return R.second.getModuleName().equals_lower( - L.second.getModuleName()); - }); - if (Iter == MDR.end()) { - // We didn't find this module at all on the right. Just print one row - // and continue. - D.print<ModiProvider>("- Modi", L.first, None); - continue; - } - - // We did find this module. Go through and compare each field. - const auto &R = *Iter; - D.print<ModiProvider>("- Modi", L.first, R.first); - D.print<StringProvider>("- Obj File Name", - shortFilePath(L.second.getObjFileName(), 28), - shortFilePath(R.second.getObjFileName(), 28)); - D.print<StreamNumberProvider>("- Debug Stream", - L.second.getModuleStreamIndex(), - R.second.getModuleStreamIndex()); - D.print("- C11 Byte Size", L.second.getC11LineInfoByteSize(), - R.second.getC11LineInfoByteSize()); - D.print("- C13 Byte Size", L.second.getC13LineInfoByteSize(), - R.second.getC13LineInfoByteSize()); - D.print("- # of files", L.second.getNumberOfFiles(), - R.second.getNumberOfFiles()); - D.print("- Pdb File Path Index", L.second.getPdbFilePathNameIndex(), - R.second.getPdbFilePathNameIndex()); - D.print("- Source File Name Index", L.second.getSourceFileNameIndex(), - R.second.getSourceFileNameIndex()); - D.print("- Symbol Byte Size", L.second.getSymbolDebugInfoByteSize(), - R.second.getSymbolDebugInfoByteSize()); - MDR.erase(Iter); - } + for (const auto &R : MDR) + diffOneModule(D, R, MDL, true); return Error::success(); } diff --git a/llvm/tools/llvm-pdbutil/DiffPrinter.cpp b/llvm/tools/llvm-pdbutil/DiffPrinter.cpp index 8deb69309b0..45641e2e4b0 100644 --- a/llvm/tools/llvm-pdbutil/DiffPrinter.cpp +++ b/llvm/tools/llvm-pdbutil/DiffPrinter.cpp @@ -110,8 +110,6 @@ void DiffPrinter::printResult(DiffResult Result) { case DiffResult::UNSPECIFIED: printValue(" ", Result, AlignStyle::Center, 3, true); break; - default: - llvm_unreachable("unreachable!"); } } |