| 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 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 132 // The stream containing errors and the objdump of the generated bitcode file. | 132 // The stream containing errors and the objdump of the generated bitcode file. |
| 133 raw_ostream *DumpStream; | 133 raw_ostream *DumpStream; |
| 134 // The bitstream writer to use to generate the bitcode file. | 134 // The bitstream writer to use to generate the bitcode file. |
| 135 NaClBitstreamWriter *Writer; | 135 NaClBitstreamWriter *Writer; |
| 136 // True if any errors were reported. | 136 // True if any errors were reported. |
| 137 bool FoundErrors; | 137 bool FoundErrors; |
| 138 // The buffer to hold the generated fatal message. | 138 // The buffer to hold the generated fatal message. |
| 139 std::string FatalBuffer; | 139 std::string FatalBuffer; |
| 140 // The stream to write the fatal message to. | 140 // The stream to write the fatal message to. |
| 141 raw_string_ostream FatalStream; | 141 raw_string_ostream FatalStream; |
| 142 // The stack of maximum abbreviation indices allowed by block enter record. |
| 143 SmallVector<uint64_t, 3> AbbrevIndexLimitStack; |
| 142 | 144 |
| 143 // Records that an error occurred, and returns stream to print error | 145 // Records that an error occurred, and returns stream to print error |
| 144 // message to. | 146 // message to. |
| 145 raw_ostream &Error() { | 147 raw_ostream &Error() { |
| 146 FoundErrors = true; | 148 FoundErrors = true; |
| 147 return *DumpStream << "Error: "; | 149 return *DumpStream << "Error: "; |
| 148 } | 150 } |
| 149 | 151 |
| 150 // Returns stream to print fatal error message to. | 152 // Returns stream to print fatal error message to. |
| 151 // Note: Once the fatal error message has been dumped to the stream, | 153 // Note: Once the fatal error message has been dumped to the stream, |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 190 size_t &Index); | 192 size_t &Index); |
| 191 }; | 193 }; |
| 192 | 194 |
| 193 /// Class to run tests for function llvm::NaClObjDump. | 195 /// Class to run tests for function llvm::NaClObjDump. |
| 194 class NaClObjDumpMunger : public NaClBitcodeMunger { | 196 class NaClObjDumpMunger : public NaClBitcodeMunger { |
| 195 public: | 197 public: |
| 196 | 198 |
| 197 /// Creates a bitcode munger, based on the given array of values. | 199 /// Creates a bitcode munger, based on the given array of values. |
| 198 NaClObjDumpMunger(const uint64_t Records[], size_t RecordsSize, | 200 NaClObjDumpMunger(const uint64_t Records[], size_t RecordsSize, |
| 199 uint64_t RecordTerminator) | 201 uint64_t RecordTerminator) |
| 200 : NaClBitcodeMunger(Records, RecordsSize, RecordTerminator) {} | 202 : NaClBitcodeMunger(Records, RecordsSize, RecordTerminator), |
| 203 RunAsDeathTest(false) {} |
| 201 | 204 |
| 202 /// Runs function NaClObjDump on the sequence of records associated | 205 /// Runs function NaClObjDump on the sequence of records associated |
| 203 /// with the instance. The memory buffer containing the bitsequence | 206 /// with the instance. The memory buffer containing the bitsequence |
| 204 /// associated with the record is automatically generated, and | 207 /// associated with the record is automatically generated, and |
| 205 /// passed to NaClObjDump. TestName is the name associated with the | 208 /// passed to NaClObjDump. TestName is the name associated with the |
| 206 /// memory buffer. If AddHeader is true, test assumes that the | 209 /// memory buffer. If AddHeader is true, test assumes that the |
| 207 /// sequence of records doesn't contain a header record, and the | 210 /// sequence of records doesn't contain a header record, and the |
| 208 /// test should add one. Arguments NoRecords and NoAssembly are | 211 /// test should add one. Arguments NoRecords and NoAssembly are |
| 209 /// passed to NaClObjDump. Returns true if test succeeds without | 212 /// passed to NaClObjDump. Returns true if test succeeds without |
| 210 /// errors. | 213 /// errors. |
| 211 bool runTestWithFlags(const char *TestName, bool AddHeader, | 214 bool runTestWithFlags(const char *TestName, bool AddHeader, |
| 212 bool NoRecords, bool NoAssembly) { | 215 bool NoRecords, bool NoAssembly) { |
| 213 uint64_t NoMunges[] = {0}; | 216 uint64_t NoMunges[] = {0}; |
| 214 return runTestWithFlags(TestName, NoMunges, 0, AddHeader, NoRecords, | 217 return runTestWithFlags(TestName, NoMunges, 0, AddHeader, NoRecords, |
| 215 NoAssembly); | 218 NoAssembly); |
| 216 } | 219 } |
| 217 | 220 |
| 221 /// Returns true if running as death test. |
| 222 bool getRunAsDeathTest() const { |
| 223 return RunAsDeathTest; |
| 224 } |
| 225 |
| 226 /// Sets death test flag. When true, output will be redirected to |
| 227 /// the errs() (rather than buffered) so that the test can be |
| 228 /// debugged. |
| 229 void setRunAsDeathTest(bool NewValue) { |
| 230 RunAsDeathTest = NewValue; |
| 231 } |
| 232 |
| 218 /// Same as above except it runs function NaClObjDump with flags | 233 /// Same as above except it runs function NaClObjDump with flags |
| 219 /// NoRecords and NoAssembly set to false, and AddHeader set to true. | 234 /// NoRecords and NoAssembly set to false, and AddHeader set to true. |
| 220 bool runTest(const char *TestName) { | 235 bool runTest(const char *TestName) { |
| 221 return runTestWithFlags(TestName, true, false, false); | 236 return runTestWithFlags(TestName, true, false, false); |
| 222 } | 237 } |
| 223 | 238 |
| 224 /// Same as runTest, but only print out assembly and errors. | 239 /// Same as runTest, but only print out assembly and errors. |
| 225 bool runTestForAssembly(const char *TestName) { | 240 bool runTestForAssembly(const char *TestName) { |
| 226 return runTestWithFlags(TestName, true, true, false); | 241 return runTestWithFlags(TestName, true, true, false); |
| 227 } | 242 } |
| (...skipping 25 matching lines...) Expand all Loading... |
| 253 | 268 |
| 254 bool runTestForAssembly(const char* TestName, const uint64_t Munges[], | 269 bool runTestForAssembly(const char* TestName, const uint64_t Munges[], |
| 255 size_t MungesSize) { | 270 size_t MungesSize) { |
| 256 return runTestWithFlags(TestName, Munges, MungesSize, true, true, false); | 271 return runTestWithFlags(TestName, Munges, MungesSize, true, true, false); |
| 257 } | 272 } |
| 258 | 273 |
| 259 bool runTestForErrors(const char* TestName, const uint64_t Munges[], | 274 bool runTestForErrors(const char* TestName, const uint64_t Munges[], |
| 260 size_t MungesSize) { | 275 size_t MungesSize) { |
| 261 return runTestWithFlags(TestName, Munges, MungesSize, true, true, true); | 276 return runTestWithFlags(TestName, Munges, MungesSize, true, true, true); |
| 262 } | 277 } |
| 278 |
| 279 private: |
| 280 // Flag to redirect dump stream if running death test. |
| 281 bool RunAsDeathTest; |
| 282 |
| 263 }; | 283 }; |
| 264 | 284 |
| 265 // Class to run tests for function NaClParseBitcodeFile. | 285 // Class to run tests for function NaClParseBitcodeFile. |
| 266 class NaClParseBitcodeMunger : public NaClBitcodeMunger { | 286 class NaClParseBitcodeMunger : public NaClBitcodeMunger { |
| 267 public: | 287 public: |
| 268 NaClParseBitcodeMunger(const uint64_t Records[], size_t RecordsSize, | 288 NaClParseBitcodeMunger(const uint64_t Records[], size_t RecordsSize, |
| 269 uint64_t RecordTerminator) | 289 uint64_t RecordTerminator) |
| 270 : NaClBitcodeMunger(Records, RecordsSize, RecordTerminator) {} | 290 : NaClBitcodeMunger(Records, RecordsSize, RecordTerminator) {} |
| 271 | 291 |
| 272 /// Runs function llvm::NaClParseBitcodeFile, and puts error messages | 292 /// Runs function llvm::NaClParseBitcodeFile, and puts error messages |
| (...skipping 20 matching lines...) Expand all Loading... |
| 293 | 313 |
| 294 bool runTest(const char* TestName) { | 314 bool runTest(const char* TestName) { |
| 295 uint64_t NoMunges[] = {0}; | 315 uint64_t NoMunges[] = {0}; |
| 296 return runTest(TestName, NoMunges, 0); | 316 return runTest(TestName, NoMunges, 0); |
| 297 } | 317 } |
| 298 }; | 318 }; |
| 299 | 319 |
| 300 } // end namespace llvm. | 320 } // end namespace llvm. |
| 301 | 321 |
| 302 #endif // LLVM_BITCODE_NACL_NACLBITCODEMUNGE_H | 322 #endif // LLVM_BITCODE_NACL_NACLBITCODEMUNGE_H |
| OLD | NEW |