isa/caller.py: support per-instance trace file
authorDmitry Selyutin <ghostmansd@gmail.com>
Sat, 13 May 2023 19:36:28 +0000 (22:36 +0300)
committerDmitry Selyutin <ghostmansd@gmail.com>
Mon, 15 May 2023 18:49:41 +0000 (21:49 +0300)
src/openpower/decoder/isa/caller.py

index a038a3af83602de5ea6b948f950702799af24c6c..d80db2fd3bbc022314f8b658cf398198588e6fae 100644 (file)
@@ -16,6 +16,8 @@ related bugs:
 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)
@@ -1146,7 +1148,17 @@ class ISACaller(ISACallerHelper, ISAFPHelpers, StepLoop):
                  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
@@ -1753,8 +1765,7 @@ class ISACaller(ISACallerHelper, ISAFPHelpers, StepLoop):
             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()