def main(args): arch = lookup_architecture(args.architecture) addresses = yaml.load(args.input) object_sizes = yaml.load(args.object_sizes) register_object_sizes(object_sizes) # create the list of reserved regions. This duplicates the load_images part of the elf loader. Ultimately # we should feed this info to the elf loader rather than doing it dynamically reserved = SortedList() # first the kernel image kernel_elf = ELFFile(args.kernel_elf) kernel_region = get_load_bounds(kernel_elf) # elfloader currently rounds end to page boundary kernel_region = Region(kernel_region.start, round_up(kernel_region.end, PAGE_SIZE)) reserved.add(kernel_region) # now the DTB next_paddr = kernel_region.end if args.dtb_size: dtb_region = Region(next_paddr, round_up(next_paddr + args.dtb_size, PAGE_SIZE)) reserved.add(dtb_region) print("DTB: {0}<-->{1}".format(hex(dtb_region.start), hex(dtb_region.end))) available = SortedList() for a in addresses['memory']: # trim to paddr-top start, end = a['start'], a['end'] if args.paddr_top is not None: start = min(start, args.paddr_top) end = min(end, args.paddr_top) if start != end: available.add(Region(start, end)) # calculate free regions based on available + reserved regions freemem = init_freemem(available, reserved) # create untyped for each region untypeds = [] for f in freemem: untypeds += create_untypeds_for_region(object_sizes, f, arch, False) # create untyped for each device untyped for d in addresses['devices']: untypeds += create_untypeds_for_region(object_sizes, Region(d['start'], d['end']), arch, True) # finally output the file yaml.dump(untypeds, args.output)
def setUp(self): register_object_sizes(test_object_sizes)