Exemplo n.º 1
0
def test_blockbuildermixin(translated=True):
    mc = BlockBuilderMixin(translated)
    writtencode = []
    for i in range(mc.SUBBLOCK_SIZE * 2 + 3):
        assert mc.get_relative_pos() == i
        mc.writechar(chr(i % 255))
        writtencode.append(chr(i % 255))
    if translated:
        assert mc._cursubindex == 3
        assert mc._cursubblock
        assert mc._cursubblock.prev
        assert mc._cursubblock.prev.prev
        assert not mc._cursubblock.prev.prev.prev
    #
    for i in range(0, mc.SUBBLOCK_SIZE * 2 + 3, 2):
        mc.overwrite(i, chr((i + 63) % 255))
        writtencode[i] = chr((i + 63) % 255)
    #
    p = lltype.malloc(rffi.CCHARP.TO, mc.SUBBLOCK_SIZE * 2 + 3, flavor="raw")
    addr = rffi.cast(lltype.Signed, p)
    mc.copy_to_raw_memory(addr)
    #
    for i in range(mc.SUBBLOCK_SIZE * 2 + 3):
        assert p[i] == writtencode[i]
    #
    debug._log = debug.DebugLog()
    try:
        mc._dump(addr, "test-logname-section")
        log = list(debug._log)
    finally:
        debug._log = None
    encoded = "".join(writtencode).encode("hex").upper()
    ataddr = "@%x" % addr
    assert log == [
        (
            "test-logname-section",
            [("debug_print", "SYS_EXECUTABLE", "??"), ("debug_print", "CODE_DUMP", ataddr, "+0 ", encoded)],
        )
    ]

    lltype.free(p, flavor="raw")
Exemplo n.º 2
0
def test_blockbuildermixin(translated=True):
    mc = BlockBuilderMixin(translated)
    writtencode = []
    for i in range(mc.SUBBLOCK_SIZE * 2 + 3):
        assert mc.get_relative_pos() == i
        mc.writechar(chr(i % 255))
        writtencode.append(chr(i % 255))
    if translated:
        assert mc._cursubindex == 3
        assert mc._cursubblock
        assert mc._cursubblock.prev
        assert mc._cursubblock.prev.prev
        assert not mc._cursubblock.prev.prev.prev
    #
    for i in range(0, mc.SUBBLOCK_SIZE * 2 + 3, 2):
        mc.overwrite(i, chr((i + 63) % 255))
        writtencode[i] = chr((i + 63) % 255)
    #
    p = lltype.malloc(rffi.CCHARP.TO, mc.SUBBLOCK_SIZE * 2 + 3, flavor='raw')
    addr = rffi.cast(lltype.Signed, p)
    mc.copy_to_raw_memory(addr)
    #
    for i in range(mc.SUBBLOCK_SIZE * 2 + 3):
        assert p[i] == writtencode[i]
    #
    debug._log = debug.DebugLog()
    try:
        mc._dump(addr, 'test-logname-section')
        log = list(debug._log) 
    finally:
        debug._log = None
    encoded = ''.join(writtencode).encode('hex').upper()
    ataddr = '@%x' % addr
    assert log == [('test-logname-section',
                    [('debug_print', 'CODE_DUMP', ataddr, '+0 ', encoded)])]
    
    lltype.free(p, flavor='raw')
Exemplo n.º 3
0
def test_blockbuildermixin(translated=True):
    mc = BlockBuilderMixin(translated)
    writtencode = []
    for i in range(mc.SUBBLOCK_SIZE * 2 + 3):
        assert mc.get_relative_pos() == i
        mc.writechar(chr(i % 255))
        writtencode.append(chr(i % 255))
    if translated:
        assert mc._cursubindex == 3
        assert mc._cursubblock
        assert mc._cursubblock.prev
        assert mc._cursubblock.prev.prev
        assert not mc._cursubblock.prev.prev.prev
    #
    for i in range(0, mc.SUBBLOCK_SIZE * 2 + 3, 2):
        mc.overwrite(i, chr((i + 63) % 255))
        writtencode[i] = chr((i + 63) % 255)
    #
    p = lltype.malloc(rffi.CCHARP.TO, mc.SUBBLOCK_SIZE * 2 + 3, flavor='raw')
    addr = rffi.cast(lltype.Signed, p)
    mc.copy_to_raw_memory(addr)
    #
    for i in range(mc.SUBBLOCK_SIZE * 2 + 3):
        assert p[i] == writtencode[i]
    #
    debug._log = debug.DebugLog()
    try:
        mc._dump(addr, 'test-logname-section')
        log = list(debug._log)
    finally:
        debug._log = None
    encoded = ''.join(writtencode).encode('hex').upper()
    ataddr = '@%x' % addr
    assert log == [('test-logname-section',
                    [('debug_print', 'SYS_EXECUTABLE', '??'),
                     ('debug_print', 'CODE_DUMP', ataddr, '+0 ', encoded)])]

    lltype.free(p, flavor='raw')
