fixed internal mem trace with -T

This commit is contained in:
Christian Vogelgsang 2020-03-10 22:20:58 +01:00
parent f3b6ede154
commit aa7e265d9e
4 changed files with 48 additions and 1 deletions

4
.flake8 Normal file
View File

@ -0,0 +1,4 @@
[flake8]
max-line-length = 88
extend-ignore = E203

View File

@ -323,6 +323,10 @@ class Machine(object):
self.mem.w32(0, mem0)
self.mem.w32(4, mem4)
def set_mem(self, mem):
"""replace the memory instance with a wrapped one, e.g. for tracing"""
self.mem = mem
def set_cycles_per_run(self, num):
self.cycles_per_run = num

View File

@ -7,6 +7,43 @@ class TraceMemory:
self.mem = mem
self.trace_mgr = trace_mgr
def cleanup(self):
self.mem.cleanup()
def get_ram_size_kib(self):
return self.mem.get_ram_size_kib()
def get_ram_size_bytes(self):
return self.mem.get_ram_size_bytes()
def reserve_special_range(self, num_pages=1):
return self.mem.reserve_special_range(num_pages)
def set_special_range_read_func(self, page_addr, width, func):
return self.mem.set_special_range_read_func(page_addr, width, func)
def set_special_range_write_func(self, page_addr, width, func):
return self.mem.set_special_range_write_func(page_addr, width, func)
def set_special_range_read_funcs(
self, addr, num_pages=1, r8=None, r16=None, r32=None
):
return self.mem.set_special_range_read_funcs(addr, num_pages, r8, r16, r32)
def set_special_range_write_funcs(
self, addr, num_pages=1, w8=None, w16=None, w32=None
):
return self.mem.set_special_range_write_funcs(addr, num_pages, w8, w16, w32)
def set_trace_mode(self, on):
return self.mem.set_trace_mode(on)
def set_trace_func(self, func):
return self.mem.set_trace_func(func)
def set_invalid_func(self, func):
return self.mem.set_invalid_func(func)
# memory access
def r32(self, addr):
val = self.mem.r32(addr)

View File

@ -34,6 +34,8 @@ class TraceManager(object):
self.mem_tracer = TraceMemory(mem, self)
if not log_mem_int.isEnabledFor(logging.INFO):
log_mem_int.setLevel(logging.INFO)
# replace machine mem with trace memory
self.machine.set_mem(self.mem_tracer)
def setup_cpu_mem_trace(self):
self.machine.set_cpu_mem_trace_hook(self.trace_cpu_mem)
@ -126,7 +128,7 @@ class TraceManager(object):
return sym, src
def _trace_mem(self, log, mode, width, addr, value, text="", addon=""):
val = self.trace_val_str[width] % value
val = self.trace_val_str[width] % int(value)
info, label = self._get_mem_info(addr)
if text == "" and addon == "" and label is not None:
text, addon = self._get_label_extra(label, mode, addr, width, value)