6da45e7f26
(1) Introduce tracegen.py, a script that invokes the emulator (built with TraceGenConfig), sending a SIGTERM once all cores are finished. (2) Update toaxe.py to gather some statistics about the trace. (3) Introduce tracestats.py, which displays the stats in a useful way. (4) Introduce tracegen+check.py, a top-level script that generates traces, checks them, and emits stats. If this commit is pulled, it should be done after pulling my latest groundtest commit.
63 lines
1.6 KiB
Python
Executable File
63 lines
1.6 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
# This file was originally written by Matthew Naylor, University of
|
|
# Cambridge.
|
|
#
|
|
# This software was partly developed by the University of Cambridge
|
|
# Computer Laboratory under DARPA/AFRL contract FA8750-10-C-0237
|
|
# ("CTSRD"), as part of the DARPA CRASH research programme.
|
|
#
|
|
# This software was partly developed by the University of Cambridge
|
|
# Computer Laboratory under DARPA/AFRL contract FA8750-11-C-0249
|
|
# ("MRC2"), as part of the DARPA MRC research programme.
|
|
#
|
|
# This software was partly developed by the University of Cambridge
|
|
# Computer Laboratory as part of the Rigorous Engineering of
|
|
# Mainstream Systems (REMS) project, funded by EPSRC grant
|
|
# EP/K008528/1.
|
|
|
|
# -------
|
|
# Outline
|
|
# -------
|
|
|
|
# Usage:
|
|
#
|
|
# tracegen.py EMULATOR SEED
|
|
#
|
|
# This script generates a trace using the given emulator (built
|
|
# with CONFIG=TraceGenConfig). It waits until all cores have
|
|
# completed trace generation before terminating the emulator.
|
|
|
|
import sys
|
|
import subprocess
|
|
import re
|
|
|
|
def main():
|
|
if len(sys.argv) != 3:
|
|
sys.stderr.write("Usage: tracegen.py EMULATOR SEED\n")
|
|
sys.exit(-1)
|
|
|
|
p = subprocess.Popen([sys.argv[1], "+verbose", "-s" + sys.argv[2]],
|
|
stderr=subprocess.PIPE, stdout=subprocess.PIPE)
|
|
if p == None:
|
|
sys.stderr.write("File not found: " + sys.argv[1] + "\n")
|
|
sys.exit(-1)
|
|
|
|
numFinished = 0
|
|
while True:
|
|
line = p.stderr.readline()
|
|
if line[0:9] == "FINISHED ":
|
|
total = int(line[9:-1])
|
|
numFinished = numFinished + 1
|
|
if numFinished == total:
|
|
break
|
|
else:
|
|
print line,
|
|
|
|
p.terminate()
|
|
|
|
try:
|
|
main()
|
|
except KeyboardInterrupt:
|
|
sys.exit(-1)
|