def test_sys_defaults(self): sys = addrxlat.System() for i in xrange(addrxlat.SYS_MAP_NUM): map = sys.get_map(i) self.assertIs(map, None) for i in xrange(addrxlat.SYS_METH_NUM): meth = sys.get_meth(i) self.assertEquals(meth.kind, addrxlat.NOMETH)
def test_customdesc_extmod_conv(self): sys = addrxlat.System() map = addrxlat.Map() sys.set_meth(addrxlat.SYS_METH_CUSTOM, self.meth_extmod) map.set(0, addrxlat.Range(0xffff, addrxlat.SYS_METH_CUSTOM)) sys.set_map(addrxlat.SYS_MAP_KV_PHYS, map) addr = addrxlat.FullAddress(addrxlat.KVADDR, 0x2345) addr.conv(addrxlat.KPHYSADDR, self.ctx, sys) self.assertEqual(addr.addrspace, addrxlat.KPHYSADDR) self.assertEqual(addr.addr, 0x123456 + 0x4523)
def test_step_sys(self): sys = addrxlat.System() step = addrxlat.Step(self.ctx, sys=sys) self.assertIs(step.ctx, self.ctx) self.assertIs(step.sys, sys) self.assertIs(step.meth, None) self.assertEqual(step.remain, 0) self.assertEqual(step.elemsz, 0) self.assertIs(step.base, None) self.assertIs(step.raw, None) idx = (0, ) * (addrxlat.FIELDS_MAX + 1) self.assertEqual(step.idx, idx)
def test_sys_meth(self): sys = addrxlat.System() newdesc = addrxlat.LinearMethod(0) for i in xrange(addrxlat.SYS_MAP_NUM): map = sys.get_map(i) self.assertIs(map, None) for methidx in xrange(addrxlat.SYS_METH_NUM): sys.set_meth(methidx, newdesc) for i in xrange(methidx): meth = sys.get_meth(i) self.assertEqual(meth, newdesc) for i in xrange(methidx + 1, addrxlat.SYS_METH_NUM): meth = sys.get_meth(i) self.assertEquals(meth.kind, addrxlat.NOMETH)
def test_sys_map(self): sys = addrxlat.System() newmap = addrxlat.Map() for mapidx in xrange(addrxlat.SYS_MAP_NUM): sys.set_map(mapidx, newmap) for i in xrange(mapidx + 1): map = sys.get_map(i) self.assertEqual(map, newmap) for i in xrange(mapidx + 1, addrxlat.SYS_MAP_NUM): map = sys.get_map(i) self.assertIs(map, None) for i in xrange(addrxlat.SYS_METH_NUM): meth = sys.get_meth(i) self.assertEquals(meth.kind, addrxlat.NOMETH)
def __init__(self) -> None: try: target = crash.current_target() self.context = target.kdump.get_addrxlat_ctx() self.system = target.kdump.get_addrxlat_sys() except AttributeError: self.context = TranslationContext() self.system = addrxlat.System() self.system.os_init(self.context, arch=utsname.machine, type=addrxlat.OS_LINUX) self.is_non_auto = False xlatmap = self.system.get_map(addrxlat.SYS_MAP_MACHPHYS_KPHYS) for addr_range in xlatmap: if addr_range.meth == addrxlat.SYS_METH_NONE: continue meth = self.system.get_meth(addr_range.meth) if meth.kind != addrxlat.LINEAR or meth.off != 0: self.is_non_auto = True break
def setUp(self): def read32(addr): # Page table level 2 @ 0 if addr.addr == 0x10000: return 0x101 # Page table level 1 @ 0x65 if addr.addr == 0x10100 + 0x65 * 4: return 0x1c0 # Page table level 1 @ 0x41 if addr.addr == 0x10100 + 0x41 * 4: return 0x1a9 # Memory array at 0x40 if addr.addr == 0x11000 + 0x40 * 4: return 0xaa self.ctx = addrxlat.Context() self.ctx.read_caps = addrxlat.CAPS(addrxlat.MACHPHYSADDR) self.ctx.cb_read32 = read32 self.sys = addrxlat.System() map = addrxlat.Map() self.sys.set_map(addrxlat.SYS_MAP_HW, map) meth = addrxlat.PageTableMethod(addrxlat.MACHPHYSADDR) meth.root = addrxlat.FullAddress(addrxlat.MACHPHYSADDR, 0x10000) meth.pte_format = addrxlat.PTE_PFN32 meth.fields = (8, 8, 8) self.sys.set_meth(addrxlat.SYS_METH_PGT, meth) map.set(0, addrxlat.Range(0xffff, addrxlat.SYS_METH_PGT)) map = addrxlat.Map() self.sys.set_map(addrxlat.SYS_MAP_KV_PHYS, map) meth = addrxlat.LinearMethod(addrxlat.KPHYSADDR, 0x1000) self.sys.set_meth(addrxlat.SYS_METH_DIRECT, meth) map.set(0, addrxlat.Range(0x1fff, addrxlat.SYS_METH_DIRECT)) meth = addrxlat.LookupMethod(addrxlat.KPHYSADDR) meth.endoff = 0xff meth.tbl = ((0x2000, 0xfa00), (0x3000, 0xfb00), (0x3100, 0xff00)) self.sys.set_meth(addrxlat.SYS_METH_CUSTOM, meth) map.set(0x2000, addrxlat.Range(0x1fff, addrxlat.SYS_METH_CUSTOM)) meth = addrxlat.MemoryArrayMethod(addrxlat.KPHYSADDR) meth.base = addrxlat.FullAddress(addrxlat.KVADDR, 0) meth.shift = 8 meth.elemsz = 4 meth.valsz = 4 self.sys.set_meth(addrxlat.SYS_METH_CUSTOM + 1, meth) map.set(0x4000, addrxlat.Range(0x1fff, addrxlat.SYS_METH_CUSTOM + 1)) map.set(0x6000, addrxlat.Range(0x9fff, addrxlat.SYS_METH_PGT)) map = addrxlat.Map() self.sys.set_map(addrxlat.SYS_MAP_KPHYS_DIRECT, map) meth = addrxlat.LinearMethod(addrxlat.KVADDR, -0x1000) self.sys.set_meth(addrxlat.SYS_METH_RDIRECT, meth) map.set(0x1000, addrxlat.Range(0x1fff, addrxlat.SYS_METH_RDIRECT)) map = addrxlat.Map() self.sys.set_map(addrxlat.SYS_MAP_MACHPHYS_KPHYS, map) meth = addrxlat.LinearMethod(addrxlat.KPHYSADDR, -0x10000) self.sys.set_meth(addrxlat.SYS_METH_MACHPHYS_KPHYS, meth) map.set(0x10000, addrxlat.Range(0xffff, addrxlat.SYS_METH_MACHPHYS_KPHYS)) map = addrxlat.Map() self.sys.set_map(addrxlat.SYS_MAP_KPHYS_MACHPHYS, map) meth = addrxlat.LinearMethod(addrxlat.MACHPHYSADDR, 0x10000) self.sys.set_meth(addrxlat.SYS_METH_KPHYS_MACHPHYS, meth) map.set(0, addrxlat.Range(0xffff, addrxlat.SYS_METH_KPHYS_MACHPHYS))
def test_op_sys(self): sys = addrxlat.System() op = addrxlat.Operator(self.ctx, sys=sys) self.assertIs(op.ctx, self.ctx) self.assertEqual(op.sys, sys) self.assertEqual(op.caps, 0)
def get_addrxlat_sys(self): return addrxlat.System()