示例#1
0
def mem_alloc_base_test():
  mem = MockMemory()
  alloc = MemoryAlloc(mem)
  assert alloc.is_all_free()
  addr = alloc.alloc_mem(1024)
  alloc.free_mem(addr, 1024)
  assert alloc.is_all_free()
示例#2
0
def mem_alloc_base_test():
    mem = MockMemory()
    alloc = MemoryAlloc(mem)
    assert alloc.is_all_free()
    addr = alloc.alloc_mem(1024)
    alloc.free_mem(addr, 1024)
    assert alloc.is_all_free()
示例#3
0
def atypes_process_bptr_test():
    mem = MockMemory()
    alloc = MemoryAlloc(mem)
    # alloc proc
    proc = Process.alloc(alloc)
    # set list
    proc.seg_list = 0x100
    assert proc.seg_list == BAddr(0x40)
    # check in mem seg list baddr
    struct = proc.get_type_struct()
    off = struct.pr_SegList_field.offset
    addr = proc.addr + off
    assert mem.r32(addr) == 0x40
    # setup CLI
    cli = CLI.alloc(alloc)
    proc.cli = cli
    assert type(proc.cli) is CLI
    assert proc.cli == cli.addr
    # check in mem CLI baddr
    off = struct.pr_CLI_field.offset
    addr = proc.addr + off
    assert mem.r32(addr) == BAddr.from_addr(cli.addr).get_baddr()
    cli.free()
    # done
    proc.free()
    assert alloc.is_all_free()
示例#4
0
def atypes_resident_setup_test():
    mem = MockMemory(fill=23)
    alloc = MemoryAlloc(mem)
    # alloc
    res2 = Resident.alloc(alloc, "bla.library", "blub")
    res2.setup(
        flags=ResidentFlags.RTF_AUTOINIT,
        version=42,
        type=NodeType.NT_DEVICE,
        pri=-7,
        init=0xDEADBEEF,
    )
    # find resource
    res = Resident.find(mem, 0, 1024)
    assert res.get_match_word() == res.RTC_MATCHWORD
    assert res.get_match_tag() == res.get_addr()
    assert res.get_end_skip() >= res.get_addr() + res.get_type_size()
    assert res.get_flags() == ResidentFlags.RTF_AUTOINIT
    assert res.get_version() == 42
    assert res.get_type() == NodeType.NT_DEVICE
    assert res.get_pri() == -7
    assert res.get_name() == "bla.library"
    assert res.get_id_string() == "blub"
    assert res.get_init() == 0xDEADBEEF
    # free
    res2.free()
    assert alloc.is_all_free()
示例#5
0
def atypes_process_bptr_test():
  mem = MockMemory()
  alloc = MemoryAlloc(mem)
  # alloc proc
  proc = Process.alloc(alloc)
  # set list
  proc.seg_list = 0x100
  assert proc.seg_list == BAddr(0x40)
  # check in mem seg list baddr
  struct = proc.get_type_struct()
  off = struct.pr_SegList_field.offset
  addr = proc.addr + off
  assert mem.r32(addr) == 0x40
  # setup CLI
  cli = CLI.alloc(alloc)
  proc.cli = cli
  assert type(proc.cli) is CLI
  assert proc.cli == cli.addr
  # check in mem CLI baddr
  off = struct.pr_CLI_field.offset
  addr = proc.addr + off
  assert mem.r32(addr) == BAddr.from_addr(cli.addr).get_baddr()
  cli.free()
  # done
  proc.free()
  assert alloc.is_all_free()
示例#6
0
def libcore_patch_multi_trap_test(capsys):
    name = 'vamostest.library'
    impl = VamosTestLibrary()
    fd = read_lib_fd(name)
    machine = MockMachine()
    ctx = LibCtx(machine)
    # create stub
    gen = LibStubGen()
    stub = gen.gen_stub(name, impl, fd, ctx)
    # now patcher
    alloc = MemoryAlloc(ctx.mem)
    traps = machine.get_traps()
    p = LibPatcherMultiTrap(alloc, traps, stub)
    base_addr = 0x100
    p.patch_jump_table(base_addr)
    # lookup trap for function
    func = fd.get_func_by_name('PrintHello')
    bias = func.get_bias()
    func_addr = base_addr - bias
    # check that jump table has jump + addr
    op = ctx.mem.r16(func_addr)
    assert op == op_jmp
    trap_addr = ctx.mem.r32(func_addr + 2)
    # check jump target is trap
    op = ctx.mem.r16(trap_addr)
    assert op & 0xf000 == 0xa000
    # trigger trap
    traps.trigger(op)
    captured = capsys.readouterr()
    assert captured.out.strip().split('\n') == ['VamosTest: PrintHello()']
    # remove traps
    p.cleanup()
    assert traps.get_num_traps() == 0
    assert alloc.is_all_free()
