Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(80)

Side by Side Diff: include/llvm/Bitcode/NaCl/NaClBitstreamReader.h

Issue 986453002: Additional clean ups on errors in bitcode parsing. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-llvm.git@master
Patch Set: Fix comment. Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 //===- NaClBitstreamReader.h -----------------------------------*- C++ -*-===// 1 //===- NaClBitstreamReader.h -----------------------------------*- C++ -*-===//
2 // Low-level bitstream reader interface 2 // Low-level bitstream reader interface
3 // 3 //
4 // The LLVM Compiler Infrastructure 4 // The LLVM Compiler Infrastructure
5 // 5 //
6 // This file is distributed under the University of Illinois Open Source 6 // This file is distributed under the University of Illinois Open Source
7 // License. See LICENSE.TXT for details. 7 // License. See LICENSE.TXT for details.
8 // 8 //
9 //===----------------------------------------------------------------------===// 9 //===----------------------------------------------------------------------===//
10 // 10 //
11 // This header defines the BitstreamReader class. This class can be used to 11 // This header defines the BitstreamReader class. This class can be used to
12 // read an arbitrary bitstream, regardless of its contents. 12 // read an arbitrary bitstream, regardless of its contents.
13 // 13 //
14 //===----------------------------------------------------------------------===// 14 //===----------------------------------------------------------------------===//
15 15
16 #ifndef LLVM_BITCODE_NACL_NACLBITSTREAMREADER_H 16 #ifndef LLVM_BITCODE_NACL_NACLBITSTREAMREADER_H
17 #define LLVM_BITCODE_NACL_NACLBITSTREAMREADER_H 17 #define LLVM_BITCODE_NACL_NACLBITSTREAMREADER_H
18 18
19 #include "llvm/ADT/SmallVector.h" 19 #include "llvm/ADT/SmallVector.h"
20 #include "llvm/Bitcode/NaCl/NaClLLVMBitCodes.h" 20 #include "llvm/Bitcode/NaCl/NaClLLVMBitCodes.h"
21 #include "llvm/Support/Endian.h" 21 #include "llvm/Support/Endian.h"
22 #include "llvm/Support/StreamingMemoryObject.h" 22 #include "llvm/Support/StreamingMemoryObject.h"
23 #include <climits> 23 #include <climits>
24 #include <vector> 24 #include <vector>
25 25
26 namespace llvm { 26 namespace llvm {
27 27
28 class Deserializer; 28 class Deserializer;
29 29
30 namespace naclbitc {
31
32 /// Returns the Bit as a Byte:BitInByte string.
33 std::string getBitAddress(uint64_t Bit);
34
35 /// Severity levels for reporting errors.
36 enum ErrorLevel {
37 Warning,
38 Error,
39 Fatal
40 };
41
42 // Basic printing routine to generate the beginning of an error
43 // message. BitPosition is the bit position the error was found.
44 // Level is the severity of the error.
45 raw_ostream &ErrorAt(raw_ostream &Out, ErrorLevel Level,
46 uint64_t BitPosition);
47
48 } // End namespace naclbitc.
49
30 /// This class is used to read from a NaCl bitcode wire format stream, 50 /// This class is used to read from a NaCl bitcode wire format stream,
31 /// maintaining information that is global to decoding the entire file. 51 /// maintaining information that is global to decoding the entire file.
32 /// While a file is being read, multiple cursors can be independently 52 /// While a file is being read, multiple cursors can be independently
33 /// advanced or skipped around within the file. These are represented by 53 /// advanced or skipped around within the file. These are represented by
34 /// the NaClBitstreamCursor class. 54 /// the NaClBitstreamCursor class.
35 class NaClBitstreamReader { 55 class NaClBitstreamReader {
36 public: 56 public:
37 /// This contains information emitted to BLOCKINFO_BLOCK blocks. These 57 /// This contains information emitted to BLOCKINFO_BLOCK blocks. These
38 /// describe abbreviations that all blocks of the specified ID inherit. 58 /// describe abbreviations that all blocks of the specified ID inherit.
39 struct BlockInfo { 59 struct BlockInfo {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 Info.Abbrevs[i]->dropRef(); 101 Info.Abbrevs[i]->dropRef();
82 BlockInfoRecords.pop_back(); 102 BlockInfoRecords.pop_back();
83 } 103 }
84 } 104 }
85 105
86 /// \brief Returns the initial address (after the header) of the input stream. 106 /// \brief Returns the initial address (after the header) of the input stream.
87 size_t getInitialAddress() const { 107 size_t getInitialAddress() const {
88 return InitialAddress; 108 return InitialAddress;
89 } 109 }
90 110
91 /// Returns the Bit as a Byte:BitInByte string. MinByteWidth is the
92 /// minimum number of characters to print out the Byte value (blank
93 /// fills).
94 static std::string getBitAddress(uint64_t Bit, unsigned MinByteWidth=1);
95
96 //===--------------------------------------------------------------------===// 111 //===--------------------------------------------------------------------===//
97 // Block Manipulation 112 // Block Manipulation
98 //===--------------------------------------------------------------------===// 113 //===--------------------------------------------------------------------===//
99 114
100 /// Return true if we've already read and processed the block info block for 115 /// Return true if we've already read and processed the block info block for
101 /// this Bitstream. We only process it for the first cursor that walks over 116 /// this Bitstream. We only process it for the first cursor that walks over
102 /// it. 117 /// it.
103 bool hasBlockInfoRecords() const { return !BlockInfoRecords.empty(); } 118 bool hasBlockInfoRecords() const { return !BlockInfoRecords.empty(); }
104 119
105 /// If there is block info for the specified ID, return it, otherwise return 120 /// If there is block info for the specified ID, return it, otherwise return
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 } 335 }
321 336
322 NaClBitstreamReader *getBitStreamReader() { 337 NaClBitstreamReader *getBitStreamReader() {
323 return BitStream; 338 return BitStream;
324 } 339 }
325 const NaClBitstreamReader *getBitStreamReader() const { 340 const NaClBitstreamReader *getBitStreamReader() const {
326 return BitStream; 341 return BitStream;
327 } 342 }
328 343
329 /// Returns the current bit address (string) of the bit cursor. 344 /// Returns the current bit address (string) of the bit cursor.
330 /// MinByteWidth is the minimum number of characters to print out 345 std::string getCurrentBitAddress() const {
331 /// the Byte value (blank fills). 346 return naclbitc::getBitAddress(GetCurrentBitNo());
332 std::string getCurrentBitAddress(unsigned MinByteWidth=1) const {
333 return BitStream->getBitAddress(GetCurrentBitNo(), MinByteWidth);
334 } 347 }
335 348
336 /// Flags that modify the behavior of advance(). 349 /// Flags that modify the behavior of advance().
337 enum { 350 enum {
338 /// If this flag is used, the advance() method does not automatically pop 351 /// If this flag is used, the advance() method does not automatically pop
339 /// the block scope when the end of a block is reached. 352 /// the block scope when the end of a block is reached.
340 AF_DontPopBlockAtEnd = 1, 353 AF_DontPopBlockAtEnd = 1,
341 354
342 /// If this flag is used, abbrev entries are returned just like normal 355 /// If this flag is used, abbrev entries are returned just like normal
343 /// records. 356 /// records.
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after
638 // Skips over an abbreviation record. Duplicates code of ReadAbbrevRecord, 651 // Skips over an abbreviation record. Duplicates code of ReadAbbrevRecord,
639 // except that no abbreviation is built. 652 // except that no abbreviation is built.
640 void SkipAbbrevRecord(); 653 void SkipAbbrevRecord();
641 654
642 bool ReadBlockInfoBlock(NaClAbbrevListener *Listener); 655 bool ReadBlockInfoBlock(NaClAbbrevListener *Listener);
643 }; 656 };
644 657
645 } // End llvm namespace 658 } // End llvm namespace
646 659
647 #endif 660 #endif
OLDNEW
« no previous file with comments | « include/llvm/Bitcode/NaCl/NaClBitcodeParser.h ('k') | include/llvm/Bitcode/NaCl/NaClObjDumpStream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698