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

Unified Diff: include/llvm/Bitcode/NaCl/NaClBitcodeHeader.h

Issue 1122423005: Add (unsupported experimental) feature allowing byte aligned bitcode. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-llvm.git@master
Patch Set: Fix nits. Created 5 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | include/llvm/Bitcode/NaCl/NaClBitstreamReader.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: include/llvm/Bitcode/NaCl/NaClBitcodeHeader.h
diff --git a/include/llvm/Bitcode/NaCl/NaClBitcodeHeader.h b/include/llvm/Bitcode/NaCl/NaClBitcodeHeader.h
index dcca6643ca2dc59f8141191b981b9d08cf5f158b..85d9c657879c9ffd4a66ff31ae146ceb32460bb7 100644
--- a/include/llvm/Bitcode/NaCl/NaClBitcodeHeader.h
+++ b/include/llvm/Bitcode/NaCl/NaClBitcodeHeader.h
@@ -38,13 +38,18 @@ public:
// Defines the ID associated with the value. Valid values are in
// {0x0, ..., 0xFFF}
typedef enum {
- kInvalid = 0, // KUnknownType.
- kPNaClVersion = 1 // kUint32.
+ kInvalid = 0, // KUnknownType.
+ kPNaClVersion = 1, // kUint32Type.
+ kAlignBitcodeRecords = 2, // kFlagType.
+ kTag_MAX = kAlignBitcodeRecords
} Tag;
// Defines the type of value.
typedef enum {
kBufferType, // Buffer of form uint8_t[len].
- kUInt32Type
+ kUInt32Type,
+ kFlagType,
+ kUnknownType,
+ kFieldType_MAX = kUnknownType
} FieldType;
// Defines the number of bytes in a (32-bit) word.
static const int WordSize = 4;
@@ -55,6 +60,9 @@ public:
// Create an invalid header field.
NaClBitcodeHeaderField();
+ // Creates a header field where MyID is a flag.
+ NaClBitcodeHeaderField(Tag MyID);
+
// Create a header field with an uint32_t value.
NaClBitcodeHeaderField(Tag MyID, uint32_t value);
@@ -78,6 +86,18 @@ public:
/// \brief Read field from Buf[BufLen].
bool Read(const uint8_t *Buf, size_t BufLen);
+ /// \brief Returns string describing ID of field.
+ static const char *IDName(Tag ID);
+ const char *IDName() const {
+ return IDName(ID);
+ }
+
+ /// \brief Returns string describing type of field.
+ static const char *TypeName(FieldType FType);
+ const char *TypeName() const {
+ return TypeName(FType);
+ }
+
/// \brief Returns string describing field.
std::string Contents() const;
@@ -108,8 +128,11 @@ private:
FixedSubfield EncodeTypedID() const { return (ID << 4) | FType; }
// Extract out ID and Type from a fixed subfield.
void DecodeTypedID(FixedSubfield Subfield, Tag &ID, FieldType &FType) {
- ID = static_cast<Tag>(Subfield >> 4);
- FType = static_cast<FieldType>(Subfield & 0xF);
+ FixedSubfield PossibleID = Subfield >> 4;
+ ID = (PossibleID > kTag_MAX ? kInvalid : static_cast<Tag>(PossibleID));
+ FixedSubfield PossibleFType = Subfield & 0xF;
+ FType = (PossibleFType > kFieldType_MAX
+ ? kUnknownType : static_cast<FieldType>(PossibleFType));
}
// Combined size of the fixed subfields
const static size_t kTagLenSize = 2 * sizeof(FixedSubfield);
@@ -144,6 +167,8 @@ class NaClBitcodeHeader {
bool IsReadableFlag;
// Defines the PNaCl version defined by the header file.
uint32_t PNaClVersion;
+ // Byte align bitcode records when nonzero.
+ bool AlignBitcodeRecords = false;
public:
static const int WordSize = NaClBitcodeHeaderField::WordSize;
@@ -173,7 +198,7 @@ public:
/// field.
///
/// Returns false if able to read (all of) the bitcode header.
- bool Read(const unsigned char *&BufPtr, const unsigned char *&BufEnd);
+ bool Read(const unsigned char *BufPtr, const unsigned char *BufEnd);
// \brief Read the PNaCl bitcode header, recording the fields found
// in the header. Returns false if able to read (all of) the bitcode header.
@@ -209,6 +234,9 @@ public:
/// \brief Returns the PNaClVersion, as defined by the header.
uint32_t GetPNaClVersion() const { return PNaClVersion; }
+ /// \brief Returns if one should byte align bitcode records.
+ bool getAlignBitcodeRecords() const { return AlignBitcodeRecords; }
+
private:
// Reads and verifies the first 8 bytes of the header, consisting
// of the magic number 'PEXE', and the value defining the number
« no previous file with comments | « no previous file | include/llvm/Bitcode/NaCl/NaClBitstreamReader.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698