summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Support/BinaryStreamReader.cpp
diff options
context:
space:
mode:
authorZachary Turner <zturner@google.com>2017-05-02 23:36:17 +0000
committerZachary Turner <zturner@google.com>2017-05-02 23:36:17 +0000
commit7dba20bd2b0767ff6be93d7d68a3045d060a7e22 (patch)
tree4012baf0139582f0dd109c3bd3a359dc3201bb12 /llvm/lib/Support/BinaryStreamReader.cpp
parentc7180204cab2407328fcbfc044e7526b9fcc7b7c (diff)
downloadbcm5719-llvm-7dba20bd2b0767ff6be93d7d68a3045d060a7e22.tar.gz
bcm5719-llvm-7dba20bd2b0767ff6be93d7d68a3045d060a7e22.zip
Make codeview::StringTable.
Previously we had knowledge of how to serialize and deserialize a string table inside of DebugInfo/PDB, but the string table that it serializes contains a piece that is actually considered CodeView and can appear outside of a PDB. We already have logic in llvm-readobj and MCCodeView to read and write this format, so it doesn't make sense to duplicate the logic in DebugInfoPDB as well. This patch makes codeview::StringTable (for writing) and codeview::StringTableRef (for reading), updates DebugInfoPDB to use these classes for its own writing, and updates llvm-readobj to additionally use StringTableRef for reading. It's a bit more difficult to get MCCodeView to use this for writing, but it's a logical next step. llvm-svn: 301986
Diffstat (limited to 'llvm/lib/Support/BinaryStreamReader.cpp')
-rw-r--r--llvm/lib/Support/BinaryStreamReader.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/llvm/lib/Support/BinaryStreamReader.cpp b/llvm/lib/Support/BinaryStreamReader.cpp
index c7a2e0ddb17..702d98770e0 100644
--- a/llvm/lib/Support/BinaryStreamReader.cpp
+++ b/llvm/lib/Support/BinaryStreamReader.cpp
@@ -93,3 +93,16 @@ uint8_t BinaryStreamReader::peek() const {
llvm::consumeError(std::move(EC));
return Buffer[0];
}
+
+std::pair<BinaryStreamReader, BinaryStreamReader>
+BinaryStreamReader::split(uint32_t Off) const {
+ assert(getLength() >= Off);
+
+ BinaryStreamRef First = Stream.drop_front(Offset);
+
+ BinaryStreamRef Second = First.drop_front(Off);
+ First = First.keep_front(Off);
+ BinaryStreamReader W1{First};
+ BinaryStreamReader W2{Second};
+ return std::make_pair(W1, W2);
+} \ No newline at end of file
OpenPOWER on IntegriCloud