Chromium Code Reviews| Index: include/llvm/Bitcode/NaCl/NaClBitcodeMunge.h |
| diff --git a/include/llvm/Bitcode/NaCl/NaClBitcodeMunge.h b/include/llvm/Bitcode/NaCl/NaClBitcodeMunge.h |
| index 9d25a8542ca19b912fa362822c2a9513dcd87a0e..2284c3f384a50f5208cc863c4451b31991faa3f7 100644 |
| --- a/include/llvm/Bitcode/NaCl/NaClBitcodeMunge.h |
| +++ b/include/llvm/Bitcode/NaCl/NaClBitcodeMunge.h |
| @@ -8,7 +8,7 @@ |
| //===----------------------------------------------------------------------===// |
| // |
| // Test harness for generating a PNaCl bitcode memory buffer from |
| -// an array, and objdump the resulting contents. |
| +// an array, and parse/objdump the resulting contents. |
| // |
| // Generates a bitcode memory buffer from an array containing 1 or |
| // more PNaCl records. Used to test errors in PNaCl bitcode. |
| @@ -63,10 +63,11 @@ |
| namespace llvm { |
| +class MemoryBuffer; |
| class NaClBitstreamWriter; |
| class NaClBitCodeAbbrev; |
| -/// Class to run tests for function llvm::NaClObjDump. |
| +/// Base class to run tests on munged bitcode files. |
| class NaClBitcodeMunger { |
| public: |
| /// The types of editing actions that can be applied. |
| @@ -82,71 +83,18 @@ public: |
| uint64_t RecordTerminator) |
| : Records(Records), RecordsSize(RecordsSize), |
| RecordTerminator(RecordTerminator), WriteBlockID(-1), SetBID(-1), |
| - DumpResults("Error: No previous dump results!\n"), |
| - DumpStream(NULL), Writer(NULL), FoundErrors(false), |
| + DumpResults("Error: No previous dump results!\n"), MungedInput(nullptr), |
| + DumpStream(nullptr), Writer(nullptr), FoundErrors(false), |
| FatalBuffer(), FatalStream(FatalBuffer) {} |
| - /// Runs function NaClObjDump on the sequence of records associated |
| - /// with the instance. The memory buffer containing the bitsequence |
| - /// associated with the record is automatically generated, and |
| - /// passed to NaClObjDump. TestName is the name associated with the |
| - /// memory buffer. If AddHeader is true, test assumes that the |
| - /// sequence of records doesn't contain a header record, and the |
| - /// test should add one. Arguments NoRecords and NoAssembly are |
| - /// passed to NaClObjDump. Returns true if test succeeds without |
| - /// errors. |
| - bool runTestWithFlags(const char *TestName, bool AddHeader, |
| - bool NoRecords, bool NoAssembly) { |
| - uint64_t NoMunges[] = {0}; |
| - return runTestWithFlags(TestName, NoMunges, 0, AddHeader, NoRecords, |
| - NoAssembly); |
| - } |
| - |
| - /// Same as above except it runs function NaClObjDump with flags |
| - /// NoRecords and NoAssembly set to false, and AddHeader set to true. |
| - bool runTest(const char *TestName) { |
| - return runTestWithFlags(TestName, true, false, false); |
| - } |
| - |
| - /// Same as runTest, but only print out assembly and errors. |
| - bool runTestForAssembly(const char *TestName) { |
| - return runTestWithFlags(TestName, true, true, false); |
| - } |
| - |
| - /// Same as runTest, but only generate error messages. |
| - bool runTestForErrors(const char *TestName) { |
| - return runTestWithFlags(TestName, true, true, true); |
| - } |
| - |
| - /// Runs function llvm::NaClObjDump on the sequence of records |
| - /// associated with the instance. Array Munges contains the sequence |
| - /// of edits to apply to the sequence of records when generating the |
| - /// bitsequence in a memory buffer. This generated bitsequence is |
| - /// then passed to NaClObjDump. TestName is the name associated |
| - /// with the memory buffer. Arguments NoRecords and NoAssembly are |
| - /// passed to NaClObjDump. Returns true if test succeeds without |
| - /// errors. |
| - bool runTestWithFlags(const char* TestName, const uint64_t Munges[], |
| - size_t MungesSize, bool AddHeader, |
| - bool NoRecords, bool NoAssembly); |
| - |
| - /// Same as above except it runs function NaClObjDump with flags |
| - /// NoRecords and NoAssembly set to false, and AddHeader set to |
| - /// true. |
| - bool runTest(const char* TestName, const uint64_t Munges[], |
| - size_t MungesSize) { |
| - return runTestWithFlags(TestName, Munges, MungesSize, true, false, false); |
| - } |
| + /// Creates MungedInput and DumpStream for running tests, based on |
| + /// given Munges. |
| + void setupTest( |
| + const char *TestName, const uint64_t Munges[], size_t MungesSize, |
| + bool AddHeader); |
| - bool runTestForAssembly(const char* TestName, const uint64_t Munges[], |
| - size_t MungesSize) { |
| - return runTestWithFlags(TestName, Munges, MungesSize, true, true, false); |
| - } |
| - |
| - bool runTestForErrors(const char* TestName, const uint64_t Munges[], |
| - size_t MungesSize) { |
| - return runTestWithFlags(TestName, Munges, MungesSize, true, true, true); |
| - } |
| + /// Cleans up state after a test. |
| + void cleanupTest(); |
| /// Returns the resulting string generated by NaClObjDump. |
|
jvoung (off chromium)
2014/12/03 19:43:46
cleanup for comment: this is now more generic than
Karl
2014/12/03 20:53:44
Done.
|
| const std::string &getTestResults() const { |
| @@ -165,7 +113,7 @@ public: |
| return getLinesWithTextMatch(Prefix, true); |
| } |
| -private: |
| +protected: |
| // The list of (base) records. |
| const uint64_t *Records; |
| // The number of (base) records. |
| @@ -178,6 +126,8 @@ private: |
| int SetBID; |
| // The results buffer of the last dump. |
| std::string DumpResults; |
| + // The memory buffer containing the munged input. |
| + MemoryBuffer *MungedInput; |
| // The stream containing errors and the objdump of the generated bitcode file. |
| raw_ostream *DumpStream; |
| // The bitstream writer to use to generate the bitcode file. |
| @@ -239,6 +189,98 @@ private: |
| size_t &Index); |
| }; |
| +/// Class to run tests for function llvm::NaClObjDump. |
| +class NaClObjDumpMunger : public NaClBitcodeMunger { |
| +public: |
| + |
| + /// Creates a bitcode munger, based on the given array of values. |
| + NaClObjDumpMunger(const uint64_t Records[], size_t RecordsSize, |
| + uint64_t RecordTerminator) |
| + : NaClBitcodeMunger(Records, RecordsSize, RecordTerminator) {} |
| + |
| + /// Runs function NaClObjDump on the sequence of records associated |
| + /// with the instance. The memory buffer containing the bitsequence |
| + /// associated with the record is automatically generated, and |
| + /// passed to NaClObjDump. TestName is the name associated with the |
| + /// memory buffer. If AddHeader is true, test assumes that the |
| + /// sequence of records doesn't contain a header record, and the |
| + /// test should add one. Arguments NoRecords and NoAssembly are |
| + /// passed to NaClObjDump. Returns true if test succeeds without |
| + /// errors. |
| + bool runTestWithFlags(const char *TestName, bool AddHeader, |
| + bool NoRecords, bool NoAssembly) { |
| + uint64_t NoMunges[] = {0}; |
| + return runTestWithFlags(TestName, NoMunges, 0, AddHeader, NoRecords, |
| + NoAssembly); |
| + } |
| + |
| + /// Same as above except it runs function NaClObjDump with flags |
| + /// NoRecords and NoAssembly set to false, and AddHeader set to true. |
| + bool runTest(const char *TestName) { |
| + return runTestWithFlags(TestName, true, false, false); |
| + } |
| + |
| + /// Same as runTest, but only print out assembly and errors. |
| + bool runTestForAssembly(const char *TestName) { |
| + return runTestWithFlags(TestName, true, true, false); |
| + } |
| + |
| + /// Same as runTest, but only generate error messages. |
| + bool runTestForErrors(const char *TestName) { |
| + return runTestWithFlags(TestName, true, true, true); |
| + } |
| + |
| + /// Runs function llvm::NaClObjDump on the sequence of records |
| + /// associated with the instance. Array Munges contains the sequence |
| + /// of edits to apply to the sequence of records when generating the |
| + /// bitsequence in a memory buffer. This generated bitsequence is |
| + /// then passed to NaClObjDump. TestName is the name associated |
| + /// with the memory buffer. Arguments NoRecords and NoAssembly are |
| + /// passed to NaClObjDump. Returns true if test succeeds without |
| + /// errors. |
| + bool runTestWithFlags(const char* TestName, const uint64_t Munges[], |
| + size_t MungesSize, bool AddHeader, |
| + bool NoRecords, bool NoAssembly); |
| + |
| + /// Same as above except it runs function NaClObjDump with flags |
| + /// NoRecords and NoAssembly set to false, and AddHeader set to |
| + /// true. |
| + bool runTest(const char* TestName, const uint64_t Munges[], |
| + size_t MungesSize) { |
| + return runTestWithFlags(TestName, Munges, MungesSize, true, false, false); |
| + } |
| + |
| + bool runTestForAssembly(const char* TestName, const uint64_t Munges[], |
| + size_t MungesSize) { |
| + return runTestWithFlags(TestName, Munges, MungesSize, true, true, false); |
| + } |
| + |
| + bool runTestForErrors(const char* TestName, const uint64_t Munges[], |
| + size_t MungesSize) { |
| + return runTestWithFlags(TestName, Munges, MungesSize, true, true, true); |
| + } |
| +}; |
| + |
| +// Class to run tests for function NaClParseBitcodeFile. |
| +// TODO(kschimpf) Capture verbose errors when parsing bitcode file. |
| +class NaClParseBitcodeMunger : public NaClBitcodeMunger { |
| +public: |
| + NaClParseBitcodeMunger(const uint64_t Records[], size_t RecordsSize, |
| + uint64_t RecordTerminator) |
| + : NaClBitcodeMunger(Records, RecordsSize, RecordTerminator) {} |
| + |
| + /// Runs function llvm::NaClParseBitcodeFile, and puts error messages |
| + /// into DumpResults. Returns true if parse is successful. |
| + bool runTest(const char* TestName, const uint64_t Munges[], |
| + size_t MungesSize, bool VerboseErrors); |
| + |
| + // Same as above, but without any edits. |
| + bool runTest(const char* TestName, bool VerboseErrors) { |
| + uint64_t NoMunges[] = {0}; |
| + return runTest(TestName, NoMunges, 0, VerboseErrors); |
| + } |
| +}; |
| + |
| } // end namespace llvm. |
| #endif // LLVM_BITCODE_NACL_NACLBITCODEMUNGE_H |