Lines Matching refs:epp
129 elf_placedynexec(struct exec_package *epp, Elf_Ehdr *eh, Elf_Phdr *ph)
138 offset = (Elf_Addr)pax_aslr_exec_offset(epp, align);
139 if (offset < epp->ep_vm_minaddr)
140 offset = roundup(epp->ep_vm_minaddr, align);
149 epp->ep_entryoffset = offset;
420 elf_load_interp(struct lwp *l, struct exec_package *epp, char *path,
440 use_topdown = epp->ep_flags & EXEC_TOPDOWN_VM;
450 vp = epp->ep_interp;
452 error = emul_find_interp(l, epp, path);
455 vp = epp->ep_interp;
458 epp->ep_interp = NULL;
482 epp->ep_vap->va_mode &= ~(S_ISUID | S_ISGID);
549 addr = (*epp->ep_esch->es_emul->e_vm_default_addr)(p,
550 epp->ep_daddr,
553 addr += (Elf_Addr)pax_aslr_rtld_offset(epp, base_ph->p_align,
650 exec_elf_makecmds(struct lwp *l, struct exec_package *epp)
652 Elf_Ehdr *eh = epp->ep_hdr;
661 if (epp->ep_hdrvalid < sizeof(Elf_Ehdr)) {
662 DPRINTF("small header %#x", epp->ep_hdrvalid);
682 vn_lock(epp->ep_vp, LK_EXCLUSIVE | LK_RETRY);
683 error = vn_marktext(epp->ep_vp);
685 VOP_UNLOCK(epp->ep_vp);
696 error = exec_read(l, epp->ep_vp, eh->e_phoff, ph, phsize,
699 VOP_UNLOCK(epp->ep_vp);
703 epp->ep_taddr = epp->ep_tsize = ELFDEFNNAME(NO_ADDR);
704 epp->ep_daddr = epp->ep_dsize = ELFDEFNNAME(NO_ADDR);
713 VOP_UNLOCK(epp->ep_vp);
717 error = exec_read(l, epp->ep_vp, pp->p_offset, interp,
720 VOP_UNLOCK(epp->ep_vp);
727 VOP_UNLOCK(epp->ep_vp);
743 if (epp->ep_esch->u.elf_probe_func) {
746 error = (*epp->ep_esch->u.elf_probe_func)(l, epp, eh, interp,
749 VOP_UNLOCK(epp->ep_vp);
755 if (is_dyn && (error = elf_placedynexec(epp, eh, ph)) != 0) {
756 VOP_UNLOCK(epp->ep_vp);
769 if ((error = elf_load_psection(&epp->ep_vmcmds,
770 epp->ep_vp, &ph[i], &addr, &size, VMCMD_FIXED))
772 VOP_UNLOCK(epp->ep_vp);
782 if (epp->ep_taddr == ELFDEFNNAME(NO_ADDR) ||
783 size > epp->ep_tsize) {
784 epp->ep_taddr = addr;
785 epp->ep_tsize = size;
789 epp->ep_daddr = addr;
790 epp->ep_dsize = size;
818 VOP_UNLOCK(epp->ep_vp);
820 if (epp->ep_vmcmds.evs_used == 0) {
828 if (epp->ep_daddr == ELFDEFNNAME(NO_ADDR)) {
829 epp->ep_daddr = round_page(end_text);
830 epp->ep_dsize = 0;
838 u_int nused = epp->ep_vmcmds.evs_used;
841 if ((error = elf_load_interp(l, epp, interp,
842 &epp->ep_vmcmds, &interp_offset, &pos)) != 0) {
845 if (epp->ep_vmcmds.evs_used == nused) {
853 ap->arg_interp = epp->ep_vmcmds.evs_cmds[nused].ev_addr;
854 epp->ep_entryoffset = interp_offset;
855 epp->ep_entry = ap->arg_interp + interp_offset;
859 epp->ep_entry = eh->e_entry;
860 if (epp->ep_flags & EXEC_FORCEAUX) {
873 epp->ep_emul_arg = ap;
874 epp->ep_emul_arg_free = elf_free_emul_arg;
879 NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_readvn, PAGE_SIZE, 0,
880 epp->ep_vp, 0, VM_PROT_READ);
883 error = (*epp->ep_esch->es_setup_stack)(l, epp);
893 exec_free_emul_arg(epp);
895 kill_vmcmds(&epp->ep_vmcmds);
900 netbsd_elf_signature(struct lwp *l, struct exec_package *epp,
910 epp->ep_pax_flags = 0;
919 error = exec_read(l, epp->ep_vp, eh->e_phoff, ph, phsize,
934 error = exec_read(l, epp->ep_vp, ph[i].p_offset, nbuf, nlen,
968 isnetbsd |= netbsd_elf_note(epp, np, ndata, ndesc);
984 netbsd_elf_note(struct exec_package *epp,
1003 memcpy(&epp->ep_osversion, ndesc,
1036 pax_setup_elf_flags(epp, flags);
1048 if (np->n_descsz > sizeof(epp->ep_machine_arch)) {
1061 strlcpy(epp->ep_machine_arch, ndesc,
1062 sizeof(epp->ep_machine_arch));
1074 ELF_MD_MCMODEL_CHECK(epp, ndesc, np->n_descsz);
1108 epp->ep_kname, np->n_type, badnote, np->n_namesz,
1118 netbsd_elf_probe(struct lwp *l, struct exec_package *epp, void *eh, char *itp,
1123 if ((error = netbsd_elf_signature(l, epp, eh)) != 0)
1126 if ((error = ELF_MD_PROBE_FUNC(l, epp, eh, itp, pos)) != 0)
1131 epp->ep_flags |= EXEC_FORCEAUX;