summaryrefslogtreecommitdiff
path: root/sys/kern
diff options
context:
space:
mode:
authorTheo de Raadt <deraadt@cvs.openbsd.org>2013-10-17 08:02:22 +0000
committerTheo de Raadt <deraadt@cvs.openbsd.org>2013-10-17 08:02:22 +0000
commit1c86921d81610e1ef2eb9efef0f9f1a890d366d1 (patch)
treea9ffc9257c80a7b70ebe3bb5f77753b490df0c8a /sys/kern
parent35ebe67b708457ec2cf2541a8d67f5698c58bee9 (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.c232
-rw-r--r--sys/kern/exec_conf.c16
-rw-r--r--sys/kern/exec_ecoff.c213
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 */