summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/include/llvm/DebugInfo/CodeView/ByteStream.h (renamed from llvm/include/llvm/DebugInfo/PDB/Raw/ByteStream.h)11
-rw-r--r--llvm/include/llvm/DebugInfo/CodeView/CodeViewError.h43
-rw-r--r--llvm/include/llvm/DebugInfo/CodeView/StreamInterface.h (renamed from llvm/include/llvm/DebugInfo/PDB/Raw/StreamInterface.h)12
-rw-r--r--llvm/include/llvm/DebugInfo/CodeView/StreamReader.h (renamed from llvm/include/llvm/DebugInfo/PDB/Raw/StreamReader.h)19
-rw-r--r--llvm/include/llvm/DebugInfo/PDB/Raw/DbiStream.h16
-rw-r--r--llvm/include/llvm/DebugInfo/PDB/Raw/MappedBlockStream.h4
-rw-r--r--llvm/include/llvm/DebugInfo/PDB/Raw/ModStream.h10
-rw-r--r--llvm/include/llvm/DebugInfo/PDB/Raw/NameHashTable.h11
-rw-r--r--llvm/include/llvm/DebugInfo/PDB/Raw/NameMap.h7
-rw-r--r--llvm/include/llvm/DebugInfo/PDB/Raw/PublicsStream.h1
-rw-r--r--llvm/include/llvm/DebugInfo/PDB/Raw/SymbolStream.h4
-rw-r--r--llvm/include/llvm/DebugInfo/PDB/Raw/TpiStream.h10
-rw-r--r--llvm/lib/DebugInfo/CodeView/ByteStream.cpp (renamed from llvm/lib/DebugInfo/PDB/Raw/ByteStream.cpp)12
-rw-r--r--llvm/lib/DebugInfo/CodeView/CMakeLists.txt3
-rw-r--r--llvm/lib/DebugInfo/CodeView/CodeViewError.cpp65
-rw-r--r--llvm/lib/DebugInfo/CodeView/StreamReader.cpp (renamed from llvm/lib/DebugInfo/PDB/Raw/StreamReader.cpp)7
-rw-r--r--llvm/lib/DebugInfo/PDB/CMakeLists.txt2
-rw-r--r--llvm/lib/DebugInfo/PDB/Raw/DbiStream.cpp6
-rw-r--r--llvm/lib/DebugInfo/PDB/Raw/InfoStream.cpp4
-rw-r--r--llvm/lib/DebugInfo/PDB/Raw/ModStream.cpp5
-rw-r--r--llvm/lib/DebugInfo/PDB/Raw/NameHashTable.cpp5
-rw-r--r--llvm/lib/DebugInfo/PDB/Raw/NameMap.cpp4
-rw-r--r--llvm/lib/DebugInfo/PDB/Raw/PublicsStream.cpp4
-rw-r--r--llvm/lib/DebugInfo/PDB/Raw/SymbolStream.cpp5
-rw-r--r--llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp6
-rw-r--r--llvm/tools/llvm-pdbdump/llvm-pdbdump.cpp6
26 files changed, 196 insertions, 86 deletions
diff --git a/llvm/include/llvm/DebugInfo/PDB/Raw/ByteStream.h b/llvm/include/llvm/DebugInfo/CodeView/ByteStream.h
index 843e43c8740..9d683b1cec6 100644
--- a/llvm/include/llvm/DebugInfo/PDB/Raw/ByteStream.h
+++ b/llvm/include/llvm/DebugInfo/CodeView/ByteStream.h
@@ -7,19 +7,18 @@
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_DEBUGINFO_PDB_RAW_BYTESTREAM_H
-#define LLVM_DEBUGINFO_PDB_RAW_BYTESTREAM_H
+#ifndef LLVM_DEBUGINFO_CODEVIEW_BYTESTREAM_H
+#define LLVM_DEBUGINFO_CODEVIEW_BYTESTREAM_H
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/StringRef.h"
-#include "llvm/DebugInfo/PDB/Raw/StreamInterface.h"
+#include "llvm/DebugInfo/CodeView/StreamInterface.h"
#include "llvm/Support/Error.h"
#include <cstdint>
#include <memory>
namespace llvm {
-namespace pdb {
-
+namespace codeview {
class StreamReader;
class ByteStream : public StreamInterface {
@@ -53,4 +52,4 @@ private:
} // end namespace pdb
} // end namespace llvm
-#endif // LLVM_DEBUGINFO_PDB_RAW_BYTESTREAM_H
+#endif // LLVM_DEBUGINFO_CODEVIEW_BYTESTREAM_H
diff --git a/llvm/include/llvm/DebugInfo/CodeView/CodeViewError.h b/llvm/include/llvm/DebugInfo/CodeView/CodeViewError.h
new file mode 100644
index 00000000000..a3d4171f693
--- /dev/null
+++ b/llvm/include/llvm/DebugInfo/CodeView/CodeViewError.h
@@ -0,0 +1,43 @@
+//===- CodeViewError.h - Error extensions for CodeView ----------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_DEBUGINFO_PDB_CODEVIEW_CODEVIEWERROR_H
+#define LLVM_DEBUGINFO_PDB_CODEVIEW_CODEVIEWERROR_H
+
+#include "llvm/Support/Error.h"
+
+#include <string>
+
+namespace llvm {
+namespace codeview {
+enum class cv_error_code {
+ unspecified = 1,
+ insufficient_buffer,
+ corrupt_record,
+};
+
+/// Base class for errors originating when parsing raw PDB files
+class CodeViewError : public ErrorInfo<CodeViewError> {
+public:
+ static char ID;
+ CodeViewError(cv_error_code C);
+ CodeViewError(const std::string &Context);
+ CodeViewError(cv_error_code C, const std::string &Context);
+
+ void log(raw_ostream &OS) const override;
+ const std::string &getErrorMessage() const;
+ std::error_code convertToErrorCode() const override;
+
+private:
+ std::string ErrMsg;
+ cv_error_code Code;
+};
+}
+}
+#endif
diff --git a/llvm/include/llvm/DebugInfo/PDB/Raw/StreamInterface.h b/llvm/include/llvm/DebugInfo/CodeView/StreamInterface.h
index effeaf2605f..92c9041688e 100644
--- a/llvm/include/llvm/DebugInfo/PDB/Raw/StreamInterface.h
+++ b/llvm/include/llvm/DebugInfo/CodeView/StreamInterface.h
@@ -1,4 +1,4 @@
-//===- StreamInterface.h - Base interface for a PDB stream ------*- C++ -*-===//
+//===- StreamInterface.h - Base interface for a stream of data --*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
@@ -7,15 +7,15 @@
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_DEBUGINFO_PDB_RAW_STREAMINTERFACE_H
-#define LLVM_DEBUGINFO_PDB_RAW_STREAMINTERFACE_H
+#ifndef LLVM_DEBUGINFO_CODEVIEW_STREAMINTERFACE_H
+#define LLVM_DEBUGINFO_CODEVIEW_STREAMINTERFACE_H
#include "llvm/ADT/ArrayRef.h"
#include "llvm/Support/Error.h"
#include <cstdint>
namespace llvm {
-namespace pdb {
+namespace codeview {
class StreamInterface {
public:
@@ -29,7 +29,7 @@ public:
virtual uint32_t getLength() const = 0;
};
-} // end namespace pdb
+} // end namespace codeview
} // end namespace llvm
-#endif // LLVM_DEBUGINFO_PDB_RAW_STREAMINTERFACE_H
+#endif // LLVM_DEBUGINFO_CODEVIEW_STREAMINTERFACE_H
diff --git a/llvm/include/llvm/DebugInfo/PDB/Raw/StreamReader.h b/llvm/include/llvm/DebugInfo/CodeView/StreamReader.h
index 1897dfe1474..34ff725235e 100644
--- a/llvm/include/llvm/DebugInfo/PDB/Raw/StreamReader.h
+++ b/llvm/include/llvm/DebugInfo/CodeView/StreamReader.h
@@ -7,19 +7,19 @@
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_DEBUGINFO_PDB_RAW_STREAMREADER_H
-#define LLVM_DEBUGINFO_PDB_RAW_STREAMREADER_H
+#ifndef LLVM_DEBUGINFO_CODEVIEW_STREAMREADER_H
+#define LLVM_DEBUGINFO_CODEVIEW_STREAMREADER_H
#include "llvm/ADT/ArrayRef.h"
-#include "llvm/DebugInfo/PDB/Raw/StreamInterface.h"
+#include "llvm/DebugInfo/CodeView/StreamInterface.h"
#include "llvm/Support/Endian.h"
#include "llvm/Support/Error.h"
#include <string>
namespace llvm {
-namespace pdb {
-class StreamInterface;
+namespace codeview {
+
class StreamReader {
public:
StreamReader(const StreamInterface &S);
@@ -35,7 +35,8 @@ public:
}
template <typename T> Error readArray(MutableArrayRef<T> Array) {
- MutableArrayRef<uint8_t> Casted(reinterpret_cast<uint8_t*>(Array.data()), Array.size() * sizeof(T));
+ MutableArrayRef<uint8_t> Casted(reinterpret_cast<uint8_t *>(Array.data()),
+ Array.size() * sizeof(T));
return readBytes(Casted);
}
@@ -50,7 +51,7 @@ private:
const StreamInterface &Stream;
uint32_t Offset;
};
-}
-}
+} // namespace codeview
+} // namespace llvm
-#endif
+#endif // LLVM_DEBUGINFO_CODEVIEW_STREAMREADER_H
diff --git a/llvm/include/llvm/DebugInfo/PDB/Raw/DbiStream.h b/llvm/include/llvm/DebugInfo/PDB/Raw/DbiStream.h
index 33ac97a6553..91de6e64293 100644
--- a/llvm/include/llvm/DebugInfo/PDB/Raw/DbiStream.h
+++ b/llvm/include/llvm/DebugInfo/PDB/Raw/DbiStream.h
@@ -10,8 +10,8 @@
#ifndef LLVM_DEBUGINFO_PDB_RAW_PDBDBISTREAM_H
#define LLVM_DEBUGINFO_PDB_RAW_PDBDBISTREAM_H
+#include "llvm/DebugInfo/CodeView/ByteStream.h"
#include "llvm/DebugInfo/PDB/PDBTypes.h"
-#include "llvm/DebugInfo/PDB/Raw/ByteStream.h"
#include "llvm/DebugInfo/PDB/Raw/MappedBlockStream.h"
#include "llvm/DebugInfo/PDB/Raw/ModInfo.h"
#include "llvm/DebugInfo/PDB/Raw/NameHashTable.h"
@@ -62,13 +62,13 @@ private:
std::vector<ModuleInfoEx> ModuleInfos;
NameHashTable ECNames;
- ByteStream ModInfoSubstream;
- ByteStream SecContrSubstream;
- ByteStream SecMapSubstream;
- ByteStream FileInfoSubstream;
- ByteStream TypeServerMapSubstream;
- ByteStream ECSubstream;
- ByteStream DbgHeader;
+ codeview::ByteStream ModInfoSubstream;
+ codeview::ByteStream SecContrSubstream;
+ codeview::ByteStream SecMapSubstream;
+ codeview::ByteStream FileInfoSubstream;
+ codeview::ByteStream TypeServerMapSubstream;
+ codeview::ByteStream ECSubstream;
+ codeview::ByteStream DbgHeader;
std::unique_ptr<HeaderInfo> Header;
};
diff --git a/llvm/include/llvm/DebugInfo/PDB/Raw/MappedBlockStream.h b/llvm/include/llvm/DebugInfo/PDB/Raw/MappedBlockStream.h
index 2b475e4bf09..72f8b0c8667 100644
--- a/llvm/include/llvm/DebugInfo/PDB/Raw/MappedBlockStream.h
+++ b/llvm/include/llvm/DebugInfo/PDB/Raw/MappedBlockStream.h
@@ -11,7 +11,7 @@
#define LLVM_DEBUGINFO_PDB_RAW_MAPPEDBLOCKSTREAM_H
#include "llvm/ADT/ArrayRef.h"
-#include "llvm/DebugInfo/PDB/Raw/StreamInterface.h"
+#include "llvm/DebugInfo/CodeView/StreamInterface.h"
#include "llvm/Support/Error.h"
#include <cstdint>
#include <vector>
@@ -21,7 +21,7 @@ namespace pdb {
class PDBFile;
-class MappedBlockStream : public StreamInterface {
+class MappedBlockStream : public codeview::StreamInterface {
public:
MappedBlockStream(uint32_t StreamIdx, const PDBFile &File);
diff --git a/llvm/include/llvm/DebugInfo/PDB/Raw/ModStream.h b/llvm/include/llvm/DebugInfo/PDB/Raw/ModStream.h
index 82042e59f25..3f2b9049b46 100644
--- a/llvm/include/llvm/DebugInfo/PDB/Raw/ModStream.h
+++ b/llvm/include/llvm/DebugInfo/PDB/Raw/ModStream.h
@@ -11,8 +11,8 @@
#define LLVM_DEBUGINFO_PDB_RAW_MODSTREAM_H
#include "llvm/ADT/iterator_range.h"
+#include "llvm/DebugInfo/CodeView/ByteStream.h"
#include "llvm/DebugInfo/CodeView/SymbolRecord.h"
-#include "llvm/DebugInfo/PDB/Raw/ByteStream.h"
#include "llvm/DebugInfo/PDB/Raw/MappedBlockStream.h"
#include "llvm/Support/Error.h"
@@ -35,10 +35,10 @@ private:
MappedBlockStream Stream;
- ByteStream SymbolsSubstream;
- ByteStream LinesSubstream;
- ByteStream C13LinesSubstream;
- ByteStream GlobalRefsSubstream;
+ codeview::ByteStream SymbolsSubstream;
+ codeview::ByteStream LinesSubstream;
+ codeview::ByteStream C13LinesSubstream;
+ codeview::ByteStream GlobalRefsSubstream;
};
}
}
diff --git a/llvm/include/llvm/DebugInfo/PDB/Raw/NameHashTable.h b/llvm/include/llvm/DebugInfo/PDB/Raw/NameHashTable.h
index 62c1e20b8d5..daaa40d4765 100644
--- a/llvm/include/llvm/DebugInfo/PDB/Raw/NameHashTable.h
+++ b/llvm/include/llvm/DebugInfo/PDB/Raw/NameHashTable.h
@@ -12,21 +12,22 @@
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/StringRef.h"
-#include "llvm/DebugInfo/PDB/Raw/ByteStream.h"
+#include "llvm/DebugInfo/CodeView/ByteStream.h"
#include "llvm/Support/Error.h"
#include <cstdint>
#include <vector>
namespace llvm {
-namespace pdb {
-
+namespace codeview {
class StreamReader;
+}
+namespace pdb {
class NameHashTable {
public:
NameHashTable();
- Error load(StreamReader &Stream);
+ Error load(codeview::StreamReader &Stream);
uint32_t getNameCount() const { return NameCount; }
uint32_t getHashVersion() const { return HashVersion; }
@@ -38,7 +39,7 @@ public:
ArrayRef<uint32_t> name_ids() const;
private:
- ByteStream NamesBuffer;
+ codeview::ByteStream NamesBuffer;
std::vector<uint32_t> IDs;
uint32_t Signature;
uint32_t HashVersion;
diff --git a/llvm/include/llvm/DebugInfo/PDB/Raw/NameMap.h b/llvm/include/llvm/DebugInfo/PDB/Raw/NameMap.h
index b832976d08a..e124eef2d75 100644
--- a/llvm/include/llvm/DebugInfo/PDB/Raw/NameMap.h
+++ b/llvm/include/llvm/DebugInfo/PDB/Raw/NameMap.h
@@ -16,15 +16,16 @@
#include <cstdint>
namespace llvm {
-namespace pdb {
-
+namespace codeview {
class StreamReader;
+}
+namespace pdb {
class NameMap {
public:
NameMap();
- Error load(StreamReader &Stream);
+ Error load(codeview::StreamReader &Stream);
bool tryGetValue(StringRef Name, uint32_t &Value) const;
diff --git a/llvm/include/llvm/DebugInfo/PDB/Raw/PublicsStream.h b/llvm/include/llvm/DebugInfo/PDB/Raw/PublicsStream.h
index 088bcb4da31..f1d6be5895c 100644
--- a/llvm/include/llvm/DebugInfo/PDB/Raw/PublicsStream.h
+++ b/llvm/include/llvm/DebugInfo/PDB/Raw/PublicsStream.h
@@ -13,7 +13,6 @@
#include "llvm/DebugInfo/CodeView/SymbolRecord.h"
#include "llvm/DebugInfo/CodeView/TypeStream.h"
#include "llvm/DebugInfo/PDB/PDBTypes.h"
-#include "llvm/DebugInfo/PDB/Raw/ByteStream.h"
#include "llvm/DebugInfo/PDB/Raw/MappedBlockStream.h"
#include "llvm/DebugInfo/PDB/Raw/RawConstants.h"
diff --git a/llvm/include/llvm/DebugInfo/PDB/Raw/SymbolStream.h b/llvm/include/llvm/DebugInfo/PDB/Raw/SymbolStream.h
index 590fed735b3..bb5f418b1d5 100644
--- a/llvm/include/llvm/DebugInfo/PDB/Raw/SymbolStream.h
+++ b/llvm/include/llvm/DebugInfo/PDB/Raw/SymbolStream.h
@@ -10,8 +10,8 @@
#ifndef LLVM_DEBUGINFO_PDB_RAW_PDBSYMBOLSTREAM_H
#define LLVM_DEBUGINFO_PDB_RAW_PDBSYMBOLSTREAM_H
+#include "llvm/DebugInfo/CodeView/ByteStream.h"
#include "llvm/DebugInfo/CodeView/SymbolRecord.h"
-#include "llvm/DebugInfo/PDB/Raw/ByteStream.h"
#include "llvm/DebugInfo/PDB/Raw/MappedBlockStream.h"
#include "llvm/Support/Error.h"
@@ -29,7 +29,7 @@ public:
iterator_range<codeview::SymbolIterator> getSymbols() const;
private:
- ByteStream Stream;
+ codeview::ByteStream Stream;
MappedBlockStream MappedStream;
};
}
diff --git a/llvm/include/llvm/DebugInfo/PDB/Raw/TpiStream.h b/llvm/include/llvm/DebugInfo/PDB/Raw/TpiStream.h
index bca34c48051..91dd891d033 100644
--- a/llvm/include/llvm/DebugInfo/PDB/Raw/TpiStream.h
+++ b/llvm/include/llvm/DebugInfo/PDB/Raw/TpiStream.h
@@ -10,9 +10,9 @@
#ifndef LLVM_DEBUGINFO_PDB_RAW_PDBTPISTREAM_H
#define LLVM_DEBUGINFO_PDB_RAW_PDBTPISTREAM_H
+#include "llvm/DebugInfo/CodeView/ByteStream.h"
#include "llvm/DebugInfo/CodeView/TypeStream.h"
#include "llvm/DebugInfo/PDB/PDBTypes.h"
-#include "llvm/DebugInfo/PDB/Raw/ByteStream.h"
#include "llvm/DebugInfo/PDB/Raw/MappedBlockStream.h"
#include "llvm/DebugInfo/PDB/Raw/RawConstants.h"
@@ -47,10 +47,10 @@ private:
MappedBlockStream Stream;
HashFunctionType HashFunction;
- ByteStream RecordsBuffer;
- ByteStream TypeIndexOffsetBuffer;
- ByteStream HashValuesBuffer;
- ByteStream HashAdjBuffer;
+ codeview::ByteStream RecordsBuffer;
+ codeview::ByteStream TypeIndexOffsetBuffer;
+ codeview::ByteStream HashValuesBuffer;
+ codeview::ByteStream HashAdjBuffer;
std::unique_ptr<HeaderInfo> Header;
};
diff --git a/llvm/lib/DebugInfo/PDB/Raw/ByteStream.cpp b/llvm/lib/DebugInfo/CodeView/ByteStream.cpp
index 09b51d96871..879343afbfd 100644
--- a/llvm/lib/DebugInfo/PDB/Raw/ByteStream.cpp
+++ b/llvm/lib/DebugInfo/CodeView/ByteStream.cpp
@@ -7,13 +7,13 @@
//
//===----------------------------------------------------------------------===//
-#include "llvm/DebugInfo/PDB/Raw/ByteStream.h"
-#include "llvm/DebugInfo/PDB/Raw/RawError.h"
-#include "llvm/DebugInfo/PDB/Raw/StreamReader.h"
+#include "llvm/DebugInfo/CodeView/ByteStream.h"
+#include "llvm/DebugInfo/CodeView/CodeViewError.h"
+#include "llvm/DebugInfo/CodeView/StreamReader.h"
#include <cstring>
using namespace llvm;
-using namespace llvm::pdb;
+using namespace llvm::codeview;
ByteStream::ByteStream() {}
@@ -51,7 +51,7 @@ Error ByteStream::initialize(StreamReader &Reader, uint32_t Length) {
Error ByteStream::readBytes(uint32_t Offset,
MutableArrayRef<uint8_t> Buffer) const {
if (Data.size() < Buffer.size() + Offset)
- return make_error<RawError>(raw_error_code::insufficient_buffer);
+ return make_error<CodeViewError>(cv_error_code::insufficient_buffer);
::memcpy(Buffer.data(), Data.data() + Offset, Buffer.size());
return Error::success();
}
@@ -59,7 +59,7 @@ Error ByteStream::readBytes(uint32_t Offset,
Error ByteStream::getArrayRef(uint32_t Offset, ArrayRef<uint8_t> &Buffer,
uint32_t Length) const {
if (Data.size() < Length + Offset)
- return make_error<RawError>(raw_error_code::insufficient_buffer);
+ return make_error<CodeViewError>(cv_error_code::insufficient_buffer);
Buffer = Data.slice(Offset, Length);
return Error::success();
}
diff --git a/llvm/lib/DebugInfo/CodeView/CMakeLists.txt b/llvm/lib/DebugInfo/CodeView/CMakeLists.txt
index e0c7119dd91..8e7628dcf05 100644
--- a/llvm/lib/DebugInfo/CodeView/CMakeLists.txt
+++ b/llvm/lib/DebugInfo/CodeView/CMakeLists.txt
@@ -1,10 +1,13 @@
add_llvm_library(LLVMDebugInfoCodeView
+ ByteStream.cpp
+ CodeViewError.cpp
FieldListRecordBuilder.cpp
Line.cpp
ListRecordBuilder.cpp
MemoryTypeTableBuilder.cpp
MethodListRecordBuilder.cpp
RecordSerialization.cpp
+ StreamReader.cpp
SymbolDumper.cpp
TypeDumper.cpp
TypeRecord.cpp
diff --git a/llvm/lib/DebugInfo/CodeView/CodeViewError.cpp b/llvm/lib/DebugInfo/CodeView/CodeViewError.cpp
new file mode 100644
index 00000000000..4db6b2941a6
--- /dev/null
+++ b/llvm/lib/DebugInfo/CodeView/CodeViewError.cpp
@@ -0,0 +1,65 @@
+//===- CodeViewError.cpp - Error extensions for CodeView --------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/DebugInfo/CodeView/CodeViewError.h"
+#include "llvm/Support/ErrorHandling.h"
+#include "llvm/Support/ManagedStatic.h"
+
+using namespace llvm;
+using namespace llvm::codeview;
+
+namespace {
+// FIXME: This class is only here to support the transition to llvm::Error. It
+// will be removed once this transition is complete. Clients should prefer to
+// deal with the Error value directly, rather than converting to error_code.
+class CodeViewErrorCategory : public std::error_category {
+public:
+ const char *name() const LLVM_NOEXCEPT override { return "llvm.codeview"; }
+
+ std::string message(int Condition) const override {
+ switch (static_cast<cv_error_code>(Condition)) {
+ case cv_error_code::unspecified:
+ return "An unknown error has occurred.";
+ case cv_error_code::insufficient_buffer:
+ return "The buffer is not large enough to read the requested number of "
+ "bytes.";
+ case cv_error_code::corrupt_record:
+ return "The CodeView record is corrupted.";
+ }
+ llvm_unreachable("Unrecognized cv_error_code");
+ }
+};
+} // end anonymous namespace
+
+static ManagedStatic<CodeViewErrorCategory> Category;
+
+char CodeViewError::ID = 0;
+
+CodeViewError::CodeViewError(cv_error_code C) : CodeViewError(C, "") {}
+
+CodeViewError::CodeViewError(const std::string &Context)
+ : CodeViewError(cv_error_code::unspecified, Context) {}
+
+CodeViewError::CodeViewError(cv_error_code C, const std::string &Context)
+ : Code(C) {
+ ErrMsg = "CodeView Error: ";
+ std::error_code EC = convertToErrorCode();
+ if (Code != cv_error_code::unspecified)
+ ErrMsg += EC.message() + " ";
+ if (!Context.empty())
+ ErrMsg += Context;
+}
+
+void CodeViewError::log(raw_ostream &OS) const { OS << ErrMsg << "\n"; }
+
+const std::string &CodeViewError::getErrorMessage() const { return ErrMsg; }
+
+std::error_code CodeViewError::convertToErrorCode() const {
+ return std::error_code(static_cast<int>(Code), *Category);
+}
diff --git a/llvm/lib/DebugInfo/PDB/Raw/StreamReader.cpp b/llvm/lib/DebugInfo/CodeView/StreamReader.cpp
index ed9c9d400af..8a2926bc883 100644
--- a/llvm/lib/DebugInfo/PDB/Raw/StreamReader.cpp
+++ b/llvm/lib/DebugInfo/CodeView/StreamReader.cpp
@@ -7,11 +7,12 @@
//
//===----------------------------------------------------------------------===//
-#include "llvm/DebugInfo/PDB/Raw/StreamReader.h"
-#include "llvm/DebugInfo/PDB/Raw/RawError.h"
+#include "llvm/DebugInfo/CodeView/StreamReader.h"
+
+#include "llvm/DebugInfo/CodeView/CodeViewError.h"
using namespace llvm;
-using namespace llvm::pdb;
+using namespace llvm::codeview;
StreamReader::StreamReader(const StreamInterface &S) : Stream(S), Offset(0) {}
diff --git a/llvm/lib/DebugInfo/PDB/CMakeLists.txt b/llvm/lib/DebugInfo/PDB/CMakeLists.txt
index b5053c51f3a..113a2ad0ec4 100644
--- a/llvm/lib/DebugInfo/PDB/CMakeLists.txt
+++ b/llvm/lib/DebugInfo/PDB/CMakeLists.txt
@@ -28,7 +28,6 @@ if(HAVE_DIA_SDK)
endif()
add_pdb_impl_folder(Raw
- Raw/ByteStream.cpp
Raw/DbiStream.cpp
Raw/InfoStream.cpp
Raw/MappedBlockStream.cpp
@@ -40,7 +39,6 @@ add_pdb_impl_folder(Raw
Raw/PublicsStream.cpp
Raw/RawError.cpp
Raw/RawSession.cpp
- Raw/StreamReader.cpp
Raw/SymbolStream.cpp
Raw/TpiStream.cpp)
diff --git a/llvm/lib/DebugInfo/PDB/Raw/DbiStream.cpp b/llvm/lib/DebugInfo/PDB/Raw/DbiStream.cpp
index 6b5cd212ed9..078384ebae3 100644
--- a/llvm/lib/DebugInfo/PDB/Raw/DbiStream.cpp
+++ b/llvm/lib/DebugInfo/PDB/Raw/DbiStream.cpp
@@ -9,13 +9,13 @@
#include "llvm/DebugInfo/PDB/Raw/DbiStream.h"
+#include "llvm/DebugInfo/CodeView/StreamReader.h"
#include "llvm/DebugInfo/PDB/Raw/InfoStream.h"
#include "llvm/DebugInfo/PDB/Raw/ModInfo.h"
#include "llvm/DebugInfo/PDB/Raw/NameHashTable.h"
#include "llvm/DebugInfo/PDB/Raw/PDBFile.h"
#include "llvm/DebugInfo/PDB/Raw/RawConstants.h"
#include "llvm/DebugInfo/PDB/Raw/RawError.h"
-#include "llvm/DebugInfo/PDB/Raw/StreamReader.h"
using namespace llvm;
using namespace llvm::pdb;
@@ -80,7 +80,7 @@ DbiStream::DbiStream(PDBFile &File) : Pdb(File), Stream(StreamDBI, File) {
DbiStream::~DbiStream() {}
Error DbiStream::reload() {
- StreamReader Reader(Stream);
+ codeview::StreamReader Reader(Stream);
Header.reset(new HeaderInfo());
@@ -170,7 +170,7 @@ Error DbiStream::reload() {
return make_error<RawError>(raw_error_code::corrupt_file,
"Found unexpected bytes in DBI Stream.");
- StreamReader ECReader(ECSubstream);
+ codeview::StreamReader ECReader(ECSubstream);
if (auto EC = ECNames.load(ECReader))
return EC;
diff --git a/llvm/lib/DebugInfo/PDB/Raw/InfoStream.cpp b/llvm/lib/DebugInfo/PDB/Raw/InfoStream.cpp
index ccc4a5e6c9b..e7c8a831c73 100644
--- a/llvm/lib/DebugInfo/PDB/Raw/InfoStream.cpp
+++ b/llvm/lib/DebugInfo/PDB/Raw/InfoStream.cpp
@@ -10,9 +10,9 @@
#include "llvm/DebugInfo/PDB/Raw/InfoStream.h"
#include "llvm/ADT/BitVector.h"
#include "llvm/ADT/SmallVector.h"
+#include "llvm/DebugInfo/CodeView/StreamReader.h"
#include "llvm/DebugInfo/PDB/Raw/RawConstants.h"
#include "llvm/DebugInfo/PDB/Raw/RawError.h"
-#include "llvm/DebugInfo/PDB/Raw/StreamReader.h"
using namespace llvm;
using namespace llvm::pdb;
@@ -20,7 +20,7 @@ using namespace llvm::pdb;
InfoStream::InfoStream(PDBFile &File) : Pdb(File), Stream(StreamPDB, File) {}
Error InfoStream::reload() {
- StreamReader Reader(Stream);
+ codeview::StreamReader Reader(Stream);
struct Header {
support::ulittle32_t Version;
diff --git a/llvm/lib/DebugInfo/PDB/Raw/ModStream.cpp b/llvm/lib/DebugInfo/PDB/Raw/ModStream.cpp
index dfc7bfc0f5f..c359e7757d0 100644
--- a/llvm/lib/DebugInfo/PDB/Raw/ModStream.cpp
+++ b/llvm/lib/DebugInfo/PDB/Raw/ModStream.cpp
@@ -8,9 +8,10 @@
//===----------------------------------------------------------------------===//
#include "llvm/DebugInfo/PDB/Raw/ModStream.h"
+
+#include "llvm/DebugInfo/CodeView/StreamReader.h"
#include "llvm/DebugInfo/PDB/Raw/ModInfo.h"
#include "llvm/DebugInfo/PDB/Raw/RawError.h"
-#include "llvm/DebugInfo/PDB/Raw/StreamReader.h"
using namespace llvm;
using namespace llvm::pdb;
@@ -21,7 +22,7 @@ ModStream::ModStream(PDBFile &File, const ModInfo &Module)
ModStream::~ModStream() {}
Error ModStream::reload() {
- StreamReader Reader(Stream);
+ codeview::StreamReader Reader(Stream);
uint32_t SymbolSize = Mod.getSymbolDebugInfoByteSize();
uint32_t C11Size = Mod.getLineInfoByteSize();
diff --git a/llvm/lib/DebugInfo/PDB/Raw/NameHashTable.cpp b/llvm/lib/DebugInfo/PDB/Raw/NameHashTable.cpp
index 2005c3958db..a542a51b188 100644
--- a/llvm/lib/DebugInfo/PDB/Raw/NameHashTable.cpp
+++ b/llvm/lib/DebugInfo/PDB/Raw/NameHashTable.cpp
@@ -10,9 +10,8 @@
#include "llvm/DebugInfo/PDB/Raw/NameHashTable.h"
#include "llvm/ADT/ArrayRef.h"
-#include "llvm/DebugInfo/PDB/Raw/ByteStream.h"
+#include "llvm/DebugInfo/CodeView/StreamReader.h"
#include "llvm/DebugInfo/PDB/Raw/RawError.h"
-#include "llvm/DebugInfo/PDB/Raw/StreamReader.h"
#include "llvm/Support/Endian.h"
using namespace llvm;
@@ -78,7 +77,7 @@ static inline uint32_t HashStringV2(StringRef Str) {
NameHashTable::NameHashTable() : Signature(0), HashVersion(0), NameCount(0) {}
-Error NameHashTable::load(StreamReader &Stream) {
+Error NameHashTable::load(codeview::StreamReader &Stream) {
struct Header {
support::ulittle32_t Signature;
support::ulittle32_t HashVersion;
diff --git a/llvm/lib/DebugInfo/PDB/Raw/NameMap.cpp b/llvm/lib/DebugInfo/PDB/Raw/NameMap.cpp
index 202e7173b0e..777d93279c1 100644
--- a/llvm/lib/DebugInfo/PDB/Raw/NameMap.cpp
+++ b/llvm/lib/DebugInfo/PDB/Raw/NameMap.cpp
@@ -9,15 +9,15 @@
#include "llvm/DebugInfo/PDB/Raw/NameMap.h"
#include "llvm/ADT/BitVector.h"
+#include "llvm/DebugInfo/CodeView/StreamReader.h"
#include "llvm/DebugInfo/PDB/Raw/RawError.h"
-#include "llvm/DebugInfo/PDB/Raw/StreamReader.h"
using namespace llvm;
using namespace llvm::pdb;
NameMap::NameMap() {}
-Error NameMap::load(StreamReader &Stream) {
+Error NameMap::load(codeview::StreamReader &Stream) {
// This is some sort of weird string-set/hash table encoded in the stream.
// It starts with the number of bytes in the table.
diff --git a/llvm/lib/DebugInfo/PDB/Raw/PublicsStream.cpp b/llvm/lib/DebugInfo/PDB/Raw/PublicsStream.cpp
index af3cff32eb4..db66f536e5a 100644
--- a/llvm/lib/DebugInfo/PDB/Raw/PublicsStream.cpp
+++ b/llvm/lib/DebugInfo/PDB/Raw/PublicsStream.cpp
@@ -25,12 +25,12 @@
#include "llvm/DebugInfo/PDB/Raw/PublicsStream.h"
#include "llvm/DebugInfo/CodeView/CodeView.h"
+#include "llvm/DebugInfo/CodeView/StreamReader.h"
#include "llvm/DebugInfo/CodeView/TypeRecord.h"
#include "llvm/DebugInfo/PDB/Raw/MappedBlockStream.h"
#include "llvm/DebugInfo/PDB/Raw/PDBFile.h"
#include "llvm/DebugInfo/PDB/Raw/RawConstants.h"
#include "llvm/DebugInfo/PDB/Raw/RawError.h"
-#include "llvm/DebugInfo/PDB/Raw/StreamReader.h"
#include "llvm/DebugInfo/PDB/Raw/SymbolStream.h"
#include "llvm/ADT/BitVector.h"
@@ -99,7 +99,7 @@ uint32_t PublicsStream::getAddrMap() const { return Header->AddrMap; }
// we skip over the hash table which we believe contains information about
// public symbols.
Error PublicsStream::reload() {
- StreamReader Reader(Stream);
+ codeview::StreamReader Reader(Stream);
// Check stream size.
if (Reader.bytesRemaining() < sizeof(HeaderInfo) + sizeof(GSIHashHeader))
diff --git a/llvm/lib/DebugInfo/PDB/Raw/SymbolStream.cpp b/llvm/lib/DebugInfo/PDB/Raw/SymbolStream.cpp
index 6249524eddd..2037a646de7 100644
--- a/llvm/lib/DebugInfo/PDB/Raw/SymbolStream.cpp
+++ b/llvm/lib/DebugInfo/PDB/Raw/SymbolStream.cpp
@@ -10,12 +10,11 @@
#include "llvm/DebugInfo/PDB/Raw/SymbolStream.h"
#include "llvm/DebugInfo/CodeView/CodeView.h"
+#include "llvm/DebugInfo/CodeView/StreamReader.h"
#include "llvm/DebugInfo/CodeView/TypeRecord.h"
-#include "llvm/DebugInfo/PDB/Raw/ByteStream.h"
#include "llvm/DebugInfo/PDB/Raw/MappedBlockStream.h"
#include "llvm/DebugInfo/PDB/Raw/RawConstants.h"
#include "llvm/DebugInfo/PDB/Raw/RawError.h"
-#include "llvm/DebugInfo/PDB/Raw/StreamReader.h"
#include "llvm/Support/Endian.h"
@@ -29,7 +28,7 @@ SymbolStream::SymbolStream(PDBFile &File, uint32_t StreamNum)
SymbolStream::~SymbolStream() {}
Error SymbolStream::reload() {
- StreamReader Reader(MappedStream);
+ codeview::StreamReader Reader(MappedStream);
if (Stream.initialize(Reader, MappedStream.getLength()))
return make_error<RawError>(raw_error_code::corrupt_file,
diff --git a/llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp b/llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp
index 8ce8c01f608..99daf6e29fd 100644
--- a/llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp
+++ b/llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp
@@ -10,11 +10,11 @@
#include "llvm/DebugInfo/PDB/Raw/TpiStream.h"
#include "llvm/DebugInfo/CodeView/CodeView.h"
+#include "llvm/DebugInfo/CodeView/StreamReader.h"
#include "llvm/DebugInfo/CodeView/TypeRecord.h"
#include "llvm/DebugInfo/PDB/Raw/MappedBlockStream.h"
#include "llvm/DebugInfo/PDB/Raw/RawConstants.h"
#include "llvm/DebugInfo/PDB/Raw/RawError.h"
-#include "llvm/DebugInfo/PDB/Raw/StreamReader.h"
#include "llvm/Support/Endian.h"
@@ -62,7 +62,7 @@ TpiStream::TpiStream(PDBFile &File, uint32_t StreamIdx)
TpiStream::~TpiStream() {}
Error TpiStream::reload() {
- StreamReader Reader(Stream);
+ codeview::StreamReader Reader(Stream);
if (Reader.bytesRemaining() < sizeof(HeaderInfo))
return make_error<RawError>(raw_error_code::corrupt_file,
@@ -98,7 +98,7 @@ Error TpiStream::reload() {
// Hash indices, hash values, etc come from the hash stream.
MappedBlockStream HS(Header->HashStreamIndex, Pdb);
- StreamReader HSR(HS);
+ codeview::StreamReader HSR(HS);
HSR.setOffset(Header->HashValueBuffer.Off);
if (auto EC =
HashValuesBuffer.initialize(HSR, Header->HashValueBuffer.Length))
diff --git a/llvm/tools/llvm-pdbdump/llvm-pdbdump.cpp b/llvm/tools/llvm-pdbdump/llvm-pdbdump.cpp
index 4c0c0578068..9c33a000cb5 100644
--- a/llvm/tools/llvm-pdbdump/llvm-pdbdump.cpp
+++ b/llvm/tools/llvm-pdbdump/llvm-pdbdump.cpp
@@ -26,6 +26,7 @@
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/Config/config.h"
+#include "llvm/DebugInfo/CodeView/StreamReader.h"
#include "llvm/DebugInfo/CodeView/SymbolDumper.h"
#include "llvm/DebugInfo/CodeView/TypeDumper.h"
#include "llvm/DebugInfo/PDB/GenericError.h"
@@ -48,7 +49,6 @@
#include "llvm/DebugInfo/PDB/Raw/PublicsStream.h"
#include "llvm/DebugInfo/PDB/Raw/RawError.h"
#include "llvm/DebugInfo/PDB/Raw/RawSession.h"
-#include "llvm/DebugInfo/PDB/Raw/StreamReader.h"
#include "llvm/DebugInfo/PDB/Raw/TpiStream.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/ConvertUTF.h"
@@ -343,7 +343,7 @@ static Error dumpStreamData(ScopedPrinter &P, PDBFile &File) {
return Error::success();
MappedBlockStream S(DumpStreamNum, File);
- StreamReader R(S);
+ codeview::StreamReader R(S);
while (R.bytesRemaining() > 0) {
ArrayRef<uint8_t> Data;
uint32_t BytesToReadInBlock = std::min(
@@ -393,7 +393,7 @@ static Error dumpNamedStream(ScopedPrinter &P, PDBFile &File) {
P.printNumber("Index", NameStreamIndex);
MappedBlockStream NameStream(NameStreamIndex, File);
- StreamReader Reader(NameStream);
+ codeview::StreamReader Reader(NameStream);
NameHashTable NameTable;
if (auto EC = NameTable.load(Reader))
OpenPOWER on IntegriCloud