| OLD | NEW |
| 1 //===- NaClBitcodeMunge.h - Bitcode Munger ----------------------*- C++ -*-===// | 1 //===- NaClBitcodeMunge.h - Bitcode Munger ----------------------*- C++ -*-===// |
| 2 // | 2 // |
| 3 // The LLVM Compiler Infrastructure | 3 // The LLVM Compiler Infrastructure |
| 4 // | 4 // |
| 5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
| 6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
| 7 // | 7 // |
| 8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
| 9 // | 9 // |
| 10 // Test harness for generating a PNaCl bitcode memory buffer from | 10 // Test harness for generating a PNaCl bitcode memory buffer from |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 | 67 |
| 68 /// Sets death test flag. When true, output will be redirected to | 68 /// Sets death test flag. When true, output will be redirected to |
| 69 /// the errs() (rather than buffered) so that the test can be | 69 /// the errs() (rather than buffered) so that the test can be |
| 70 /// debugged. | 70 /// debugged. |
| 71 void setRunAsDeathTest(bool NewValue) { | 71 void setRunAsDeathTest(bool NewValue) { |
| 72 RunAsDeathTest = NewValue; | 72 RunAsDeathTest = NewValue; |
| 73 } | 73 } |
| 74 | 74 |
| 75 /// Creates MungedInput and DumpStream for running tests, based on | 75 /// Creates MungedInput and DumpStream for running tests, based on |
| 76 /// given Munges. Returns true if able to set up test. | 76 /// given Munges. Returns true if able to set up test. |
| 77 bool setupTest( | 77 bool setupTest(const uint64_t Munges[], size_t MungesSize, bool AddHeader); |
| 78 const char *TestName, const uint64_t Munges[], size_t MungesSize, | 78 |
| 79 bool AddHeader); | 79 // TODO(kschimpf): The following function is deprecated and only |
| 80 // provided until subzero is updated to use the new API that no |
| 81 // longer uses test names. |
| 82 bool setupTest(const char *, const uint64_t Munges[], size_t MungesSize, |
| 83 bool AddHeader) { |
| 84 return setupTest(Munges, MungesSize, AddHeader); |
| 85 } |
| 80 | 86 |
| 81 /// Cleans up state after a test. Returns true if no errors found. | 87 /// Cleans up state after a test. Returns true if no errors found. |
| 82 bool cleanupTest(); | 88 bool cleanupTest(); |
| 83 | 89 |
| 84 /// Returns the resulting string generated by the corresponding test. | 90 /// Returns the resulting string generated by the corresponding test. |
| 85 const std::string &getTestResults() const { | 91 const std::string &getTestResults() const { |
| 86 return DumpResults; | 92 return DumpResults; |
| 87 } | 93 } |
| 88 | 94 |
| 89 /// Returns the lines containing the given Substring, from the | 95 /// Returns the lines containing the given Substring, from the |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 163 | 169 |
| 164 /// Class to run tests writing munged bitcode. | 170 /// Class to run tests writing munged bitcode. |
| 165 class NaClWriteMunger : public NaClBitcodeMunger { | 171 class NaClWriteMunger : public NaClBitcodeMunger { |
| 166 public: | 172 public: |
| 167 NaClWriteMunger(const uint64_t Records[], size_t RecordsSize, | 173 NaClWriteMunger(const uint64_t Records[], size_t RecordsSize, |
| 168 uint64_t RecordTerminator) | 174 uint64_t RecordTerminator) |
| 169 : NaClBitcodeMunger(Records, RecordsSize, RecordTerminator) {} | 175 : NaClBitcodeMunger(Records, RecordsSize, RecordTerminator) {} |
| 170 | 176 |
| 171 /// Writes munged bitcode and puts error messages into DumpResults. | 177 /// Writes munged bitcode and puts error messages into DumpResults. |
| 172 /// Returns true if successful. | 178 /// Returns true if successful. |
| 173 bool runTest(const char* TestName, const uint64_t Munges[], | 179 bool runTest(const uint64_t Munges[], size_t MungesSize); |
| 174 size_t MungesSize); | |
| 175 | |
| 176 /// Same as above, but without test name. | |
| 177 bool runTest(const uint64_t Munges[], size_t MungesSize) { | |
| 178 return runTest("Test", Munges, MungesSize); | |
| 179 } | |
| 180 | 180 |
| 181 /// Same as above, but without any edits. | 181 /// Same as above, but without any edits. |
| 182 bool runTest(const char* TestName) { | 182 bool runTest() { |
| 183 uint64_t NoMunges[] = {0}; | 183 uint64_t NoMunges[] = {0}; |
| 184 return runTest(TestName, NoMunges, 0); | 184 return runTest(NoMunges, 0); |
| 185 } | |
| 186 | |
| 187 /// Same as above, but without test name. | |
| 188 bool runTest() { | |
| 189 return runTest("Test"); | |
| 190 } | 185 } |
| 191 }; | 186 }; |
| 192 | 187 |
| 193 /// Class to run tests for function llvm::NaClObjDump. | 188 /// Class to run tests for function llvm::NaClObjDump. |
| 194 class NaClObjDumpMunger : public NaClBitcodeMunger { | 189 class NaClObjDumpMunger : public NaClBitcodeMunger { |
| 195 public: | 190 public: |
| 196 | 191 |
| 197 /// Creates a bitcode munger, based on the given array of values. | 192 /// Creates a bitcode munger, based on the given array of values. |
| 198 NaClObjDumpMunger(const uint64_t Records[], size_t RecordsSize, | 193 NaClObjDumpMunger(const uint64_t Records[], size_t RecordsSize, |
| 199 uint64_t RecordTerminator) | 194 uint64_t RecordTerminator) |
| 200 : NaClBitcodeMunger(Records, RecordsSize, RecordTerminator) {} | 195 : NaClBitcodeMunger(Records, RecordsSize, RecordTerminator) {} |
| 201 | 196 |
| 202 /// Runs function NaClObjDump on the sequence of records associated | 197 /// Runs function NaClObjDump on the sequence of records associated |
| 203 /// with the instance. The memory buffer containing the bitsequence | 198 /// with the instance. The memory buffer containing the bitsequence |
| 204 /// associated with the record is automatically generated, and | 199 /// associated with the record is automatically generated, and |
| 205 /// passed to NaClObjDump. TestName is the name associated with the | 200 /// passed to NaClObjDump. If AddHeader is true, test assumes that the |
| 206 /// memory buffer. If AddHeader is true, test assumes that the | |
| 207 /// sequence of records doesn't contain a header record, and the | 201 /// sequence of records doesn't contain a header record, and the |
| 208 /// test should add one. Arguments NoRecords and NoAssembly are | 202 /// test should add one. Arguments NoRecords and NoAssembly are |
| 209 /// passed to NaClObjDump. Returns true if test succeeds without | 203 /// passed to NaClObjDump. Returns true if test succeeds without |
| 210 /// errors. | 204 /// errors. |
| 211 bool runTestWithFlags(const char *TestName, bool AddHeader, | 205 bool runTestWithFlags(bool AddHeader, bool NoRecords, bool NoAssembly) { |
| 212 bool NoRecords, bool NoAssembly) { | |
| 213 uint64_t NoMunges[] = {0}; | 206 uint64_t NoMunges[] = {0}; |
| 214 return runTestWithFlags(TestName, NoMunges, 0, AddHeader, NoRecords, | 207 return runTestWithFlags(NoMunges, 0, AddHeader, NoRecords, NoAssembly); |
| 215 NoAssembly); | |
| 216 } | 208 } |
| 217 | 209 |
| 218 /// Same as above except it runs function NaClObjDump with flags | 210 /// Same as above except it runs function NaClObjDump with flags |
| 219 /// NoRecords and NoAssembly set to false, and AddHeader set to true. | 211 /// NoRecords and NoAssembly set to false, and AddHeader set to true. |
| 220 bool runTest(const char *TestName) { | 212 bool runTest() { |
| 221 return runTestWithFlags(TestName, true, false, false); | 213 return runTestWithFlags(true, false, false); |
| 222 } | 214 } |
| 223 | 215 |
| 224 /// Same as above but without test name. | 216 // TODO(kschimpf): The following function is deprecated and only |
| 225 bool runTest() { | 217 // provided until subzero is updated to use the new API that no |
| 226 return runTest("Test"); | 218 // longer uses test names. |
| 219 bool runTest(const char *) { |
| 220 return runTest(); |
| 227 } | 221 } |
| 228 | 222 |
| 229 /// Same as above, but only print out assembly and errors. | 223 /// Same as above, but only print out assembly and errors. |
| 230 bool runTestForAssembly(const char *TestName) { | 224 bool runTestForAssembly() { |
| 231 return runTestWithFlags(TestName, true, true, false); | 225 return runTestWithFlags(true, true, false); |
| 232 } | 226 } |
| 233 | |
| 234 /// Same as above, but only generate error messages. | 227 /// Same as above, but only generate error messages. |
| 235 bool runTestForErrors(const char *TestName) { | 228 bool runTestForErrors() { |
| 236 return runTestWithFlags(TestName, true, true, true); | 229 return runTestWithFlags(true, true, true); |
| 237 } | 230 } |
| 238 | 231 |
| 239 /// Runs function llvm::NaClObjDump on the sequence of records | 232 /// Runs function llvm::NaClObjDump on the sequence of records |
| 240 /// associated with the instance. Array Munges contains the sequence | 233 /// associated with the instance. Array Munges contains the sequence |
| 241 /// of edits to apply to the sequence of records when generating the | 234 /// of edits to apply to the sequence of records when generating the |
| 242 /// bitsequence in a memory buffer. This generated bitsequence is | 235 /// bitsequence in a memory buffer. This generated bitsequence is |
| 243 /// then passed to NaClObjDump. TestName is the name associated | 236 /// then passed to NaClObjDump. TestName is the name associated |
| 244 /// with the memory buffer. Arguments NoRecords and NoAssembly are | 237 /// with the memory buffer. Arguments NoRecords and NoAssembly are |
| 245 /// passed to NaClObjDump. Returns true if test succeeds without | 238 /// passed to NaClObjDump. Returns true if test succeeds without |
| 246 /// errors. | 239 /// errors. |
| 247 bool runTestWithFlags(const char* TestName, const uint64_t Munges[], | 240 bool runTestWithFlags(const uint64_t Munges[], size_t MungesSize, |
| 248 size_t MungesSize, bool AddHeader, | 241 bool AddHeader, bool NoRecords, bool NoAssembly); |
| 249 bool NoRecords, bool NoAssembly); | |
| 250 | 242 |
| 251 /// Same as above except it runs function NaClObjDump with flags | 243 /// Same as above except it runs function NaClObjDump with flags |
| 252 /// NoRecords and NoAssembly set to false, and AddHeader set to | 244 /// NoRecords and NoAssembly set to false, and AddHeader set to |
| 253 /// true. | 245 /// true. |
| 254 bool runTest(const char* TestName, const uint64_t Munges[], | 246 bool runTest(const uint64_t Munges[], size_t MungesSize) { |
| 255 size_t MungesSize) { | 247 return runTestWithFlags(Munges, MungesSize, true, false, false); |
| 256 return runTestWithFlags(TestName, Munges, MungesSize, true, false, false); | |
| 257 } | 248 } |
| 258 | 249 |
| 259 bool runTest(const uint64_t Munges[], size_t MungesSize) { | 250 bool runTestForAssembly(const uint64_t Munges[], size_t MungesSize) { |
| 260 return runTest("Test", Munges, MungesSize); | 251 return runTestWithFlags(Munges, MungesSize, true, true, false); |
| 261 } | 252 } |
| 262 | 253 |
| 263 bool runTestForAssembly(const char* TestName, const uint64_t Munges[], | 254 // TODO(kschimpf): The following function is deprecated and only |
| 255 // provided until subzero is updated to use the new API that no |
| 256 // longer uses test names. |
| 257 bool runTestForAssembly(const char *, const uint64_t Munges[], |
| 264 size_t MungesSize) { | 258 size_t MungesSize) { |
| 265 return runTestWithFlags(TestName, Munges, MungesSize, true, true, false); | 259 return runTestForAssembly(Munges, MungesSize); |
| 266 } | 260 } |
| 267 | 261 |
| 268 bool runTestForErrors(const char* TestName, const uint64_t Munges[], | 262 |
| 269 size_t MungesSize) { | 263 bool runTestForErrors(const uint64_t Munges[], size_t MungesSize) { |
| 270 return runTestWithFlags(TestName, Munges, MungesSize, true, true, true); | 264 return runTestWithFlags(Munges, MungesSize, true, true, true); |
| 271 } | 265 } |
| 272 }; | 266 }; |
| 273 | 267 |
| 274 // Class to run tests for function NaClParseBitcodeFile. | 268 // Class to run tests for function NaClParseBitcodeFile. |
| 275 class NaClParseBitcodeMunger : public NaClBitcodeMunger { | 269 class NaClParseBitcodeMunger : public NaClBitcodeMunger { |
| 276 public: | 270 public: |
| 277 NaClParseBitcodeMunger(const uint64_t Records[], size_t RecordsSize, | 271 NaClParseBitcodeMunger(const uint64_t Records[], size_t RecordsSize, |
| 278 uint64_t RecordTerminator) | 272 uint64_t RecordTerminator) |
| 279 : NaClBitcodeMunger(Records, RecordsSize, RecordTerminator) {} | 273 : NaClBitcodeMunger(Records, RecordsSize, RecordTerminator) {} |
| 280 | 274 |
| 281 /// Runs function llvm::NaClParseBitcodeFile, and puts error messages | 275 /// Runs function llvm::NaClParseBitcodeFile, and puts error messages |
| 282 /// into DumpResults. Returns true if parse is successful. | 276 /// into DumpResults. Returns true if parse is successful. |
| 283 bool runTest(const char* TestName, const uint64_t Munges[], | 277 bool runTest(const uint64_t Munges[], size_t MungesSize, bool VerboseErrors); |
| 284 size_t MungesSize, bool VerboseErrors); | |
| 285 | |
| 286 /// Same as above, but without test name. | |
| 287 bool runTest(const uint64_t Munges[], size_t MungesSize, bool VerboseErrors) { | |
| 288 return runTest("Test", Munges, MungesSize, VerboseErrors); | |
| 289 } | |
| 290 | 278 |
| 291 // Same as above, but without any edits. | 279 // Same as above, but without any edits. |
| 292 bool runTest(const char* TestName, bool VerboseErrors) { | 280 bool runTest(bool VerboseErrors) { |
| 293 uint64_t NoMunges[] = {0}; | 281 uint64_t NoMunges[] = {0}; |
| 294 return runTest(TestName, NoMunges, 0, VerboseErrors); | 282 return runTest(NoMunges, 0, VerboseErrors); |
| 295 } | 283 } |
| 296 }; | 284 }; |
| 297 | 285 |
| 298 // Class to run tests for NaClBitcodeCompressor.compress(). | 286 // Class to run tests for NaClBitcodeCompressor.compress(). |
| 299 class NaClCompressMunger : public NaClBitcodeMunger { | 287 class NaClCompressMunger : public NaClBitcodeMunger { |
| 300 public: | 288 public: |
| 301 NaClCompressMunger(const uint64_t Records[], size_t RecordsSize, | 289 NaClCompressMunger(const uint64_t Records[], size_t RecordsSize, |
| 302 uint64_t RecordTerminator) | 290 uint64_t RecordTerminator) |
| 303 : NaClBitcodeMunger(Records, RecordsSize, RecordTerminator) {} | 291 : NaClBitcodeMunger(Records, RecordsSize, RecordTerminator) {} |
| 304 | 292 |
| 305 bool runTest(const char* TestName, const uint64_t Munges[], | 293 bool runTest(const uint64_t Munges[], size_t MungesSize); |
| 306 size_t MungesSize); | |
| 307 | 294 |
| 308 bool runTest(const char* TestName) { | 295 bool runTest() { |
| 309 uint64_t NoMunges[] = {0}; | 296 uint64_t NoMunges[] = {0}; |
| 310 return runTest(TestName, NoMunges, 0); | 297 return runTest(NoMunges, 0); |
| 311 } | 298 } |
| 312 }; | 299 }; |
| 313 | 300 |
| 314 } // end namespace llvm. | 301 } // end namespace llvm. |
| 315 | 302 |
| 316 #endif // LLVM_BITCODE_NACL_NACLBITCODEMUNGE_H | 303 #endif // LLVM_BITCODE_NACL_NACLBITCODEMUNGE_H |
| OLD | NEW |