| 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..6b45509738a65eb7f4b2ba42fc34843b4512da02 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,73 +83,20 @@ 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);
|
| - }
|
| + /// Cleans up state after a test.
|
| + void cleanupTest();
|
|
|
| - bool runTestForErrors(const char* TestName, const uint64_t Munges[],
|
| - size_t MungesSize) {
|
| - return runTestWithFlags(TestName, Munges, MungesSize, true, true, true);
|
| - }
|
| -
|
| - /// Returns the resulting string generated by NaClObjDump.
|
| + /// Returns the resulting string generated by the corresponding test.
|
| const std::string &getTestResults() const {
|
| return DumpResults;
|
| }
|
| @@ -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,97 @@ 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.
|
| +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
|
|
|