def MakeLibrary(self, ctx): vectors = ctx.cpu.r_reg(REG_A0) struct = ctx.cpu.r_reg(REG_A1) init = ctx.cpu.r_reg(REG_A2) dsize = ctx.cpu.r_reg(REG_D0) seglist = ctx.cpu.r_reg(REG_D1) ml = MakeLib(ctx.machine, ctx.alloc) lib_base, mobj = ml.make_library(vectors, struct, init, dsize, seglist) log_exec.info("MakeLibrary: vectors=%06x, struct=%06x, init=%06x, " \ "dsize=%06x seglist=%06x -> lib_base=%06x, mobj=%s", vectors, struct, init, dsize, seglist, lib_base, mobj) return lib_base
def libnative_makelib_test(): machine = Machine() mem = machine.get_mem() sp = machine.get_ram_begin() - 4 alloc = MemoryAlloc.for_machine(machine) # build lib info in memory vectors = 0x100 mem.w32(vectors, 0x400) mem.w32(vectors + 4, 0x600) mem.w32(vectors + 8, 0x800) mem.w32(vectors + 12, 0xFFFFFFFF) name_addr = 0x1F0 mem.w_cstr(name_addr, "bla.library") init_tab = 0x200 ib = InitStructBuilder(mem, init_tab) name_off = LibraryStruct.get_field_offset_for_path("lib_Node.ln_Name") ib.init_long(name_off, name_addr) ib.end() init_func = 0x300 mem.w16(init_func, op_rts) pos_size = LibraryStruct.get_size() # make library ml = MakeLib(machine, alloc) lib_base, mem_obj = ml.make_library(vectors, init_tab, init_func, pos_size, 0, run_sp=sp) assert lib_base != 0 # check library lib = Library(mem, lib_base) assert lib.get_name() == "bla.library" assert lib.get_pos_size() == 36 assert lib.get_neg_size() == 20 # round_long(3*6) assert mem.r32(lib_base - 4) == 0x400 assert mem.r32(lib_base - 10) == 0x600 assert mem.r32(lib_base - 16) == 0x800 # cleanup alloc.free_memory(mem_obj) assert alloc.is_all_free()
def libnative_makelib_test(): machine = Machine() mem = machine.get_mem() sp = machine.get_ram_begin() - 4 alloc = MemoryAlloc.for_machine(machine) # build lib info in memory vectors = 0x100 mem.w32(vectors, 0x400) mem.w32(vectors+4, 0x600) mem.w32(vectors+8, 0x800) mem.w32(vectors+12, 0xffffffff) name_addr = 0x1f0 mem.w_cstr(name_addr, "bla.library") init_tab = 0x200 ib = InitStructBuilder(mem, init_tab) name_off = LibraryStruct.get_field_offset_for_path("lib_Node.ln_Name") ib.init_long(name_off, name_addr) ib.end() init_func = 0x300 mem.w16(init_func, op_rts) pos_size = LibraryStruct.get_size() # make library ml = MakeLib(machine, alloc) lib_base, mem_obj = ml.make_library( vectors, init_tab, init_func, pos_size, 0, run_sp=sp) assert lib_base != 0 # check library lib = Library(mem, lib_base) assert lib.get_name() == "bla.library" assert lib.get_pos_size() == 36 assert lib.get_neg_size() == 20 # round_long(3*6) assert mem.r32(lib_base - 4) == 0x400 assert mem.r32(lib_base - 10) == 0x600 assert mem.r32(lib_base - 16) == 0x800 # cleanup alloc.free_memory(mem_obj) assert alloc.is_all_free()