Admin Panel
import logging
from amitools.vamos.trace import TraceManager
from amitools.vamos.label import *
from amitools.vamos.machine import *
from amitools.vamos.astructs import NodeStruct, LibraryStruct
from amitools.vamos.cfgcore import ConfigDict
from amitools.fd import read_lib_fd
def setup_tm():
machine = MockMachine()
lm = machine.get_label_mgr()
tm = TraceManager(machine)
lm.add_label(LabelRange("range", 0x100, 0x100))
lm.add_label(LabelStruct("node", 0x200, NodeStruct))
lm.add_label(LabelLib("fake.library", 0x320, 0x20,
LibraryStruct.get_size(), LibraryStruct))
fd = read_lib_fd("vamostest.library")
neg_size = fd.get_neg_size()
lm.add_label(LabelLib("vamostest.library", 0x400, neg_size,
LibraryStruct.get_size(), LibraryStruct, fd))
return tm
def check_log(chn, records):
lvl = logging.INFO
assert records == [
(chn, lvl, 'R(4): 000000: 00000000 [??] '),
(chn, lvl, 'W(2): 000004: 0017 [??] '),
(chn, lvl, 'R(4): 000100: 00000000 [@000100 +000000 range] '),
(chn, lvl, 'W(2): 000120: 002a [@000100 +000020 range] '),
(chn, lvl,
'R(4): 000200: 00000000 Struct [@000200 +000000 node] Node+0 = ln_Succ(Node*)+0'),
(chn, lvl,
'W(2): 000208: 0015 Struct [@000200 +000008 node] Node+8 = ln_Type(UBYTE)+0'),
(chn, lvl,
'R(2): 000300: 0000 JUMP [@000300 +000000 fake.library] -32 [5]+2'),
(chn, lvl,
'R(2): 000320: 0000 Struct [@000300 +000020 fake.library] Library+0 = lib_Node.ln_Succ(Node*)+0'),
(chn, lvl,
'R(2): 0003dc: 0000 JUMP [@0003be +00001e vamostest.library] -36 [6] PrintString( str/a0 )'),
(chn, lvl,
'R(2): 000420: 0000 Struct [@0003be +000062 vamostest.library] Library+32 = lib_OpenCnt(UWORD)+0')
]
def trace_mgr_parse_config_test():
cfg = ConfigDict({
'vamos_ram': True,
'memory': True,
'instr': True,
'reg_dump': True
})
machine = Machine()
tm = TraceManager(machine)
assert tm.parse_config(cfg)
def trace_mgr_mem_test(caplog):
caplog.set_level(logging.INFO)
tm = setup_tm()
tm.setup_cpu_mem_trace()
# no label
tm.trace_cpu_mem('R', 2, 0)
tm.trace_cpu_mem('W', 1, 4, 23)
# range label
tm.trace_cpu_mem('R', 2, 0x100)
tm.trace_cpu_mem('W', 1, 0x120, 42)
# struct label
tm.trace_cpu_mem('R', 2, 0x200)
tm.trace_cpu_mem('W', 1, 0x208, 21)
# lib
tm.trace_cpu_mem('R', 1, 0x300)
tm.trace_cpu_mem('R', 1, 0x320)
# lib with fd
tm.trace_cpu_mem('R', 1, 0x400 - 36)
tm.trace_cpu_mem('R', 1, 0x420)
check_log("mem", caplog.record_tuples)
def trace_mgr_int_mem_test(caplog):
caplog.set_level(logging.INFO)
tm = setup_tm()
tm.setup_vamos_ram_trace()
# no label
tm.trace_int_mem('R', 2, 0)
tm.trace_int_mem('W', 1, 4, 23)
# range label
tm.trace_int_mem('R', 2, 0x100)
tm.trace_int_mem('W', 1, 0x120, 42)
# struct label
tm.trace_int_mem('R', 2, 0x200)
tm.trace_int_mem('W', 1, 0x208, 21)
# lib
tm.trace_int_mem('R', 1, 0x300)
tm.trace_int_mem('R', 1, 0x320)
# lib with fd
tm.trace_int_mem('R', 1, 0x400 - 36)
tm.trace_int_mem('R', 1, 0x420)
check_log("mem_int", caplog.record_tuples)
def trace_mgr_int_block_test(caplog):
caplog.set_level(logging.INFO)
tm = setup_tm()
tm.setup_vamos_ram_trace()
tm.trace_int_block('R', 0x100, 0x20)
lvl = logging.INFO
assert caplog.record_tuples == [
('mem_int', lvl,
'R(B): 000100: +000020 [@000100 +000000 range] ')
]
def trace_mgr_code_line_test(caplog):
caplog.set_level(logging.INFO)
tm = setup_tm()
tm.setup_vamos_ram_trace()
# range
tm.trace_code_line(0x100)
# lib
tm.trace_code_line(0x300)
# lib with fd
tm.trace_code_line(0x400 - 36)
lvl = logging.INFO
assert caplog.record_tuples == [
('instr', lvl, '@000100 +000000 range 000100 nop '),
('instr', lvl, '@000300 +000000 fake.library(-32) 000300 nop '),
('instr', lvl, '@0003be +00001e vamostest.library(-36) 0003dc nop ; PrintString')
]