diff options
author | Theo de Raadt <deraadt@cvs.openbsd.org> | 2013-10-17 08:02:22 +0000 |
---|---|---|
committer | Theo de Raadt <deraadt@cvs.openbsd.org> | 2013-10-17 08:02:22 +0000 |
commit | 1c86921d81610e1ef2eb9efef0f9f1a890d366d1 (patch) | |
tree | a9ffc9257c80a7b70ebe3bb5f77753b490df0c8a /sys/kern | |
parent | 35ebe67b708457ec2cf2541a8d67f5698c58bee9 (diff) |
Remove support for a.out and ecoff. We only do elf now.
ok miod
Diffstat (limited to 'sys/kern')
-rw-r--r-- | sys/kern/exec_aout.c | 232 | ||||
-rw-r--r-- | sys/kern/exec_conf.c | 16 | ||||
-rw-r--r-- | sys/kern/exec_ecoff.c | 213 |
3 files changed, 2 insertions, 459 deletions
diff --git a/sys/kern/exec_aout.c b/sys/kern/exec_aout.c deleted file mode 100644 index 8cc0da6b174..00000000000 --- a/sys/kern/exec_aout.c +++ /dev/null @@ -1,232 +0,0 @@ -/* $OpenBSD: exec_aout.c,v 1.11 2012/09/29 22:23:40 miod Exp $ */ -/* $NetBSD: exec_aout.c,v 1.14 1996/02/04 02:15:01 christos Exp $ */ - -/* - * Copyright (c) 1993, 1994 Christopher G. Demetriou - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Christopher G. Demetriou. - * 4. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/proc.h> -#include <sys/malloc.h> -#include <sys/vnode.h> -#include <sys/exec.h> -#include <sys/resourcevar.h> -#include <uvm/uvm_extern.h> - -#if defined(_KERN_DO_AOUT) -#if defined(COMPAT_AOUT) -void aout_compat_setup(struct exec_package *epp); -#endif - -/* - * exec_aout_makecmds(): Check if it's an a.out-format executable. - * - * Given a proc pointer and an exec package pointer, see if the referent - * of the epp is in a.out format. First check 'standard' magic numbers for - * this architecture. If that fails, try a cpu-dependent hook. - * - * This function, in the former case, or the hook, in the latter, is - * responsible for creating a set of vmcmds which can be used to build - * the process's vm space and inserting them into the exec package. - */ - -int -exec_aout_makecmds(struct proc *p, struct exec_package *epp) -{ - u_long midmag, magic; - u_short mid; - int error; - struct exec *execp = epp->ep_hdr; - - if (epp->ep_hdrvalid < sizeof(struct exec)) - return ENOEXEC; - - midmag = ntohl(execp->a_midmag); - mid = (midmag >> 16) & 0x3ff; - magic = midmag & 0xffff; - - midmag = mid << 16 | magic; - - switch (midmag) { - case (MID_MACHINE << 16) | ZMAGIC: - error = exec_aout_prep_zmagic(p, epp); - break; - case (MID_MACHINE << 16) | NMAGIC: - error = exec_aout_prep_nmagic(p, epp); - break; - case (MID_MACHINE << 16) | OMAGIC: - error = exec_aout_prep_omagic(p, epp); - break; - default: - error = cpu_exec_aout_makecmds(p, epp); - } - - if (error) - kill_vmcmds(&epp->ep_vmcmds); -#ifdef COMPAT_AOUT - aout_compat_setup(epp); -#endif - - return error; -} - -/* - * exec_aout_prep_zmagic(): Prepare a 'native' ZMAGIC binary's exec package - * - * First, set of the various offsets/lengths in the exec package. - * - * Then, mark the text image busy (so it can be demand paged) or error - * out if this is not possible. Finally, set up vmcmds for the - * text, data, bss, and stack segments. - */ - -int -exec_aout_prep_zmagic(struct proc *p, struct exec_package *epp) -{ - struct exec *execp = epp->ep_hdr; - - epp->ep_taddr = USRTEXT; - epp->ep_tsize = execp->a_text; - epp->ep_daddr = epp->ep_taddr + execp->a_text; - epp->ep_dsize = execp->a_data + execp->a_bss; - epp->ep_entry = execp->a_entry; - - /* - * check if vnode is in open for writing, because we want to - * demand-page out of it. if it is, don't do it, for various - * reasons - */ - if ((execp->a_text != 0 || execp->a_data != 0) && - epp->ep_vp->v_writecount != 0) { -#ifdef DIAGNOSTIC - if (epp->ep_vp->v_flag & VTEXT) - panic("exec: a VTEXT vnode has writecount != 0"); -#endif - return ETXTBSY; - } - vn_marktext(epp->ep_vp); - - /* set up command for text segment */ - NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_pagedvn, execp->a_text, - epp->ep_taddr, epp->ep_vp, 0, VM_PROT_READ|VM_PROT_EXECUTE); - - /* set up command for data segment */ - NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_pagedvn, execp->a_data, - epp->ep_daddr, epp->ep_vp, execp->a_text, - VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE); - - /* set up command for bss segment */ - NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_zero, execp->a_bss, - epp->ep_daddr + execp->a_data, NULLVP, 0, - VM_PROT_READ|VM_PROT_WRITE); - - return exec_setup_stack(p, epp); -} - -/* - * exec_aout_prep_nmagic(): Prepare a 'native' NMAGIC binary's exec package - */ - -int -exec_aout_prep_nmagic(struct proc *p, struct exec_package *epp) -{ - struct exec *execp = epp->ep_hdr; - long bsize, baddr; - - epp->ep_taddr = USRTEXT; - epp->ep_tsize = execp->a_text; - epp->ep_daddr = roundup(epp->ep_taddr + execp->a_text, __LDPGSZ); - epp->ep_dsize = execp->a_data + execp->a_bss; - epp->ep_entry = execp->a_entry; - - /* set up command for text segment */ - NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_readvn, execp->a_text, - epp->ep_taddr, epp->ep_vp, sizeof(struct exec), - VM_PROT_READ|VM_PROT_EXECUTE); - - /* set up command for data segment */ - NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_readvn, execp->a_data, - epp->ep_daddr, epp->ep_vp, execp->a_text + sizeof(struct exec), - VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE); - - /* set up command for bss segment */ - baddr = round_page(epp->ep_daddr + execp->a_data); - bsize = epp->ep_daddr + epp->ep_dsize - baddr; - if (bsize > 0) - NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_zero, bsize, baddr, - NULLVP, 0, VM_PROT_READ|VM_PROT_WRITE); - - return exec_setup_stack(p, epp); -} - -/* - * exec_aout_prep_omagic(): Prepare a 'native' OMAGIC binary's exec package - */ - -int -exec_aout_prep_omagic(struct proc *p, struct exec_package *epp) -{ - struct exec *execp = epp->ep_hdr; - long dsize, bsize, baddr; - - epp->ep_taddr = USRTEXT; - epp->ep_tsize = execp->a_text; - epp->ep_daddr = epp->ep_taddr + execp->a_text; - epp->ep_dsize = execp->a_data + execp->a_bss; - epp->ep_entry = execp->a_entry; - - /* set up command for text and data segments */ - NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_readvn, - execp->a_text + execp->a_data, epp->ep_taddr, epp->ep_vp, - sizeof(struct exec), VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE); - - /* set up command for bss segment */ - baddr = round_page(epp->ep_daddr + execp->a_data); - bsize = epp->ep_daddr + epp->ep_dsize - baddr; - if (bsize > 0) - NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_zero, bsize, baddr, - NULLVP, 0, VM_PROT_READ|VM_PROT_WRITE); - - /* - * Make sure (# of pages) mapped above equals (vm_tsize + vm_dsize); - * obreak(2) relies on this fact. Both `vm_tsize' and `vm_dsize' are - * computed (in execve(2)) by rounding *up* `ep_tsize' and `ep_dsize' - * respectively to page boundaries. - * Compensate `ep_dsize' for the amount of data covered by the last - * text page. - */ - dsize = epp->ep_dsize + execp->a_text - round_page(execp->a_text); - epp->ep_dsize = (dsize > 0) ? dsize : 0; - /* round to a page boundary, uvm depends on this */ - epp->ep_daddr = round_page(epp->ep_daddr); - return exec_setup_stack(p, epp); -} - -#endif /* _KERN_DO_AOUT */ diff --git a/sys/kern/exec_conf.c b/sys/kern/exec_conf.c index c12e806e566..9fb907405fb 100644 --- a/sys/kern/exec_conf.c +++ b/sys/kern/exec_conf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: exec_conf.c,v 1.29 2013/02/09 21:03:22 miod Exp $ */ +/* $OpenBSD: exec_conf.c,v 1.30 2013/10/17 08:02:19 deraadt Exp $ */ /* $NetBSD: exec_conf.c,v 1.16 1995/12/09 05:34:47 cgd Exp $ */ /* @@ -47,21 +47,10 @@ #include <compat/linux/linux_exec.h> #endif -extern struct emul emul_native, emul_elf32, emul_elf64, emul_aout, - emul_linux_elf, emul_linux_aout; +extern struct emul emul_native, emul_elf32, emul_elf64, emul_linux_elf; struct execsw execsw[] = { { EXEC_SCRIPT_HDRSZ, exec_script_makecmds, &emul_native, }, /* shell scripts */ -#ifdef _KERN_DO_AOUT -#ifdef COMPAT_AOUT - { sizeof(struct exec), exec_aout_makecmds, &emul_aout }, -#else - { sizeof(struct exec), exec_aout_makecmds, &emul_native }, /* a.out binaries */ -#endif -#endif -#ifdef _KERN_DO_ECOFF - { ECOFF_HDR_SIZE, exec_ecoff_makecmds, &emul_native }, /* ecoff binaries */ -#endif #ifdef _KERN_DO_ELF { sizeof(Elf32_Ehdr), exec_elf32_makecmds, &emul_native }, /* elf binaries */ #endif @@ -69,7 +58,6 @@ struct execsw execsw[] = { { sizeof(Elf64_Ehdr), exec_elf64_makecmds, &emul_native }, /* elf binaries */ #endif /* ELF64 */ #ifdef COMPAT_LINUX - { LINUX_AOUT_HDR_SIZE, exec_linux_aout_makecmds, &emul_linux_aout }, /* linux a.out */ { sizeof(Elf32_Ehdr), exec_linux_elf32_makecmds, &emul_linux_elf }, #endif #ifdef LKM diff --git a/sys/kern/exec_ecoff.c b/sys/kern/exec_ecoff.c deleted file mode 100644 index 4fe1bbbb513..00000000000 --- a/sys/kern/exec_ecoff.c +++ /dev/null @@ -1,213 +0,0 @@ -/* $OpenBSD: exec_ecoff.c,v 1.10 2005/11/12 04:31:24 jsg Exp $ */ -/* $NetBSD: exec_ecoff.c,v 1.8 1996/05/19 20:36:06 jonathan Exp $ */ - -/* - * Copyright (c) 1994 Adam Glass - * Copyright (c) 1993, 1994, 1996 Christopher G. Demetriou - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Christopher G. Demetriou. - * 4. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/proc.h> -#include <sys/malloc.h> -#include <sys/vnode.h> -#include <sys/exec.h> -#include <sys/resourcevar.h> -#include <uvm/uvm_extern.h> - -#if defined(_KERN_DO_ECOFF) - -#include <sys/exec_ecoff.h> - -/* - * exec_ecoff_makecmds(): Check if it's an ecoff-format executable. - * - * Given a proc pointer and an exec package pointer, see if the referent - * of the epp is in ecoff format. Check 'standard' magic numbers for - * this architecture. If that fails, return failure. - * - * This function is responsible for creating a set of vmcmds which can be - * used to build the process's vm space and inserting them into the exec - * package. - */ -int -exec_ecoff_makecmds(struct proc *p, struct exec_package *epp) -{ - int error; - struct ecoff_exechdr *execp = epp->ep_hdr; - - if (epp->ep_hdrvalid < ECOFF_HDR_SIZE) - return ENOEXEC; - - if (ECOFF_BADMAG(execp)) - return ENOEXEC; - - switch (execp->a.magic) { - case ECOFF_OMAGIC: - error = exec_ecoff_prep_omagic(p, epp); - break; - case ECOFF_NMAGIC: - error = exec_ecoff_prep_nmagic(p, epp); - break; - case ECOFF_ZMAGIC: - error = exec_ecoff_prep_zmagic(p, epp); - break; - default: - return ENOEXEC; - } - - if (error == 0) - error = cpu_exec_ecoff_hook(p, epp); - - if (error) - kill_vmcmds(&epp->ep_vmcmds); - - return error; -} - -/* - * exec_ecoff_prep_omagic(): Prepare a ECOFF OMAGIC binary's exec package - */ -int -exec_ecoff_prep_omagic(struct proc *p, struct exec_package *epp) -{ - struct ecoff_exechdr *execp = epp->ep_hdr; - struct ecoff_aouthdr *eap = &execp->a; - - epp->ep_taddr = ECOFF_SEGMENT_ALIGN(execp, eap->text_start); - epp->ep_tsize = eap->tsize; - epp->ep_daddr = ECOFF_SEGMENT_ALIGN(execp, eap->data_start); - epp->ep_dsize = eap->dsize + eap->bsize; - epp->ep_entry = eap->entry; - - /* set up command for text and data segments */ - NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_readvn, - eap->tsize + eap->dsize, epp->ep_taddr, epp->ep_vp, - ECOFF_TXTOFF(execp), - VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE); - - /* set up command for bss segment */ - if (eap->bsize > 0) - NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_zero, eap->bsize, - ECOFF_SEGMENT_ALIGN(execp, eap->bss_start), NULLVP, 0, - VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE); - - return exec_setup_stack(p, epp); -} - -/* - * exec_ecoff_prep_nmagic(): Prepare a 'native' NMAGIC ECOFF binary's exec - * package. - */ -int -exec_ecoff_prep_nmagic(struct proc *p, struct exec_package *epp) -{ - struct ecoff_exechdr *execp = epp->ep_hdr; - struct ecoff_aouthdr *eap = &execp->a; - - epp->ep_taddr = ECOFF_SEGMENT_ALIGN(execp, eap->text_start); - epp->ep_tsize = eap->tsize; - epp->ep_daddr = ECOFF_ROUND(eap->data_start, ECOFF_LDPGSZ); - epp->ep_dsize = eap->dsize + eap->bsize; - epp->ep_entry = eap->entry; - - /* set up command for text segment */ - NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_readvn, epp->ep_tsize, - epp->ep_taddr, epp->ep_vp, ECOFF_TXTOFF(execp), - VM_PROT_READ|VM_PROT_EXECUTE); - - /* set up command for data segment */ - NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_readvn, epp->ep_dsize, - epp->ep_daddr, epp->ep_vp, ECOFF_DATOFF(execp), - VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE); - - /* set up command for bss segment */ - if (eap->bsize > 0) - NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_zero, eap->bsize, - ECOFF_SEGMENT_ALIGN(execp, eap->bss_start), NULLVP, 0, - VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE); - - return exec_setup_stack(p, epp); -} - -/* - * exec_ecoff_prep_zmagic(): Prepare a ECOFF ZMAGIC binary's exec package - * - * First, set the various offsets/lengths in the exec package. - * - * Then, mark the text image busy (so it can be demand paged) or error - * out if this is not possible. Finally, set up vmcmds for the - * text, data, bss, and stack segments. - */ -int -exec_ecoff_prep_zmagic(struct proc *p, struct exec_package *epp) -{ - struct ecoff_exechdr *execp = epp->ep_hdr; - struct ecoff_aouthdr *eap = &execp->a; - - epp->ep_taddr = ECOFF_SEGMENT_ALIGN(execp, eap->text_start); - epp->ep_tsize = eap->tsize; - epp->ep_daddr = ECOFF_SEGMENT_ALIGN(execp, eap->data_start); - epp->ep_dsize = eap->dsize + eap->bsize; - epp->ep_entry = eap->entry; - - /* - * check if vnode is in open for writing, because we want to - * demand-page out of it. if it is, don't do it, for various - * reasons - */ - if ((eap->tsize != 0 || eap->dsize != 0) && - epp->ep_vp->v_writecount != 0) { -#ifdef DIAGNOSTIC - if (epp->ep_vp->v_flag & VTEXT) - panic("exec: a VTEXT vnode has writecount != 0"); -#endif - return ETXTBSY; - } - vn_marktext(epp->ep_vp); - - /* set up command for text segment */ - NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_pagedvn, eap->tsize, - epp->ep_taddr, epp->ep_vp, ECOFF_TXTOFF(execp), - VM_PROT_READ|VM_PROT_EXECUTE); - - /* set up command for data segment */ - NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_pagedvn, eap->dsize, - epp->ep_daddr, epp->ep_vp, ECOFF_DATOFF(execp), - VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE); - - /* set up command for bss segment */ - NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_zero, eap->bsize, - ECOFF_SEGMENT_ALIGN(execp, eap->bss_start), NULLVP, 0, - VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE); - - return exec_setup_stack(p, epp); -} - -#endif /* _KERN_DO_ECOFF */ |