aboutsummaryrefslogtreecommitdiff
path: root/include/llvm/Bitcode/NaCl/NaClBitstreamReader.h
diff options
context:
space:
mode:
authorKarl Schimpf <kschimpf@google.com>2013-06-06 10:03:24 -0700
committerKarl Schimpf <kschimpf@google.com>2013-06-06 10:03:24 -0700
commit37bdd9174a1cba17b369c8c1f561e70c458e0c13 (patch)
tree1f6a984ebb94ccd819c6e38646d91bb5c7eb6977 /include/llvm/Bitcode/NaCl/NaClBitstreamReader.h
parentc0d9b337419b72e69cbd9c64f84ae39560ab344f (diff)
Make PNaCl bitcode files have a different format from LLVM bitcode files.
BUG= https://code.google.com/p/nativeclient/issues/detail?id=3405 R=dschuff@chromium.org Review URL: https://codereview.chromium.org/15907008
Diffstat (limited to 'include/llvm/Bitcode/NaCl/NaClBitstreamReader.h')
-rw-r--r--include/llvm/Bitcode/NaCl/NaClBitstreamReader.h35
1 files changed, 20 insertions, 15 deletions
diff --git a/include/llvm/Bitcode/NaCl/NaClBitstreamReader.h b/include/llvm/Bitcode/NaCl/NaClBitstreamReader.h
index 4c532bbc37..a338bbfe79 100644
--- a/include/llvm/Bitcode/NaCl/NaClBitstreamReader.h
+++ b/include/llvm/Bitcode/NaCl/NaClBitstreamReader.h
@@ -49,24 +49,30 @@ private:
std::vector<BlockInfo> BlockInfoRecords;
- /// IgnoreBlockInfoNames - This is set to true if we don't care about the
- /// block/record name information in the BlockInfo block. Only llvm-bcanalyzer
- /// uses this.
+ /// IgnoreBlockInfoNames - This is set to true if we don't care
+ /// about the block/record name information in the BlockInfo
+ /// block. Only pnacl-bcanalyzer uses this.
bool IgnoreBlockInfoNames;
+ /// \brief Holds the offset of the first byte after the header.
+ size_t InitialAddress;
+
NaClBitstreamReader(const NaClBitstreamReader&) LLVM_DELETED_FUNCTION;
void operator=(const NaClBitstreamReader&) LLVM_DELETED_FUNCTION;
public:
- NaClBitstreamReader() : IgnoreBlockInfoNames(true) {
- }
+ NaClBitstreamReader() : IgnoreBlockInfoNames(true), InitialAddress(0) {}
NaClBitstreamReader(const unsigned char *Start, const unsigned char *End) {
IgnoreBlockInfoNames = true;
+ InitialAddress = 0;
init(Start, End);
}
- NaClBitstreamReader(StreamableMemoryObject *bytes) {
- BitcodeBytes.reset(bytes);
+ NaClBitstreamReader(StreamableMemoryObject *Bytes,
+ size_t MyInitialAddress=0)
+ : InitialAddress(MyInitialAddress)
+ {
+ BitcodeBytes.reset(Bytes);
}
void init(const unsigned char *Start, const unsigned char *End) {
@@ -93,6 +99,11 @@ public:
void CollectBlockInfoNames() { IgnoreBlockInfoNames = false; }
bool isIgnoringBlockInfoNames() { return IgnoreBlockInfoNames; }
+ /// \brief Returns the initial address (after the header) of the input stream.
+ size_t getInitialAddress() const {
+ return InitialAddress;
+ }
+
//===--------------------------------------------------------------------===//
// Block Manipulation
//===--------------------------------------------------------------------===//
@@ -210,7 +221,7 @@ public:
}
explicit NaClBitstreamCursor(NaClBitstreamReader &R) : BitStream(&R) {
- NextChar = 0;
+ NextChar = R.getInitialAddress();
CurWord = 0;
BitsInCurWord = 0;
}
@@ -219,7 +230,7 @@ public:
freeState();
BitStream = &R;
- NextChar = 0;
+ NextChar = R.getInitialAddress();
CurWord = 0;
BitsInCurWord = 0;
}
@@ -242,12 +253,6 @@ public:
static_cast<uint64_t>(pos - 1));
}
- uint32_t getWord(size_t pos) {
- uint8_t buf[4] = { 0xFF, 0xFF, 0xFF, 0xFF };
- BitStream->getBitcodeBytes().readBytes(pos, sizeof(buf), buf, NULL);
- return *reinterpret_cast<support::ulittle32_t *>(buf);
- }
-
bool AtEndOfStream() {
return BitsInCurWord == 0 && isEndPos(NextChar);
}