File indexing completed on 2026-05-10 08:43:43
0001
0002
0003
0004
0005
0006
0007
0008
0009
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
0035
0036
0037
0038
0039
0040
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 }
0097 }
0098
0099 #endif