Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-05-10 08:43:43

0001 //===-- LVReaderHandler.h ---------------------------------------*- C++ -*-===//
0002 //
0003 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
0004 // See https://llvm.org/LICENSE.txt for license information.
0005 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
0006 //
0007 //===----------------------------------------------------------------------===//
0008 //
0009 // This class implements the Reader handler.
0010 //
0011 //===----------------------------------------------------------------------===//
0012 
0013 #ifndef LLVM_DEBUGINFO_LOGICALVIEW_READERS_LVREADERHANDLER_H
0014 #define LLVM_DEBUGINFO_LOGICALVIEW_READERS_LVREADERHANDLER_H
0015 
0016 #include "llvm/ADT/PointerUnion.h"
0017 #include "llvm/DebugInfo/LogicalView/Core/LVReader.h"
0018 #include "llvm/DebugInfo/PDB/Native/PDBFile.h"
0019 #include "llvm/Object/Archive.h"
0020 #include "llvm/Object/MachOUniversal.h"
0021 #include "llvm/Object/ObjectFile.h"
0022 #include "llvm/Support/MemoryBuffer.h"
0023 #include "llvm/Support/ScopedPrinter.h"
0024 #include <string>
0025 #include <vector>
0026 
0027 namespace llvm {
0028 namespace logicalview {
0029 
0030 using LVReaders = std::vector<std::unique_ptr<LVReader>>;
0031 using ArgVector = std::vector<std::string>;
0032 using PdbOrObj = PointerUnion<object::ObjectFile *, pdb::PDBFile *>;
0033 
0034 // This class performs the following tasks:
0035 // - Creates a logical reader for every binary file in the command line,
0036 //   that parses the debug information and creates a high level logical
0037 //   view representation containing scopes, symbols, types and lines.
0038 // - Prints and compares the logical views.
0039 //
0040 // The supported binary formats are: ELF, Mach-O and CodeView.
0041 class LVReaderHandler {
0042   ArgVector &Objects;
0043   ScopedPrinter &W;
0044   raw_ostream &OS;
0045   LVReaders TheReaders;
0046 
0047   Error createReaders();
0048   Error printReaders();
0049   Error compareReaders();
0050 
0051   Error handleArchive(LVReaders &Readers, StringRef Filename,
0052                       object::Archive &Arch);
0053   Error handleBuffer(LVReaders &Readers, StringRef Filename,
0054                      MemoryBufferRef Buffer, StringRef ExePath = {});
0055   Error handleFile(LVReaders &Readers, StringRef Filename,
0056                    StringRef ExePath = {});
0057   Error handleMach(LVReaders &Readers, StringRef Filename,
0058                    object::MachOUniversalBinary &Mach);
0059   Error handleObject(LVReaders &Readers, StringRef Filename,
0060                      object::Binary &Binary);
0061   Error handleObject(LVReaders &Readers, StringRef Filename, StringRef Buffer,
0062                      StringRef ExePath);
0063 
0064   Error createReader(StringRef Filename, LVReaders &Readers, PdbOrObj &Input,
0065                      StringRef FileFormatName, StringRef ExePath = {});
0066 
0067 public:
0068   LVReaderHandler() = delete;
0069   LVReaderHandler(ArgVector &Objects, ScopedPrinter &W,
0070                   LVOptions &ReaderOptions)
0071       : Objects(Objects), W(W), OS(W.getOStream()) {
0072     setOptions(&ReaderOptions);
0073   }
0074   LVReaderHandler(const LVReaderHandler &) = delete;
0075   LVReaderHandler &operator=(const LVReaderHandler &) = delete;
0076 
0077   Error createReader(StringRef Filename, LVReaders &Readers) {
0078     return handleFile(Readers, Filename);
0079   }
0080   Error process();
0081 
0082   Expected<std::unique_ptr<LVReader>> createReader(StringRef Pathname) {
0083     LVReaders Readers;
0084     if (Error Err = createReader(Pathname, Readers))
0085       return std::move(Err);
0086     return std::move(Readers[0]);
0087   }
0088 
0089   void print(raw_ostream &OS) const;
0090 
0091 #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
0092   void dump() const { print(dbgs()); }
0093 #endif
0094 };
0095 
0096 } // end namespace logicalview
0097 } // namespace llvm
0098 
0099 #endif // LLVM_DEBUGINFO_LOGICALVIEW_READERS_LVREADERHANDLER_H