Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/compat/hpux split aout-specific code to sepatate file hp...



details:   https://anonhg.NetBSD.org/src/rev/0e1dda0aaa54
branches:  trunk
changeset: 499905:0e1dda0aaa54
user:      jdolecek <jdolecek%NetBSD.org@localhost>
date:      Fri Dec 01 19:15:12 2000 +0000

description:
split aout-specific code to sepatate file hpux_exec_aout.c

diffstat:

 sys/compat/hpux/files.hpux       |    3 +-
 sys/compat/hpux/hpux_exec.c      |  184 +-------------------------
 sys/compat/hpux/hpux_exec_aout.c |  277 +++++++++++++++++++++++++++++++++++++++
 3 files changed, 280 insertions(+), 184 deletions(-)

diffs (truncated from 503 to 300 lines):

diff -r d6466552c992 -r 0e1dda0aaa54 sys/compat/hpux/files.hpux
--- a/sys/compat/hpux/files.hpux        Fri Dec 01 19:13:47 2000 +0000
+++ b/sys/compat/hpux/files.hpux        Fri Dec 01 19:15:12 2000 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: files.hpux,v 1.6 1999/08/25 04:50:08 thorpej Exp $
+#      $NetBSD: files.hpux,v 1.7 2000/12/01 19:15:12 jdolecek Exp $
 #
 # Config file description for machine-independent HPUX compat code.
 # Included by ports that need it.
@@ -10,6 +10,7 @@
 file   compat/hpux/hpux_file.c         compat_hpux
 file   compat/hpux/hpux_errno.c        compat_hpux
 file   compat/hpux/hpux_exec.c         compat_hpux
+file   compat/hpux/hpux_exec_aout.c    compat_hpux & exec_aout
 file   compat/hpux/hpux_ipc.c          compat_hpux
 file   compat/hpux/hpux_net.c          compat_hpux
 file   compat/hpux/hpux_sig.c          compat_hpux