示例#7
0
def libtypes_process_bptr_test():
    mem = MockMemory()
    alloc = MemoryAlloc(mem)
    # alloc proc
    proc = Process.alloc(alloc)
    # set list (as baddr)
    proc.seg_list.bptr = 0x40
    assert proc.seg_list.bptr == 0x40
    # check in mem seg list baddr
    off = proc.sdef.pr_SegList.offset
    addr = proc.addr + off
    assert mem.r32(addr) == 0x40
    # setup CLI
    cli = CLI.alloc(alloc)
    proc.cli.ref = cli
    assert type(proc.cli.ref) is CLI
    assert proc.cli.aptr == cli.addr
    # check in mem CLI baddr
    off = proc.sdef.pr_CLI.offset
    addr = proc.addr + off
    assert mem.r32(addr) == cli.addr >> 2
    cli.free()
    # done
    proc.free()
    assert alloc.is_all_free()
示例#8
0
def astructs_astruct_class_test():
    mem = MockMemory()
    alloc = MemoryAlloc(mem)
    pc = PlainClass.alloc(alloc)
    assert type(pc) == PlainClass
    assert pc.foo() == ""
    # alloc a name
    pc.name.alloc_str(alloc, "hello")
    assert pc.foo() == "hello"
    # another struct
    pc2 = PlainClass.alloc(alloc, name="world!")
    assert type(pc2) == PlainClass
    assert pc2.name.str == "world!"
    assert pc2.foo() == "world!"
    pc.next.ref = pc2
    assert pc.foo() == "hello world!"
    # more struct
    pc3 = PlainClass.alloc(alloc, name="what:", bname="ugh!", next=pc2)
    assert pc3.foo() == "what: world!"
    assert pc3.next.ref is pc2
    assert pc3.name.str == "what:"
    assert pc3.bname.str == "ugh!"
    pc3.free()
    pc2.free()
    # clean up pc
    pc.name.free_str()
    pc.free()
    assert alloc.is_all_free()
示例#9
0
def libtypes_node_alloc_min_test():
    mem = MockMemory()
    alloc = MemoryAlloc(mem)
    node = MinNode.alloc(alloc)
    assert node.get_size() == MinNodeStruct.get_size()
    node.free()
    assert alloc.is_all_free()
示例#10
0
def atypes_node_alloc_test():
  mem = MockMemory()
  alloc = MemoryAlloc(mem)
  node = Node.alloc(alloc)
  assert node.get_size() == NodeStruct.get_size()
  node.free()
  assert alloc.is_all_free()
示例#11
0
def libtypes_resident_setup_test():
    mem = MockMemory(fill=23)
    alloc = MemoryAlloc(mem)
    # alloc
    res2 = Resident.alloc(alloc, name="bla.library", id_string="blub")
    res2.new_resident(
        flags=ResidentFlags.RTF_AUTOINIT,
        version=42,
        type=NodeType.NT_DEVICE,
        pri=-7,
        init=0xDEADBEEF,
    )
    # find resource
    res = Resident.find(mem, 0, 1024)
    assert res.match_word.val == res.RTC_MATCHWORD
    assert res.match_tag.aptr == res.get_addr()
    assert res.end_skip.aptr >= res.get_addr() + res.get_size()
    assert res.flags.val == ResidentFlags.RTF_AUTOINIT
    assert res.version.val == 42
    assert res.type.val == NodeType.NT_DEVICE
    assert res.pri.val == -7
    assert res.name.str == "bla.library"
    assert res.id_string.str == "blub"
    assert res.init.aptr == 0xDEADBEEF
    # free
    res2.free()
    assert alloc.is_all_free()
