Lines Matching refs:ph
162 Elf_Phdr *ph, Elf_Addr *addr, Elf_Addr *size, int *prot, int flags)
172 if (ph->p_align > 1) {
173 *addr = ELF_TRUNC(*addr, ph->p_align);
174 diff = ph->p_vaddr - ELF_TRUNC(ph->p_vaddr, ph->p_align);
176 base = *addr + trunc_page(ph->p_vaddr)
177 - ELF_TRUNC(ph->p_vaddr, ph->p_align);
180 base = *addr + trunc_page(ph->p_vaddr) - ph->p_vaddr;
183 *addr = ph->p_vaddr;
184 if (ph->p_align > 1)
185 *addr = ELF_TRUNC(*addr, ph->p_align);
186 base = trunc_page(ph->p_vaddr);
187 diff = ph->p_vaddr - *addr;
189 bdiff = ph->p_vaddr - trunc_page(ph->p_vaddr);
197 *prot |= (ph->p_flags & PF_R) ? PROT_READ : 0;
198 *prot |= (ph->p_flags & PF_W) ? PROT_WRITE : 0;
199 if ((ph->p_flags & PF_W) == 0)
200 *prot |= (ph->p_flags & PF_X) ? PROT_EXEC : 0;
209 if ((ph->p_flags & (PF_X | PF_W)) != (PF_X | PF_W) &&
210 ((ph->p_flags & PF_OPENBSD_MUTABLE) == 0))
212 if ((flags & VMCMD_TEXTREL) && (ph->p_flags & PF_W) == 0)
215 msize = ph->p_memsz + diff;
216 offset = ph->p_offset - bdiff;
217 lsize = ph->p_filesz + bdiff;
224 if (ph->p_flags & PF_W) {
241 rm = round_page(*addr + ph->p_memsz + diff);
242 rf = round_page(*addr + ph->p_filesz + diff);
353 Elf_Phdr *ph = NULL, *syscall_ph = NULL;
396 ph = mallocarray(eh.e_phnum, sizeof(Elf_Phdr), M_TEMP, M_WAITOK);
399 if ((error = elf_read_from(p, nd.ni_vp, eh.e_phoff, ph, phsize)) != 0)
403 if ((ph[i].p_align > 1) && !powerof2(ph[i].p_align)) {
408 if (ph[i].p_type == PT_LOAD) {
409 if (ph[i].p_filesz > ph[i].p_memsz ||
410 ph[i].p_memsz == 0) {
414 loadmap[idx].vaddr = trunc_page(ph[i].p_vaddr);
415 loadmap[idx].memsz = round_page (ph[i].p_vaddr +
416 ph[i].p_memsz - loadmap[idx].vaddr);
417 file_align = ph[i].p_align;
489 switch (ph[i].p_type) {
494 base_ph = &ph[i];
497 addr = ph[i].p_vaddr - base_ph->p_vaddr;
500 &ph[i], &addr, &size, &prot, flags);
502 if (eh.e_entry >= ph[i].p_vaddr &&
503 eh.e_entry < (ph[i].p_vaddr + size)) {
510 ELF_TRUNC(ph[i].p_vaddr,ph[i].p_align);
529 if (ph[i].p_memsz > randomizequota) {
533 randomizequota -= ph[i].p_memsz;
535 ph[i].p_memsz, ph[i].p_vaddr + pos, NULLVP, 0, 0);
542 ph[i].p_memsz, ph[i].p_vaddr + pos, NULLVP, 0, 0);
548 ph[i].p_memsz, ph[i].p_vaddr + pos, NULLVP, 0, 0);
551 syscall_ph = &ph[i];
585 free(ph, M_TEMP, phsize);
604 Elf_Phdr *ph, *pp, *base_ph = NULL, *syscall_ph = NULL;
633 ph = mallocarray(eh->e_phnum, sizeof(Elf_Phdr), M_TEMP, M_WAITOK);
636 if ((error = elf_read_from(p, epp->ep_vp, eh->e_phoff, ph,
643 for (i = 0, pp = ph; i < eh->e_phnum; i++, pp++) {
693 for (i = 0, pp = ph; i < eh->e_phnum; i++, pp++) {
726 for (i = 0, pp = ph; i < eh->e_phnum; i++, pp++) {
825 if (ph[i].p_memsz > randomizequota) {
829 randomizequota -= ph[i].p_memsz;
831 ph[i].p_memsz, ph[i].p_vaddr + exe_base, NULLVP, 0, 0);
838 ph[i].p_memsz, ph[i].p_vaddr + exe_base, NULLVP, 0, 0);
844 ph[i].p_memsz, ph[i].p_vaddr + exe_base, NULLVP, 0, 0);
848 syscall_ph = &ph[i];
916 free(ph, M_TEMP, phsize);
923 free(ph, M_TEMP, phsize);
1064 Elf_Phdr *hph, *ph;
1075 for (ph = hph; ph < &hph[eh->e_phnum]; ph++) {
1076 if (ph->p_type == PT_OPENBSD_WXNEEDED) {
1080 if (ph->p_type == PT_OPENBSD_NOBTCFI) {
1085 if (ph->p_type != PT_NOTE || ph->p_filesz > 1024)
1088 if (np && ph->p_filesz != pfilesz) {
1093 np = malloc(ph->p_filesz, M_TEMP, M_WAITOK);
1094 pfilesz = ph->p_filesz;
1095 if ((error = elf_read_from(p, epp->ep_vp, ph->p_offset,
1096 np, ph->p_filesz)) != 0)
1099 for (offset = 0; offset < ph->p_filesz; offset += total) {
1102 if (offset + sizeof(Elf_Note) > ph->p_filesz)
1106 if (offset + total > ph->p_filesz)