diff -r d6466552c992 -r 0e1dda0aaa54 sys/compat/hpux/hpux_exec.c
--- a/sys/compat/hpux/hpux_exec.c       Fri Dec 01 19:13:47 2000 +0000
+++ b/sys/compat/hpux/hpux_exec.c       Fri Dec 01 19:15:12 2000 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: hpux_exec.c,v 1.19 2000/12/01 12:28:32 jdolecek Exp $  */
+/*     $NetBSD: hpux_exec.c,v 1.20 2000/12/01 19:15:12 jdolecek Exp $  */
 
 /*-
  * Copyright (c) 1996, 1997 The NetBSD Foundation, Inc.
@@ -99,10 +99,6 @@
 extern const char * const hpux_syscallnames[];
 extern int native_to_hpux_errno[];
 
-static int exec_hpux_prep_nmagic __P((struct proc *, struct exec_package *));
-static int exec_hpux_prep_zmagic __P((struct proc *, struct exec_package *));
-static int exec_hpux_prep_omagic __P((struct proc *, struct exec_package *));
-
 const struct emul emul_hpux = {
        "hpux",
        "/emul/hpux",
@@ -116,184 +112,6 @@
        esigcode,
 };
 
-int
-exec_hpux_makecmds(p, epp)
-       struct proc *p;
-       struct exec_package *epp;
-{
-       struct hpux_exec *hpux_ep = epp->ep_hdr;
-       short sysid, magic;
-       int error = ENOEXEC;
-
-       magic = HPUX_MAGIC(hpux_ep);
-       sysid = HPUX_SYSID(hpux_ep);
-
-       /*
-        * XXX This will lose if there's ever an hp700 port.
-        */
-       if (sysid != MID_HPUX)
-               return (ENOEXEC);
-
-       /*
-        * HP-UX is a 4k page size system, and executables assume
-        * this.
-        */
-       if (NBPG != HPUX_LDPGSZ)
-               return (ENOEXEC);
-
-       switch (magic) {
-       case OMAGIC:
-               error = exec_hpux_prep_omagic(p, epp);
-               break;
-
-       case NMAGIC:
-               error = exec_hpux_prep_nmagic(p, epp);
-               break;
-
-       case ZMAGIC:
-               error = exec_hpux_prep_zmagic(p, epp);
-               break;
-       }
-
-       if (error != 0)
-               kill_vmcmds(&epp->ep_vmcmds);
-
-       return (error);
-}
-
-static int
-exec_hpux_prep_nmagic(p, epp)
-       struct proc *p;
-       struct exec_package *epp;
-{
-       struct hpux_exec *execp = epp->ep_hdr;
-       long bsize, baddr;
-
-       epp->ep_taddr = 0;
-       epp->ep_tsize = execp->ha_text;
-       epp->ep_daddr = epp->ep_taddr + roundup(execp->ha_text, HPUX_LDPGSZ);
-       epp->ep_dsize = execp->ha_data + execp->ha_bss;
-       epp->ep_entry = execp->ha_entry;
-
-       /* set up command for text segment */
-       NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_readvn, execp->ha_text,
-           epp->ep_taddr, epp->ep_vp, HPUX_TXTOFF(*execp, NMAGIC),
-           VM_PROT_READ|VM_PROT_EXECUTE);
-
-       /* set up command for data segment */
-       NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_readvn, execp->ha_data,
-           epp->ep_daddr, epp->ep_vp, HPUX_DATAOFF(*execp, NMAGIC),
-           VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE);
-
-       /* set up command for bss segment */
-       baddr = roundup(epp->ep_daddr + execp->ha_data, NBPG);
-       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|VM_PROT_EXECUTE);
-
-       return (exec_aout_setup_stack(p, epp));
-}
-
-static int
-exec_hpux_prep_zmagic(p, epp)
-       struct proc *p;
-       struct exec_package *epp;
-{
-       struct hpux_exec *execp = epp->ep_hdr;
-       long bsize, baddr;
-       long nontext;
-
-       /*
-        * 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->ha_text != 0 || execp->ha_data != 0) &&
-           epp->ep_vp->v_writecount != 0)
-               return (ETXTBSY);
-       vn_marktext(epp->ep_vp);
-
-       /*
-        * HP-UX ZMAGIC executables need to have their segment
-        * sizes frobbed.
-        */
-       nontext = execp->ha_data + execp->ha_bss;
-       execp->ha_text = ctob(btoc(execp->ha_text));
-       execp->ha_data = ctob(btoc(execp->ha_data));
-       execp->ha_bss = nontext - execp->ha_data;
-       if (execp->ha_bss < 0)
-               execp->ha_bss = 0;
-
-       epp->ep_taddr = 0;
-       epp->ep_tsize = execp->ha_text;
-       epp->ep_daddr = epp->ep_taddr + roundup(execp->ha_text, HPUX_LDPGSZ);
-       epp->ep_dsize = execp->ha_data + execp->ha_bss;
-       epp->ep_entry = execp->ha_entry;
-
-       /* set up command for text segment */
-       NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_pagedvn, execp->ha_text,
-           epp->ep_taddr, epp->ep_vp, HPUX_TXTOFF(*execp, ZMAGIC),
-           VM_PROT_READ|VM_PROT_EXECUTE);
-
-       /* set up command for data segment */
-       NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_pagedvn, execp->ha_data,
-           epp->ep_daddr, epp->ep_vp, HPUX_DATAOFF(*execp, ZMAGIC),
-           VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE);
-
-       /* set up command for bss segment */
-       baddr = roundup(epp->ep_daddr + execp->ha_data, NBPG);
-       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|VM_PROT_EXECUTE);
-
-       return (exec_aout_setup_stack(p, epp));
-}
-
-/*
- * HP-UX's version of OMAGIC.
- */
-static int
-exec_hpux_prep_omagic(p, epp)
-       struct proc *p;
-       struct exec_package *epp;
-{
-       struct hpux_exec *execp = epp->ep_hdr;
-       long dsize, bsize, baddr;
-
-       epp->ep_taddr = 0;
-       epp->ep_tsize = execp->ha_text;
-       epp->ep_daddr = epp->ep_taddr + roundup(execp->ha_text, HPUX_LDPGSZ);
-       epp->ep_dsize = execp->ha_data + execp->ha_bss;
-       epp->ep_entry = execp->ha_entry;
-
-       /* set up command for text and data segments */
-       NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_readvn,
-           execp->ha_text + execp->ha_data, epp->ep_taddr, epp->ep_vp,
-           HPUX_TXTOFF(*execp, OMAGIC),
-           VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE);
-
-       /* set up command for bss segment */
-       baddr = roundup(epp->ep_daddr + execp->ha_data, NBPG);
-       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|VM_PROT_EXECUTE);
-
-       /*
-        * 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->ha_text - roundup(execp->ha_text, NBPG);
-       epp->ep_dsize = (dsize > 0) ? dsize : 0;
-       return (exec_aout_setup_stack(p, epp));
-}
-
 /*
  * The HP-UX execv(2) system call.
  *
diff -r d6466552c992 -r 0e1dda0aaa54 sys/compat/hpux/hpux_exec_aout.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/compat/hpux/hpux_exec_aout.c  Fri Dec 01 19:15:12 2000 +0000
@@ -0,0 +1,277 @@
+/*     $NetBSD: hpux_exec_aout.c,v 1.1 2000/12/01 19:15:12 jdolecek Exp $      */
+
+/*-
+ * Copyright (c) 1996, 1997 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Jason R. Thorpe.
+ *
+ * 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 the NetBSD
+ *     Foundation, Inc. and its contributors.
+ * 4. Neither the name of The NetBSD Foundation nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``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 FOUNDATION OR CONTRIBUTORS
+ * 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.
+ */
+
+/*
+ * Copyright (c) 1993, 1994 Christopher G. Demetriou
+ *
+ * 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
+ *     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.
+ */
+
+/*
+ * Glue for exec'ing HP-UX executables and the HP-UX execv() system call.
+ * Based on sys/kern/exec_aout.c
+ */
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/kernel.h>



Home | Main Index | Thread Index | Old Index