示例#12
0
def atypes_execlib_alloc_test():
  mem = MockMemory()
  alloc = MemoryAlloc(mem)
  el = ExecLibrary.alloc(alloc, "exec.library", "bla", 20)
  el.setup()
  el.fill_funcs()
  el.free()
  assert alloc.is_all_free()
示例#13
0
def atypes_node_alloc_name_test():
  mem = MockMemory()
  alloc = MemoryAlloc(mem)
  node = Node.alloc(alloc, "foobar")
  assert node.get_size() == NodeStruct.get_size()
  assert node.get_name() == "foobar"
  node.free()
  assert alloc.is_all_free()
示例#14
0
def atypes_list_alloc_min_test():
  mem = MockMemory()
  alloc = MemoryAlloc(mem)
  l = MinList.alloc(alloc)
  assert type(l) is MinList
  assert l.get_size() == MinListStruct.get_size()
  l.free()
  assert alloc.is_all_free()
示例#15
0
def atypes_execlib_alloc_test():
    mem = MockMemory()
    alloc = MemoryAlloc(mem)
    el = ExecLibrary.alloc(alloc, "exec.library", "bla", 20)
    el.setup()
    el.fill_funcs()
    el.free()
    assert alloc.is_all_free()
示例#16
0
def atypes_resident_alloc_test():
  mem = MockMemory(fill=23)
  alloc = MemoryAlloc(mem)
  # alloc
  res = Resident.alloc(alloc, "bla.library", "blub")
  # free
  res.free()
  assert alloc.is_all_free()
示例#17
0
def libtypes_node_alloc_name_test():
    mem = MockMemory()
    alloc = MemoryAlloc(mem)
    node = Node.alloc(alloc, name="foobar")
    assert node.get_size() == NodeStruct.get_size()
    assert node.name.str == "foobar"
    node.free()
    assert alloc.is_all_free()
示例#18
0
def atypes_list_alloc_min_test():
    mem = MockMemory()
    alloc = MemoryAlloc(mem)
    l = MinList.alloc(alloc)
    assert type(l) is MinList
    assert l.get_size() == MinListStruct.get_size()
    l.free()
    assert alloc.is_all_free()
示例#19
0
def atypes_resident_alloc_test():
    mem = MockMemory(fill=23)
    alloc = MemoryAlloc(mem)
    # alloc
    res = Resident.alloc(alloc, "bla.library", "blub")
    # free
    res.free()
    assert alloc.is_all_free()
示例#20
0
def astructs_astruct_alloc_sub_test():
    mem = MockMemory()
    alloc = MemoryAlloc(mem)
    res = SubStruct.alloc(alloc, ss_My={"ms_Word": 21, "ms_Pad": 42})
    assert type(res) is SubStruct
    assert res.ss_My.ms_Word.val == 21
    assert res.ss_My.ms_Pad.val == 42
    res.free()
    assert alloc.is_all_free()
示例#21
0
def astructs_astruct_class_subfield_alias_test():
    mem = MockMemory()
    alloc = MemoryAlloc(mem)
    spc = SubPlainClass.alloc(alloc, name="abc", plain2={"name": "cde"})
    assert type(spc) == SubPlainClass
    assert spc.plain.name.str == "abc"
    assert spc.plain2.name.str == "cde"
    spc.free()
    assert alloc.is_all_free()
示例#22
0
def astructs_astruct_alloc_test():
    mem = MockMemory()
    alloc = MemoryAlloc(mem)
    res = MyStruct.alloc(alloc, ms_Word=21, ms_Pad=42)
    assert type(res) is MyStruct
    assert res.ms_Word.val == 21
    assert res.ms_Pad.val == 42
    res.free()
    assert alloc.is_all_free()
示例#23
0
def atypes_cstring_null_test():
    mem = MockMemory()
    alloc = MemoryAlloc(mem)
    # no string
    cs = CString.alloc(alloc, None)
    assert cs
    assert cs.get_addr() == 0
    assert cs.get_string() is None
    cs.free()
    assert alloc.is_all_free()
示例#24
0
def atypes_cstring_null_test():
  mem = MockMemory()
  alloc = MemoryAlloc(mem)
  # no string
  cs = CString.alloc(alloc, None)
  assert cs
  assert cs.get_addr() == 0
  assert cs.get_string() is None
  cs.free()
  assert alloc.is_all_free()
