Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
 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)
Ejemplo n.º 4
0
 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)
Ejemplo n.º 5
0
 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)
Ejemplo n.º 6
0
    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
Ejemplo n.º 7
0
    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))
Ejemplo n.º 8
0
 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)
Ejemplo n.º 9
0
 def get_addrxlat_sys(self):
     return addrxlat.System()