summaryrefslogtreecommitdiffstats
path: root/llvm/lib/DebugInfo/CodeView
diff options
context:
space:
mode:
authorZachary Turner <zturner@google.com>2016-05-28 05:21:57 +0000
committerZachary Turner <zturner@google.com>2016-05-28 05:21:57 +0000
commit0d43c1c339ab5532c4527e92dc852b6e0f3f1788 (patch)
tree321e2a7cb797ccc76f6d806872e8a12ee8fd475b /llvm/lib/DebugInfo/CodeView
parent9a9a3169e35306f396e2d690b157ad03a9521650 (diff)
downloadbcm5719-llvm-0d43c1c339ab5532c4527e92dc852b6e0f3f1788.tar.gz
bcm5719-llvm-0d43c1c339ab5532c4527e92dc852b6e0f3f1788.zip
[pdb] Finish conversion to zero copy pdb access.
This converts remaining uses of ByteStream, which was still left in the symbol stream and type stream, to using the new StreamInterface zero-copy classes. RecordIterator is finally deleted, so this is the only way left now. Additionally, more error checking is added when iterating the various streams. With this, the transition to zero copy pdb access is complete. llvm-svn: 271101
Diffstat (limited to 'llvm/lib/DebugInfo/CodeView')
-rw-r--r--llvm/lib/DebugInfo/CodeView/ByteStream.cpp32
-rw-r--r--llvm/lib/DebugInfo/CodeView/StreamReader.cpp13
-rw-r--r--llvm/lib/DebugInfo/CodeView/SymbolDumper.cpp4
-rw-r--r--llvm/lib/DebugInfo/CodeView/TypeDumper.cpp5
-rw-r--r--llvm/lib/DebugInfo/CodeView/TypeStreamMerger.cpp12
5 files changed, 15 insertions, 51 deletions
diff --git a/llvm/lib/DebugInfo/CodeView/ByteStream.cpp b/llvm/lib/DebugInfo/CodeView/ByteStream.cpp
index 1ea976b6a26..c0ac0b7a8ff 100644
--- a/llvm/lib/DebugInfo/CodeView/ByteStream.cpp
+++ b/llvm/lib/DebugInfo/CodeView/ByteStream.cpp
@@ -17,41 +17,13 @@ using namespace llvm::codeview;
ByteStream::ByteStream() {}
-ByteStream::ByteStream(MutableArrayRef<uint8_t> Data) : Data(Data) {}
+ByteStream::ByteStream(ArrayRef<uint8_t> Data) : Data(Data) {}
ByteStream::~ByteStream() {}
-void ByteStream::reset() {
- Ownership.reset();
- Data = MutableArrayRef<uint8_t>();
-}
-
-void ByteStream::load(uint32_t Length) {
- reset();
- if (Length > 0)
- Data = MutableArrayRef<uint8_t>(new uint8_t[Length], Length);
- Ownership.reset(Data.data());
-}
-
-Error ByteStream::load(StreamReader &Reader, uint32_t Length) {
- load(Length);
- auto EC = Reader.readBytes(Data);
- if (EC)
- reset();
- return EC;
-}
-
-Error ByteStream::readBytes(uint32_t Offset,
- MutableArrayRef<uint8_t> Buffer) const {
- if (Data.size() < Buffer.size() + Offset)
- return make_error<CodeViewError>(cv_error_code::insufficient_buffer);
- ::memcpy(Buffer.data() + Offset, Data.data(), Buffer.size());
- return Error::success();
-}
-
Error ByteStream::readBytes(uint32_t Offset, uint32_t Size,
ArrayRef<uint8_t> &Buffer) const {
- if (Data.size() < Buffer.size() + Offset)
+ if (Data.size() < Size + Offset)
return make_error<CodeViewError>(cv_error_code::insufficient_buffer);
Buffer = Data.slice(Offset, Size);
return Error::success();
diff --git a/llvm/lib/DebugInfo/CodeView/StreamReader.cpp b/llvm/lib/DebugInfo/CodeView/StreamReader.cpp
index 64985bfd0e2..94a6183cd8a 100644
--- a/llvm/lib/DebugInfo/CodeView/StreamReader.cpp
+++ b/llvm/lib/DebugInfo/CodeView/StreamReader.cpp
@@ -17,20 +17,13 @@ using namespace llvm::codeview;
StreamReader::StreamReader(const StreamInterface &S) : Stream(S), Offset(0) {}
-Error StreamReader::readBytes(uint32_t Size, ArrayRef<uint8_t> &Buffer) {
+Error StreamReader::readBytes(ArrayRef<uint8_t> &Buffer, uint32_t Size) {
if (auto EC = Stream.readBytes(Offset, Size, Buffer))
return EC;
Offset += Size;
return Error::success();
}
-Error StreamReader::readBytes(MutableArrayRef<uint8_t> Buffer) {
- if (auto EC = Stream.readBytes(Offset, Buffer))
- return EC;
- Offset += Buffer.size();
- return Error::success();
-}
-
Error StreamReader::readInteger(uint16_t &Dest) {
const support::ulittle16_t *P;
if (auto EC = readObject(P))
@@ -63,7 +56,7 @@ Error StreamReader::readZeroString(StringRef &Dest) {
setOffset(OriginalOffset);
ArrayRef<uint8_t> Data;
- if (auto EC = readBytes(Length, Data))
+ if (auto EC = readBytes(Data, Length))
return EC;
Dest = StringRef(reinterpret_cast<const char *>(Data.begin()), Data.size());
@@ -74,7 +67,7 @@ Error StreamReader::readZeroString(StringRef &Dest) {
Error StreamReader::readFixedString(StringRef &Dest, uint32_t Length) {
ArrayRef<uint8_t> Bytes;
- if (auto EC = readBytes(Length, Bytes))
+ if (auto EC = readBytes(Bytes, Length))
return EC;
Dest = StringRef(reinterpret_cast<const char *>(Bytes.begin()), Bytes.size());
return Error::success();
diff --git a/llvm/lib/DebugInfo/CodeView/SymbolDumper.cpp b/llvm/lib/DebugInfo/CodeView/SymbolDumper.cpp
index 7d405ec2453..e2dc9d5b76d 100644
--- a/llvm/lib/DebugInfo/CodeView/SymbolDumper.cpp
+++ b/llvm/lib/DebugInfo/CodeView/SymbolDumper.cpp
@@ -872,8 +872,8 @@ bool CVSymbolDumper::dump(const CVRecord<SymbolKind> &Record) {
return !Dumper.hadError();
}
-bool CVSymbolDumper::dump(ArrayRef<uint8_t> Data) {
+bool CVSymbolDumper::dump(const CVSymbolArray &Symbols) {
CVSymbolDumperImpl Dumper(CVTD, ObjDelegate.get(), W, PrintRecordBytes);
- Dumper.visitSymbolStream(Data);
+ Dumper.visitSymbolStream(Symbols);
return !Dumper.hadError();
}
diff --git a/llvm/lib/DebugInfo/CodeView/TypeDumper.cpp b/llvm/lib/DebugInfo/CodeView/TypeDumper.cpp
index 1db1e54f430..da3919a0773 100644
--- a/llvm/lib/DebugInfo/CodeView/TypeDumper.cpp
+++ b/llvm/lib/DebugInfo/CodeView/TypeDumper.cpp
@@ -12,7 +12,6 @@
#include "llvm/DebugInfo/CodeView/CVTypeVisitor.h"
#include "llvm/DebugInfo/CodeView/TypeIndex.h"
#include "llvm/DebugInfo/CodeView/TypeRecord.h"
-#include "llvm/DebugInfo/CodeView/TypeStream.h"
#include "llvm/Support/ScopedPrinter.h"
using namespace llvm;
@@ -683,10 +682,10 @@ bool CVTypeDumper::dump(const CVRecord<TypeLeafKind> &Record) {
return !Dumper.hadError();
}
-bool CVTypeDumper::dump(ArrayRef<uint8_t> Data) {
+bool CVTypeDumper::dump(const CVTypeArray &Types) {
assert(W && "printer should not be null");
CVTypeDumperImpl Dumper(*this, *W, PrintRecordBytes);
- Dumper.visitTypeStream(Data);
+ Dumper.visitTypeStream(Types);
return !Dumper.hadError();
}
diff --git a/llvm/lib/DebugInfo/CodeView/TypeStreamMerger.cpp b/llvm/lib/DebugInfo/CodeView/TypeStreamMerger.cpp
index 88211d0af95..d16e481e326 100644
--- a/llvm/lib/DebugInfo/CodeView/TypeStreamMerger.cpp
+++ b/llvm/lib/DebugInfo/CodeView/TypeStreamMerger.cpp
@@ -12,9 +12,9 @@
#include "llvm/ADT/StringExtras.h"
#include "llvm/DebugInfo/CodeView/CVTypeVisitor.h"
#include "llvm/DebugInfo/CodeView/FieldListRecordBuilder.h"
+#include "llvm/DebugInfo/CodeView/StreamRef.h"
#include "llvm/DebugInfo/CodeView/TypeIndex.h"
#include "llvm/DebugInfo/CodeView/TypeRecord.h"
-#include "llvm/DebugInfo/CodeView/TypeStream.h"
#include "llvm/Support/ScopedPrinter.h"
using namespace llvm;
@@ -71,7 +71,7 @@ public:
void visitFieldList(TypeLeafKind Leaf, ArrayRef<uint8_t> FieldData);
- bool mergeStream(ArrayRef<uint8_t> SrcStream);
+ bool mergeStream(const CVTypeArray &Types);
private:
bool hadError() { return FoundBadTypeIndex || CVTypeVisitor::hadError(); }
@@ -131,14 +131,14 @@ void TypeStreamMerger::visitUnknownMember(TypeLeafKind LF) {
parseError();
}
-bool TypeStreamMerger::mergeStream(ArrayRef<uint8_t> SrcStream) {
+bool TypeStreamMerger::mergeStream(const CVTypeArray &Types) {
assert(IndexMap.empty());
- visitTypeStream(SrcStream);
+ visitTypeStream(Types);
IndexMap.clear();
return !hadError();
}
bool llvm::codeview::mergeTypeStreams(TypeTableBuilder &DestStream,
- ArrayRef<uint8_t> SrcStream) {
- return TypeStreamMerger(DestStream).mergeStream(SrcStream);
+ const CVTypeArray &Types) {
+ return TypeStreamMerger(DestStream).mergeStream(Types);
}
OpenPOWER on IntegriCloud