示例#25
0
def atypes_bstring_null_test():
  mem = MockMemory()
  alloc = MemoryAlloc(mem)
  # no string
  bs = BString.alloc(alloc, None)
  assert bs
  assert bs.get_baddr() << 2 == bs.get_addr()
  assert bs.get_addr() == 0
  assert bs.get_string() is None
  bs.free()
  assert alloc.is_all_free()
示例#26
0
def atypes_bstring_null_test():
    mem = MockMemory()
    alloc = MemoryAlloc(mem)
    # no string
    bs = BString.alloc(alloc, None)
    assert bs
    assert bs.get_baddr() << 2 == bs.get_addr()
    assert bs.get_addr() == 0
    assert bs.get_string() is None
    bs.free()
    assert alloc.is_all_free()
示例#27
0
def astructs_astruct_alloc_ptr_test():
    mem = MockMemory()
    alloc = MemoryAlloc(mem)
    MyStructPtr = APTR(MyStruct)
    ptr = MyStructPtr(mem, 0x10)
    assert ptr.aptr == 0
    res = ptr.alloc_ref(alloc)
    assert type(res) is MyStruct
    assert ptr.aptr != 0
    ptr.free_ref()
    assert ptr.aptr == 0
    assert alloc.is_all_free()
示例#28
0
def atypes_bstring_alloc_bstr_test():
    mem = MockMemory()
    alloc = MemoryAlloc(mem)
    # no string
    bs = BString.alloc(alloc, "bla")
    bs2 = BString.alloc(alloc, bs)
    assert bs
    assert bs.get_string() == "bla"
    assert bs2
    assert bs2.get_string() == "bla"
    bs.free()
    bs2.free()
    assert alloc.is_all_free()
示例#29
0
def atypes_cstring_empty_test():
    mem = MockMemory()
    alloc = MemoryAlloc(mem)
    # empty string
    txt = ""
    cs = CString.alloc(alloc, txt)
    assert cs
    assert mem.r_cstr(cs.get_addr()) == txt
    assert cs.get_string() == txt
    assert cs == txt
    assert cs == cs.get_addr()
    cs.free()
    assert alloc.is_all_free()
示例#30
0
def atypes_bstring_alloc_bstr_test():
  mem = MockMemory()
  alloc = MemoryAlloc(mem)
  # no string
  bs = BString.alloc(alloc, "bla")
  bs2 = BString.alloc(alloc, bs)
  assert bs
  assert bs.get_string() == "bla"
  assert bs2
  assert bs2.get_string() == "bla"
  bs.free()
  bs2.free()
  assert alloc.is_all_free()
示例#31
0
def atypes_cstring_alloc_cstr_test():
    mem = MockMemory()
    alloc = MemoryAlloc(mem)
    # no string
    cs = CString.alloc(alloc, "bla")
    cs2 = CString.alloc(alloc, cs)
    assert cs
    assert cs.get_string() == "bla"
    assert cs2
    assert cs2.get_string() == "bla"
    cs.free()
    cs2.free()
    assert alloc.is_all_free()
示例#32
0
def atypes_cstring_alloc_cstr_test():
  mem = MockMemory()
  alloc = MemoryAlloc(mem)
  # no string
  cs = CString.alloc(alloc, "bla")
  cs2 = CString.alloc(alloc, cs)
  assert cs
  assert cs.get_string() == "bla"
  assert cs2
  assert cs2.get_string() == "bla"
  cs.free()
  cs2.free()
  assert alloc.is_all_free()
示例#33
0
def atypes_cstring_empty_test():
  mem = MockMemory()
  alloc = MemoryAlloc(mem)
  # empty string
  txt = ""
  cs = CString.alloc(alloc, txt)
  assert cs
  assert mem.r_cstr(cs.get_addr()) == txt
  assert cs.get_string() == txt
  assert cs == txt
  assert cs == cs.get_addr()
  cs.free()
  assert alloc.is_all_free()
示例#34
0
def atypes_bstring_empty_test():
  mem = MockMemory()
  alloc = MemoryAlloc(mem)
  # empty string
  txt = ""
  bs = BString.alloc(alloc, txt)
  assert bs
  assert bs.get_baddr() << 2 == bs.get_addr()
  assert mem.r_bstr(bs.get_addr()) == txt
  assert bs.get_string() == txt
  assert bs == txt
  assert bs == bs.get_addr()
  bs.free()
  assert alloc.is_all_free()
