static bool verify(llvm::StringRef OutputFile, llvm::StringRef Arch) { if (OutputFile == "-") { llvm::errs() << "warning: verification skipped for " << Arch << "because writing to stdout.\n"; return true; } Expected<OwningBinary<Binary>> BinOrErr = createBinary(OutputFile); if (!BinOrErr) { errs() << OutputFile << ": " << toString(BinOrErr.takeError()); return false; } Binary &Binary = *BinOrErr.get().getBinary(); if (auto *Obj = dyn_cast<MachOObjectFile>(&Binary)) { raw_ostream &os = Verbose ? errs() : nulls(); os << "Verifying DWARF for architecture: " << Arch << "\n"; std::unique_ptr<DWARFContext> DICtx = DWARFContext::create(*Obj); DIDumpOptions DumpOpts; bool success = DICtx->verify(os, DumpOpts.noImplicitRecursion()); if (!success) errs() << "error: verification failed for " << Arch << '\n'; return success; } return false; }
static DIDumpOptions getDumpOpts() { DIDumpOptions DumpOpts; DumpOpts.DumpType = DumpType; DumpOpts.RecurseDepth = RecurseDepth; DumpOpts.ShowAddresses = !Diff; DumpOpts.ShowChildren = ShowChildren; DumpOpts.ShowParents = ShowParents; DumpOpts.ShowForm = ShowForm; DumpOpts.SummarizeTypes = SummarizeTypes; DumpOpts.Verbose = Verbose; // In -verify mode, print DIEs without children in error messages. if (Verify) return DumpOpts.noImplicitRecursion(); return DumpOpts; }