diff options
author | Karl Schimpf <kschimpf@google.com> | 2013-06-06 10:03:24 -0700 |
---|---|---|
committer | Karl Schimpf <kschimpf@google.com> | 2013-06-06 10:03:24 -0700 |
commit | 37bdd9174a1cba17b369c8c1f561e70c458e0c13 (patch) | |
tree | 1f6a984ebb94ccd819c6e38646d91bb5c7eb6977 /include/llvm/Bitcode/NaCl/NaClBitstreamReader.h | |
parent | c0d9b337419b72e69cbd9c64f84ae39560ab344f (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.h | 35 |
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); } |