示例#35
0
def atypes_cstring_base_test():
  mem = MockMemory()
  alloc = MemoryAlloc(mem)
  # simple string
  txt = "hello, world!"
  cs = CString.alloc(alloc, txt)
  assert cs
  assert mem.r_cstr(cs.get_addr()) == txt
  assert cs.get_string() == txt
  assert cs == txt
  assert cs == cs.get_addr()
  assert cs == CString(mem, cs.get_addr())
  cs.free()
  assert alloc.is_all_free()
示例#36
0
def atypes_bstring_empty_test():
    mem = MockMemory()
    alloc = MemoryAlloc(mem)
    # empty string
    txt = ""
    bs = BString.alloc(alloc, txt)
    assert bs
    assert bs.get_baddr() << 2 == bs.get_addr()
    assert mem.r_bstr(bs.get_addr()) == txt
    assert bs.get_string() == txt
    assert bs == txt
    assert bs == bs.get_addr()
    bs.free()
    assert alloc.is_all_free()
示例#37
0
def atypes_cstring_base_test():
    mem = MockMemory()
    alloc = MemoryAlloc(mem)
    # simple string
    txt = "hello, world!"
    cs = CString.alloc(alloc, txt)
    assert cs
    assert mem.r_cstr(cs.get_addr()) == txt
    assert cs.get_string() == txt
    assert cs == txt
    assert cs == cs.get_addr()
    assert cs == CString(mem, cs.get_addr())
    cs.free()
    assert alloc.is_all_free()
示例#38
0
def atypes_process_base_test():
  mem = MockMemory()
  alloc = MemoryAlloc(mem)
  # alloc proc
  name = "my_proc"
  proc = Process.alloc(alloc, name)
  assert proc.get_name() == name
  # proc setup
  proc.setup()
  node = proc.task.node
  assert node.type == NodeType.NT_PROCESS
  # done
  proc.free()
  assert alloc.is_all_free()
示例#39
0
def libtypes_process_base_test():
    mem = MockMemory()
    alloc = MemoryAlloc(mem)
    # alloc proc
    name = "my_proc"
    proc = Process.alloc(alloc, name=name)
    assert proc.name.str == name
    # proc setup
    proc.new_proc()
    node = proc.task.node
    assert node.type.val == NodeType.NT_PROCESS
    # done
    proc.free()
    assert alloc.is_all_free()
示例#40
0
def atypes_bstring_base_test():
  mem = MockMemory()
  alloc = MemoryAlloc(mem)
  # simple string
  txt = "hello, world!"
  bs = BString.alloc(alloc, txt)
  assert bs
  assert bs.get_baddr() << 2 == bs.get_addr()
  assert mem.r_bstr(bs.get_addr()) == txt
  assert bs.get_string() == txt
  assert bs == txt
  assert bs == bs.get_addr()
  assert bs == BString(mem, bs.get_addr())
  bs.free()
  assert alloc.is_all_free()
示例#41
0
def libtypes_execlib_alloc_test():
    mem = MockMemory()
    alloc = MemoryAlloc(mem)
    el = ExecLibrary.alloc(alloc,
                           name="exec.library",
                           id_string="bla",
                           neg_size=20)
    assert el.name.str == "exec.library"
    assert el.id_string.str == "bla"
    assert el.neg_size.val == 20
    assert el.pos_size.val == ExecLibrary.get_size()
    el.new_lib()
    el.fill_funcs()
    el.free()
    assert alloc.is_all_free()
示例#42
0
def atypes_bstring_base_test():
    mem = MockMemory()
    alloc = MemoryAlloc(mem)
    # simple string
    txt = "hello, world!"
    bs = BString.alloc(alloc, txt)
    assert bs
    assert bs.get_baddr() << 2 == bs.get_addr()
    assert mem.r_bstr(bs.get_addr()) == txt
    assert bs.get_string() == txt
    assert bs == txt
    assert bs == bs.get_addr()
    assert bs == BString(mem, bs.get_addr())
    bs.free()
    assert alloc.is_all_free()