Exemplo n.º 4
0
    def test_insert_gcroot_marker(self):
        puts = []

        class FakeGcRootMap:
            def put(self, retaddr, mark):
                puts.append((retaddr, mark))

        #
        mc = BlockBuilderMixin()
        mc.writechar('X')
        mc.writechar('x')
        mc.insert_gcroot_marker(['a', 'b', 'c', 'd'])
        mc.writechar('Y')
        mc.writechar('y')
        mc.insert_gcroot_marker(['e', 'f', 'g'])
        mc.writechar('Z')
        mc.writechar('z')
        #
        gcrootmap = FakeGcRootMap()
        allblocks = []
        rawstart = mc.materialize(self.memmgr, allblocks, gcrootmap)
        p = rffi.cast(rffi.CArrayPtr(lltype.Char), rawstart)
        assert p[0] == 'X'
        assert p[1] == 'x'
        assert p[2] == 'Y'
        assert p[3] == 'y'
        assert p[4] == 'Z'
        assert p[5] == 'z'
        assert allblocks == [(rawstart, rawstart + 6)]
        assert puts == [(rawstart + 2, ['a', 'b', 'c', 'd']),
                        (rawstart + 4, ['e', 'f', 'g'])]
Exemplo n.º 5
0
    def test_insert_gcroot_marker(self):
        puts = []

        class FakeGcRootMap:
            def put(self, retaddr, mark):
                puts.append((retaddr, mark))

        #
        mc = BlockBuilderMixin()
        mc.writechar("X")
        mc.writechar("x")
        mc.insert_gcroot_marker(["a", "b", "c", "d"])
        mc.writechar("Y")
        mc.writechar("y")
        mc.insert_gcroot_marker(["e", "f", "g"])
        mc.writechar("Z")
        mc.writechar("z")
        #
        gcrootmap = FakeGcRootMap()
        allblocks = []
        rawstart = mc.materialize(self.memmgr, allblocks, gcrootmap)
        p = rffi.cast(rffi.CArrayPtr(lltype.Char), rawstart)
        assert p[0] == "X"
        assert p[1] == "x"
        assert p[2] == "Y"
        assert p[3] == "y"
        assert p[4] == "Z"
        assert p[5] == "z"
        assert allblocks == [(rawstart, rawstart + 6)]
        assert puts == [(rawstart + 2, ["a", "b", "c", "d"]), (rawstart + 4, ["e", "f", "g"])]
Exemplo n.º 6
0
 def test_insert_gcroot_marker(self):
     puts = []
     class FakeGcRootMap:
         def put(self, retaddr, mark):
             puts.append((retaddr, mark))
     #
     mc = BlockBuilderMixin()
     mc.writechar('X')
     mc.writechar('x')
     mc.insert_gcroot_marker(['a', 'b', 'c', 'd'])
     mc.writechar('Y')
     mc.writechar('y')
     mc.insert_gcroot_marker(['e', 'f', 'g'])
     mc.writechar('Z')
     mc.writechar('z')
     #
     gcrootmap = FakeGcRootMap()
     allblocks = []
     rawstart = mc.materialize(self.memmgr, allblocks, gcrootmap)
     p = rffi.cast(rffi.CArrayPtr(lltype.Char), rawstart)
     assert p[0] == 'X'
     assert p[1] == 'x'
     assert p[2] == 'Y'
     assert p[3] == 'y'
     assert p[4] == 'Z'
     assert p[5] == 'z'
     assert allblocks == [(rawstart, rawstart + 6)]
     assert puts == [(rawstart + 2, ['a', 'b', 'c', 'd']),
                     (rawstart + 4, ['e', 'f', 'g'])]