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

Unified Diff: src/trusted/validator_ragel/unreviewed/parse_hex.py

Issue 9423045: validator_ragel: Add ncval tests from the old validator (Closed) Base URL: svn://svn.chromium.org/native_client/trunk/src/native_client
Patch Set: some more test classification Created 8 years, 10 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
Index: src/trusted/validator_ragel/unreviewed/parse_hex.py
diff --git a/src/trusted/validator_ragel/unreviewed/parse_hex.py b/src/trusted/validator_ragel/unreviewed/parse_hex.py
new file mode 100644
index 0000000000000000000000000000000000000000..9bb90a366197f2e7e72e2da82729f30536f69f2b
--- /dev/null
+++ b/src/trusted/validator_ragel/unreviewed/parse_hex.py
@@ -0,0 +1,84 @@
+#!/usr/bin/python
+# Copyright (c) 2012 The Native Client Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Converts outputs from the old validator into a list of general errors.
+
+The outputs then would be compared for exact match with what the
+script run_ncval_tests.py outputs for the test.
+
+Works under assumption that the corresponding input files (*.hex) maintain a
+separation of instructions: one instruction per line in .hex file. We could get
+the same information from the validator, but, luckily, we do not have to do
+that.
+"""
+
+import re
+import sys
+
+import run_ncval_tests
+
+
+def WriteFile(filename, data):
+ fh = open(filename, "w")
+ try:
+ fh.write(data)
+ finally:
+ fh.close()
+
+
+def Main(argv):
+ argv = argv[1:]
+ offset = None
+ for arg in argv:
+ assert(arg[-5:] == '.rval')
+
+ # Parse the golden file 1st time, find bundle_crosses.
+ bundle_crosses = []
+ for line in open(arg, 'r').readlines():
+ bundle_error_m = re.match(
+ r'VALIDATOR: ERROR: ([0-9a-zA-Z]+): Bad basic block alignment', line)
+ if bundle_error_m:
+ bundle_crosses.append(int(bundle_error_m.group(1), 16))
+
+ # Find offsets for all instructions that cross a bundle.
+ err_offsets = {}
+ insts = run_ncval_tests.InstByteSequence()
+ insts.Parse(arg[:-5] + '.hex')
+ for bundle_offset in set(bundle_crosses):
+ off = bundle_offset - 1
+ while off >= 0:
+ if insts.HasOffset(off):
+ err_offsets[off] = ['crosses boundary']
+ break
+ off -= 1
+
+ # Parse the golden file 2nd time. Find other offsets that cause errors. An
+ # error report takes 2 sequential lines.
+ seen_offset = False
+ for line in open(arg, 'r').readlines():
+ ln = line.rstrip()
+ off_m = re.match(r'VALIDATOR: ([0-9a-z]+):', ln)
+ if off_m:
+ seen_offset = True
+ prev_offset = offset
+ offset = int(off_m.group(1), 16)
+ continue
+ val_error_m = re.match(r'VALIDATOR: ERROR:', ln)
+ if val_error_m and seen_offset and prev_offset != offset:
+ err_offsets.setdefault(offset, []).append('validation error')
+ seen_offset = False
+
+ # Output the error messages in offset order.
+ golden_text = ''
+ for off, msg_lst in sorted(err_offsets.iteritems()):
+ for msg in msg_lst:
+ golden_text += 'offset 0x%x: %s\n' % (off, msg)
+ filename = arg[:-5] + '.val.ref'
+ print 'writing file: %s' % filename
+ WriteFile(filename, golden_text)
+
+
+if __name__ == '__main__':
+ sys.exit(Main(sys.argv))
« no previous file with comments | « src/trusted/validator_ragel/unreviewed/golden/x87.val.ref ('k') | src/trusted/validator_ragel/unreviewed/run_ncval_tests.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698