示例#43
0
def atypes_msg_msg_test():
  mem = MockMemory()
  alloc = MemoryAlloc(mem)
  # alloc msg
  msg = Message.alloc(alloc)
  assert msg.name == 0
  msg.setup(pri=-7, length=10)
  assert msg.node.pri == -7
  assert msg.node.type == NodeType.NT_MESSAGE
  assert msg.length == 10
  # with name
  msg2 = Message.alloc(alloc, "bla")
  assert msg2.name == "bla"
  # free
  msg.free()
  msg2.free()
  assert alloc.is_all_free()
示例#44
0
def atypes_msg_msg_test():
    mem = MockMemory()
    alloc = MemoryAlloc(mem)
    # alloc msg
    msg = Message.alloc(alloc)
    assert msg.name == 0
    msg.setup(pri=-7, length=10)
    assert msg.node.pri == -7
    assert msg.node.type == NodeType.NT_MESSAGE
    assert msg.length == 10
    # with name
    msg2 = Message.alloc(alloc, "bla")
    assert msg2.name == "bla"
    # free
    msg.free()
    msg2.free()
    assert alloc.is_all_free()
示例#45
0
def libtypes_msg_msg_test():
    mem = MockMemory()
    alloc = MemoryAlloc(mem)
    # alloc msg
    msg = Message.alloc(alloc)
    assert msg.name.aptr == 0
    msg.new_msg(pri=-7, length=10)
    assert msg.pri.val == -7
    assert msg.type.val == NodeType.NT_MESSAGE
    assert msg.length.val == 10
    # with name
    msg2 = Message.alloc(alloc, name="bla")
    assert msg2.name.str == "bla"
    # free
    msg.free()
    msg2.free()
    assert alloc.is_all_free()
示例#46
0
def atypes_library_base_test():
    mem = MockMemory()
    alloc = MemoryAlloc(mem)
    # alloc lib
    name = "my.library"
    id_str = "my.library 1.2"
    neg_size = 36
    pos_size = LibraryStruct.get_size()
    lib = Library.alloc(alloc, name, id_str, neg_size)
    assert lib.get_name() == name
    assert lib.get_id_string() == id_str
    size = lib.get_size()
    assert pos_size == lib.get_pos_size()
    assert neg_size == lib.get_neg_size()
    assert size == pos_size + neg_size
    # lib setup
    flags = LibFlags(LibFlags.LIBF_SUMMING, LibFlags.LIBF_CHANGED)
    ltype = NodeType(NodeType.NT_DEVICE)
    pri = -3
    ver = 1
    rev = 2
    lib.setup(version=ver, revision=rev, pri=pri, flags=flags, type=ltype)
    # check lib
    node = lib.get_node()
    assert node.get_succ() is None
    assert node.get_pred() is None
    assert node.get_type() == ltype
    assert node.get_pri() == pri
    assert lib.get_flags() == flags
    assert lib.get_pad() == 0
    assert lib.get_neg_size() == neg_size
    assert lib.get_pos_size() == pos_size
    assert lib.get_version() == ver
    assert lib.get_revision() == rev
    assert lib.get_sum() == 0
    assert lib.get_open_cnt() == 0
    assert lib.get_name() == name
    assert lib.get_id_string() == id_str
    # fill funcs
    lib.fill_funcs()
    lib_base = lib.get_addr()
    assert mem.r16(lib_base - 6) == op_rts
    # done
    lib.free()
    assert alloc.is_all_free()
示例#47
0
def atypes_libary_open_cnt_test():
    mem = MockMemory()
    alloc = MemoryAlloc(mem)
    # alloc lib
    name = "my.library"
    id_str = "my.library 1.2"
    neg_size = 30
    pos_size = LibraryStruct.get_size()
    lib = Library.alloc(alloc, name, id_str, neg_size)
    # test open cnt
    assert lib.get_open_cnt() == 0
    lib.inc_open_cnt()
    assert lib.get_open_cnt() == 1
    lib.dec_open_cnt()
    assert lib.get_open_cnt() == 0
    # done
    lib.free()
    assert alloc.is_all_free()
示例#48
0
def atypes_task_base_test():
  mem = MockMemory()
  alloc = MemoryAlloc(mem)
  # alloc task
  name = "my_task"
  task = Task.alloc(alloc, name)
  assert task.get_name() == name
  # task setup
  task.setup(pri=-5, flags=TaskFlags.TF_LAUNCH)
  node = task.get_node()
  assert node.get_type() == NodeType.NT_TASK
  assert node.get_pri() == -5
  assert task.get_flags() == TaskFlags.TF_LAUNCH
  assert task.get_state() == TaskState.TS_INVALID
  assert len(task.mem_entry) == 0
  assert task.mem_entry.type == NodeType.NT_MEMORY
  # done
  task.free()
  assert alloc.is_all_free()
