Lines Matching defs:seg

39 static void	insert_to_inseg_list(struct segment *seg, struct section *sec);
56 struct segment *seg;
74 STAILQ_FOREACH(seg, &ecp->v_seg, seg_list) {
75 if (s->off < seg->off || (s->vma < seg->vaddr && !s->pseudo))
77 if (s->off + s->sz > seg->off + seg->fsz &&
80 if (s->vma + s->sz > seg->vaddr + seg->msz)
82 if (seg->type == PT_TLS && ((s->flags & SHF_TLS) == 0))
85 insert_to_inseg_list(seg, s);
86 if (seg->type == PT_LOAD)
87 s->seg = seg;
88 else if (seg->type == PT_TLS)
89 s->seg_tls = seg;
91 s->vma = seg->vaddr + (s->off - seg->off);
92 if (seg->paddr > 0)
93 s->lma = seg->paddr + (s->off - seg->off);
106 struct segment *seg;
125 if (ecp->change_addr != 0 && s->seg != NULL &&
126 s->seg->paddr > 0)
157 if (s->seg == NULL) {
183 if (vma < s->vma - s->seg->vaddr)
187 start = vma - (s->vma - s->seg->vaddr);
188 if (s == s->seg->v_sec[s->seg->nsec - 1])
189 end = start + s->seg->msz;
191 end = s->seg->vaddr + s->seg->msz;
194 if (s == s->seg->v_sec[0])
197 start = s->seg->vaddr;
198 end = vma + (s->seg->vaddr + s->seg->msz - s->vma);
210 STAILQ_FOREACH(seg, &ecp->v_seg, seg_list) {
211 if (seg == s->seg || seg->type != PT_LOAD)
213 if (start > seg->vaddr + seg->msz)
215 if (end < seg->vaddr)
219 s->name, (uintmax_t) seg->vaddr,
220 (uintmax_t) (seg->vaddr + seg->msz));
235 for (i = 0; i < s->seg->nsec; i++) {
236 s0 = s->seg->v_sec[i];
245 for (i = i + 1; i < s->seg->nsec; i++) {
246 s0 = s->seg->v_sec[i];
262 for (i = 0; i < s->seg->nsec; i++)
263 if (s->seg->v_sec[i] == s)
265 if (i >= s->seg->nsec)
269 for (; i < s->seg->nsec; i++) {
270 s0 = s->seg->v_sec[i];
276 if (s != s->seg->v_sec[0]) {
297 STAILQ_FOREACH(seg, &ecp->v_seg, seg_list) {
298 if (seg->type != PT_LOAD)
300 for (i = seg->nsec - 1; i >= 0; i--)
301 if (seg->v_sec[i]->type != SHT_NOBITS)
306 s = seg->v_sec[i];
308 s0 = seg->v_sec[i];
341 if (!s->loadable || s->seg == NULL || s->seg->paddr == 0)
382 for (i = 0; i < s->seg->nsec; i++) {
383 s0 = s->seg->v_sec[i];
399 for (i = 0; i < s->seg->nsec; i++)
400 if (s->seg->v_sec[i] == s)
402 if (i >= s->seg->nsec)
406 for (; i < s->seg->nsec; i++) {
407 s0 = s->seg->v_sec[i];
442 insert_to_inseg_list(struct segment *seg, struct section *sec)
447 seg->nsec++;
448 seg->v_sec = realloc(seg->v_sec, seg->nsec * sizeof(*seg->v_sec));
449 if (seg->v_sec == NULL)
456 for (i = seg->nsec - 1; i > 0; i--) {
457 s = seg->v_sec[i - 1];
459 seg->v_sec[i] = sec;
462 seg->v_sec[i] = s;
465 seg->v_sec[0] = sec;
471 struct segment *seg;
493 if ((seg = calloc(1, sizeof(*seg))) == NULL)
495 seg->vaddr = iphdr.p_vaddr;
496 seg->paddr = iphdr.p_paddr;
497 seg->off = iphdr.p_offset;
498 seg->fsz = iphdr.p_filesz;
499 seg->msz = iphdr.p_memsz;
500 seg->type = iphdr.p_type;
501 STAILQ_INSERT_TAIL(&ecp->v_seg, seg, seg_list);
508 struct segment *seg;
513 STAILQ_FOREACH(seg, &ecp->v_seg, seg_list) {
514 if (seg->type == PT_PHDR) {
518 seg->vaddr = s->vma +
521 seg->paddr = s->lma +
526 seg->fsz = seg->msz = gelf_fsize(ecp->eout, ELF_T_PHDR,
531 if (seg->nsec > 0) {
532 s = seg->v_sec[0];
533 seg->vaddr = s->vma;
534 seg->paddr = s->lma;
537 seg->fsz = seg->msz = 0;
538 for (i = 0; i < seg->nsec; i++) {
539 s = seg->v_sec[i];
540 seg->msz = s->vma + s->sz - seg->vaddr;
542 seg->fsz = s->off + s->sz - seg->off;
568 STAILQ_FOREACH(seg, &ecp->v_seg, seg_list) {
579 ophdr.p_vaddr = seg->vaddr;
580 ophdr.p_paddr = seg->paddr;
583 ophdr.p_offset = seg->off;
584 ophdr.p_filesz = seg->fsz;
585 ophdr.p_memsz = seg->msz;