- //===-- LVReaderHandler.h ---------------------------------------*- C++ -*-===// 
- // 
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 
- // See https://llvm.org/LICENSE.txt for license information. 
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 
- // 
- //===----------------------------------------------------------------------===// 
- // 
- // This class implements the Reader handler. 
- // 
- //===----------------------------------------------------------------------===// 
-   
- #ifndef LLVM_DEBUGINFO_LOGICALVIEW_READERS_LVREADERHANDLER_H 
- #define LLVM_DEBUGINFO_LOGICALVIEW_READERS_LVREADERHANDLER_H 
-   
- #include "llvm/ADT/PointerUnion.h" 
- #include "llvm/DebugInfo/LogicalView/Core/LVReader.h" 
- #include "llvm/DebugInfo/PDB/Native/PDBFile.h" 
- #include "llvm/Object/Archive.h" 
- #include "llvm/Object/MachOUniversal.h" 
- #include "llvm/Object/ObjectFile.h" 
- #include "llvm/Support/MemoryBuffer.h" 
- #include "llvm/Support/ScopedPrinter.h" 
- #include <string> 
- #include <vector> 
-   
- namespace llvm { 
- namespace logicalview { 
-   
- using LVReaders = std::vector<LVReader *>; 
- using ArgVector = std::vector<std::string>; 
- using PdbOrObj = PointerUnion<object::ObjectFile *, pdb::PDBFile *>; 
-   
- // This class performs the following tasks: 
- // - Creates a logical reader for every binary file in the command line, 
- //   that parses the debug information and creates a high level logical 
- //   view representation containing scopes, symbols, types and lines. 
- // - Prints and compares the logical views. 
- // 
- // The supported binary formats are: ELF, Mach-O and CodeView. 
- class LVReaderHandler { 
-   ArgVector &Objects; 
-   ScopedPrinter &W; 
-   raw_ostream &OS; 
-   LVReaders TheReaders; 
-   
-   Error createReaders(); 
-   void destroyReaders(); 
-   Error printReaders(); 
-   Error compareReaders(); 
-   
-   Error handleArchive(LVReaders &Readers, StringRef Filename, 
-                       object::Archive &Arch); 
-   Error handleBuffer(LVReaders &Readers, StringRef Filename, 
-                      MemoryBufferRef Buffer, StringRef ExePath = {}); 
-   Error handleFile(LVReaders &Readers, StringRef Filename, 
-                    StringRef ExePath = {}); 
-   Error handleMach(LVReaders &Readers, StringRef Filename, 
-                    object::MachOUniversalBinary &Mach); 
-   Error handleObject(LVReaders &Readers, StringRef Filename, 
-                      object::Binary &Binary); 
-   
-   Error createReader(StringRef Filename, LVReaders &Readers, PdbOrObj &Input, 
-                      StringRef FileFormatName, StringRef ExePath = {}); 
-   
- public: 
-   LVReaderHandler() = delete; 
-   LVReaderHandler(ArgVector &Objects, ScopedPrinter &W, 
-                   LVOptions &ReaderOptions) 
-       : Objects(Objects), W(W), OS(W.getOStream()) { 
-     setOptions(&ReaderOptions); 
-   } 
-   LVReaderHandler(const LVReaderHandler &) = delete; 
-   LVReaderHandler &operator=(const LVReaderHandler &) = delete; 
-   ~LVReaderHandler() { destroyReaders(); } 
-   
-   Error createReader(StringRef Filename, LVReaders &Readers) { 
-     return handleFile(Readers, Filename); 
-   } 
-   Error process(); 
-   
-   Expected<LVReader *> createReader(StringRef Pathname) { 
-     LVReaders Readers; 
-     if (Error Err = createReader(Pathname, Readers)) 
-       return std::move(Err); 
-     return Readers[0]; 
-   } 
-   void deleteReader(LVReader *Reader) { delete Reader; } 
-   
-   void print(raw_ostream &OS) const; 
-   
- #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) 
-   void dump() const { print(dbgs()); } 
- #endif 
- }; 
-   
- } // end namespace logicalview 
- } // namespace llvm 
-   
- #endif // LLVM_DEBUGINFO_LOGICALVIEW_READERS_LVREADERHANDLER_H 
-