示例#49
0
def atypes_msg_msgport_test():
  mem = MockMemory()
  alloc = MemoryAlloc(mem)
  # alloc msg port
  mp1 = MsgPort.alloc(alloc)
  assert mp1.name == 0
  mp1.setup(pri=-5, flags=MsgPortFlags.PA_SOFTINT, sig_bit=5)
  assert mp1.node.pri == -5
  assert mp1.node.type == NodeType.NT_MSGPORT
  assert mp1.flags == MsgPortFlags.PA_SOFTINT
  assert mp1.sig_bit == 5
  assert mp1.sig_task == 0
  assert len(mp1.msg_list) == 0
  # with name
  mp2 = MsgPort.alloc(alloc, "bla")
  assert mp2.get_name() == "bla"
  # free
  mp1.free()
  mp2.free()
  assert alloc.is_all_free()
示例#50
0
def atypes_atype_alloc_test():
  @AmigaTypeDef(MyStruct, wrap={'pad': (Bla.getf, Bla.setf)})
  class MyType(AmigaType):
    pass

  @AmigaTypeDef(SubStruct)
  class SubType(AmigaType):
    pass

  mem = MockMemory()
  alloc = MemoryAlloc(mem)
  # my type
  mt = MyType.alloc(alloc)
  assert mt
  assert mt.get_addr() != 0
  mt.free()
  # sub
  st = SubType.alloc(alloc)
  assert st
  assert st.get_addr() != 0
  st.free()
  assert alloc.is_all_free()
示例#51
0
def atypes_resident_setup_test():
  mem = MockMemory(fill=23)
  alloc = MemoryAlloc(mem)
  # alloc
  res2 = Resident.alloc(alloc, "bla.library", "blub")
  res2.setup(flags=ResidentFlags.RTF_AUTOINIT, version=42,
             type=NodeType.NT_DEVICE, pri=-7, init=0xdeadbeef)
  # find resource
  res = Resident.find(mem, 0, 1024)
  assert res.get_match_word() == res.RTC_MATCHWORD
  assert res.get_match_tag() == res.get_addr()
  assert res.get_end_skip() >= res.get_addr() + res.get_type_size()
  assert res.get_flags() == ResidentFlags.RTF_AUTOINIT
  assert res.get_version() == 42
  assert res.get_type() == NodeType.NT_DEVICE
  assert res.get_pri() == -7
  assert res.get_name() == "bla.library"
  assert res.get_id_string() == "blub"
  assert res.get_init() == 0xdeadbeef
  # free
  res2.free()
  assert alloc.is_all_free()
示例#52
0
def libcore_patch_multi_trap_test(capsys):
  name = 'vamostest.library'
  impl = VamosTestLibrary()
  fd = read_lib_fd(name)
  machine = MockMachine()
  ctx = LibCtx(machine)
  # create stub
  scanner = LibImplScanner()
  scan = scanner.scan(name, impl, fd)
  gen = LibStubGen()
  stub = gen.gen_stub(scan, ctx)
  # now patcher
  alloc = MemoryAlloc(ctx.mem)
  traps = machine.get_traps()
  p = LibPatcherMultiTrap(alloc, traps, stub)
  base_addr = 0x100
  p.patch_jump_table(base_addr)
  # lookup trap for function
  func = fd.get_func_by_name('PrintHello')
  bias = func.get_bias()
  func_addr = base_addr - bias
  # check that jump table has jump + addr
  op = ctx.mem.r16(func_addr)
  assert op == op_jmp
  trap_addr = ctx.mem.r32(func_addr + 2)
  # check jump target is trap
  op = ctx.mem.r16(trap_addr)
  assert op & 0xf000 == 0xa000
  # trigger trap
  traps.trigger(op)
  captured = capsys.readouterr()
  assert captured.out.strip().split('\n') == [
      'VamosTest: PrintHello()'
  ]
  # remove traps
  p.cleanup()
  assert traps.get_num_traps() == 0
  assert alloc.is_all_free()