Lines Matching refs:seg

489 	struct segment *seg = calloc(1, sizeof(*seg));  in add_segment()  local
491 if (!seg) in add_segment()
497 seg->offset = offset; in add_segment()
498 seg->vaddr = vaddr; in add_segment()
499 seg->filesz = filesz; in add_segment()
500 seg->memsz = memsz; in add_segment()
501 seg->flags = flags; in add_segment()
502 seg->align = align; in add_segment()
504 TAILQ_INSERT_TAIL(&elf->segs, seg, link); in add_segment()
548 static void copy_remapped_to(struct ta_elf *elf, const struct segment *seg) in copy_remapped_to() argument
550 uint8_t *dst = (void *)(seg->vaddr + elf->load_addr); in copy_remapped_to()
552 size_t offs = seg->offset; in copy_remapped_to()
553 size_t num_bytes = seg->filesz; in copy_remapped_to()
575 struct segment *seg = NULL; in adjust_segments() local
582 TAILQ_FOREACH(seg, &elf->segs, link) { in adjust_segments()
585 assert(seg->align >= SMALL_PAGE_SIZE); in adjust_segments()
586 assert(!ADD_OVERFLOW(seg->vaddr, seg->memsz, &dummy)); in adjust_segments()
587 assert(seg->filesz <= seg->memsz); in adjust_segments()
588 assert((seg->offset & SMALL_PAGE_MASK) == in adjust_segments()
589 (seg->vaddr & SMALL_PAGE_MASK)); in adjust_segments()
591 prev_seg = TAILQ_PREV(seg, segment_head, link); in adjust_segments()
593 assert(seg->vaddr >= prev_seg->vaddr + prev_seg->memsz); in adjust_segments()
594 assert(seg->offset >= in adjust_segments()
598 align = seg->align; in adjust_segments()
599 assert(align == seg->align); in adjust_segments()
604 seg = TAILQ_FIRST(&elf->segs); in adjust_segments()
605 if (seg) in adjust_segments()
606 seg = TAILQ_NEXT(seg, link); in adjust_segments()
607 while (seg) { in adjust_segments()
608 prev_seg = TAILQ_PREV(seg, segment_head, link); in adjust_segments()
626 if (rounddown(seg->vaddr) < prev_end_addr) { in adjust_segments()
627 assert((seg->vaddr & mask) == (seg->offset & mask)); in adjust_segments()
635 prev_seg->filesz = seg->vaddr + seg->filesz - in adjust_segments()
637 prev_seg->memsz = seg->vaddr + seg->memsz - in adjust_segments()
639 prev_seg->flags |= seg->flags; in adjust_segments()
641 TAILQ_REMOVE(&elf->segs, seg, link); in adjust_segments()
642 free(seg); in adjust_segments()
643 seg = TAILQ_NEXT(prev_seg, link); in adjust_segments()
648 if ((seg->offset & mask) && in adjust_segments()
649 rounddown(seg->offset) < in adjust_segments()
652 assert(seg->flags & PF_W); in adjust_segments()
653 seg->remapped_writeable = true; in adjust_segments()
660 seg->filesz += seg->vaddr - rounddown(seg->vaddr); in adjust_segments()
661 seg->memsz += seg->vaddr - rounddown(seg->vaddr); in adjust_segments()
662 seg->vaddr = rounddown(seg->vaddr); in adjust_segments()
663 seg->offset = rounddown(seg->offset); in adjust_segments()
664 seg = TAILQ_NEXT(seg, link); in adjust_segments()
672 struct segment *seg = NULL; in populate_segments_legacy() local
676 TAILQ_FOREACH(seg, &elf->segs, link) { in populate_segments_legacy()
679 seg->vaddr - seg->memsz); in populate_segments_legacy()
680 size_t num_bytes = roundup(seg->memsz); in populate_segments_legacy()
685 va = seg->vaddr + elf->load_addr; in populate_segments_legacy()
688 if (!(seg->flags & PF_R)) in populate_segments_legacy()
695 res = sys_copy_from_ta_bin((void *)va, seg->filesz, in populate_segments_legacy()
696 elf->handle, seg->offset); in populate_segments_legacy()
703 elf->max_offs = seg->offset + seg->filesz; in populate_segments_legacy()
736 struct segment *seg = NULL; in populate_segments() local
741 TAILQ_FOREACH(seg, &elf->segs, link) { in populate_segments()
744 seg->vaddr - seg->memsz); in populate_segments()
746 if (seg->remapped_writeable) { in populate_segments()
747 size_t num_bytes = roundup(seg->vaddr + seg->memsz) - in populate_segments()
748 rounddown(seg->vaddr); in populate_segments()
751 va = rounddown(elf->load_addr + seg->vaddr); in populate_segments()
757 copy_remapped_to(elf, seg); in populate_segments()
761 size_t filesz = seg->filesz; in populate_segments()
762 size_t memsz = seg->memsz; in populate_segments()
763 size_t offset = seg->offset; in populate_segments()
764 size_t vaddr = seg->vaddr; in populate_segments()
820 if (seg->flags & PF_W) in populate_segments()
824 if (seg->flags & PF_X) in populate_segments()
826 if (!(seg->flags & PF_R)) in populate_segments()
868 struct segment *seg = NULL; in ta_elf_add_bti() local
871 TAILQ_FOREACH(seg, &elf->segs, link) { in ta_elf_add_bti()
872 vaddr_t va = elf->load_addr + seg->vaddr; in ta_elf_add_bti()
874 if (seg->flags & PF_X) { in ta_elf_add_bti()
875 res = sys_set_prot(va, seg->memsz, flags); in ta_elf_add_bti()
954 struct segment *seg = TAILQ_LAST(&elf->segs, segment_head); in map_segments() local
969 roundup(seg->vaddr + seg->memsz)); in map_segments()
972 roundup(seg->vaddr + seg->memsz)); in map_segments()
1102 struct segment *seg = TAILQ_FIRST(&elf->segs); in clean_elf_load_main() local
1106 va = rounddown(elf->load_addr + seg->vaddr); in clean_elf_load_main()
1107 if (seg->remapped_writeable) in clean_elf_load_main()
1108 num_bytes = roundup(seg->vaddr + seg->memsz) - in clean_elf_load_main()
1109 rounddown(seg->vaddr); in clean_elf_load_main()
1111 num_bytes = seg->memsz; in clean_elf_load_main()
1117 TAILQ_REMOVE(&elf->segs, seg, link); in clean_elf_load_main()
1118 free(seg); in clean_elf_load_main()
1277 struct segment *seg = NULL; in ta_elf_finalize_mappings() local
1282 TAILQ_FOREACH(seg, &elf->segs, link) { in ta_elf_finalize_mappings()
1283 vaddr_t va = elf->load_addr + seg->vaddr; in ta_elf_finalize_mappings()
1286 if (seg->flags & PF_W) in ta_elf_finalize_mappings()
1288 if (seg->flags & PF_X) in ta_elf_finalize_mappings()
1291 res = sys_set_prot(va, seg->memsz, flags); in ta_elf_finalize_mappings()
1350 struct ta_elf **elf, struct segment **seg, in get_next_in_order() argument
1360 assert(elf && seg && elf_idx); in get_next_in_order()
1362 s = *seg; in get_next_in_order()
1368 *seg = s; in get_next_in_order()
1391 *seg = TAILQ_FIRST(&e->segs); in get_next_in_order()
1400 struct segment *seg = NULL; in ta_elf_print_mappings() local
1411 get_next_in_order(elf_queue, &elf, &seg, &elf_idx); in ta_elf_print_mappings()
1418 if (seg) { in ta_elf_print_mappings()
1419 va = rounddown(seg->vaddr + elf->load_addr); in ta_elf_print_mappings()
1420 sz = roundup(seg->vaddr + seg->memsz) - in ta_elf_print_mappings()
1421 rounddown(seg->vaddr); in ta_elf_print_mappings()
1464 if (!seg) in ta_elf_print_mappings()
1467 offs = rounddown(seg->offset); in ta_elf_print_mappings()
1468 if (seg->flags & PF_R) in ta_elf_print_mappings()
1470 if (seg->flags & PF_W) in ta_elf_print_mappings()
1472 if (seg->flags & PF_X) in ta_elf_print_mappings()
1478 if (!get_next_in_order(elf_queue, &elf, &seg, &elf_idx)) in ta_elf_print_mappings()
1479 seg = NULL; in ta_elf_print_mappings()
1495 struct segment *seg = NULL; in find_exidx() local
1503 TAILQ_FOREACH(seg, &elf->segs, link) { in find_exidx()
1504 if (a < seg->vaddr) in find_exidx()
1506 if (a - seg->vaddr < seg->filesz) { in find_exidx()