from collections import namedtuple
from copy import deepcopy
from functools import wraps
+from tempfile import NamedTemporaryFile
+import os
from nmigen.sim import Settle
from openpower.consts import (MSRb, PIb, # big-endian (PowerISA versions)
bigendian=False,
mmu=False,
icachemmu=False,
- initial_fpscr=0):
+ initial_fpscr=0,
+ tracefile=None):
+ if tracefile is None:
+ keep = bool(os.environ.get("TRACEFILE", ""))
+ tracefile = NamedTemporaryFile(mode="w", encoding="UTF-8",
+ prefix="trace_", suffix=".trace", delete=not keep)
+ log("tracefile", tracefile.name,
+ ("(permanent)" if keep else "(transient)"))
+ if not callable(getattr(tracefile, "write", None)):
+ raise ValueError(tracefile)
+ self.tracefile = tracefile
self.bigendian = bigendian
self.halted = False
raise e # ... re-raise
# append the log file
- with open("/tmp/insnlog.txt", "a+") as f:
- f.write(" ".join(self.insnlog)+"\n")
+ self.tracefile.write(" ".join(self.insnlog)+"\n")
log("gprs after code", code)
self.gpr.dump()