Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/compat/netbsd32 put a.out/elf32 specific things in netbs...
details: https://anonhg.NetBSD.org/src/rev/a732514fe1d7
branches: trunk
changeset: 499924:a732514fe1d7
user: jdolecek <jdolecek%NetBSD.org@localhost>
date: Fri Dec 01 21:51:08 2000 +0000
description:
put a.out/elf32 specific things in netbsd32_exec_{aout|elf32}.c
emul_netbsd32 was moved to netbsd32_netbsd.c
g/c netbsd32_exec.c now
diffstat:
sys/compat/netbsd32/files.netbsd32 | 5 +-
sys/compat/netbsd32/netbsd32_exec.c | 445 ------------------------------
sys/compat/netbsd32/netbsd32_exec_aout.c | 258 +++++++++++++++++
sys/compat/netbsd32/netbsd32_exec_elf32.c | 162 ++++++++++
4 files changed, 423 insertions(+), 447 deletions(-)
diffs (truncated from 896 to 300 lines):
diff -r 79f1ce280021 -r a732514fe1d7 sys/compat/netbsd32/files.netbsd32
--- a/sys/compat/netbsd32/files.netbsd32 Fri Dec 01 21:48:24 2000 +0000
+++ b/sys/compat/netbsd32/files.netbsd32 Fri Dec 01 21:51:08 2000 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: files.netbsd32,v 1.6 1999/10/11 01:36:21 eeh Exp $
+# $NetBSD: files.netbsd32,v 1.7 2000/12/01 21:51:08 jdolecek Exp $
#
# config file description for machine-independent netbsd32 compat code.
# included by ports that need it.
@@ -6,7 +6,8 @@
# ports should define any machine-specific files they need in their
# own file lists.
-file compat/netbsd32/netbsd32_exec.c compat_netbsd32
+file compat/netbsd32/netbsd32_exec_elf32.c compat_netbsd32 & exec_elf32
+file compat/netbsd32/netbsd32_exec_aout.c compat_netbsd32 & exec_aout
file compat/netbsd32/netbsd32_netbsd.c compat_netbsd32
file compat/netbsd32/netbsd32_ioctl.c compat_netbsd32
file compat/netbsd32/netbsd32_sysent.c compat_netbsd32
diff -r 79f1ce280021 -r a732514fe1d7 sys/compat/netbsd32/netbsd32_exec.c
--- a/sys/compat/netbsd32/netbsd32_exec.c Fri Dec 01 21:48:24 2000 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,445 +0,0 @@
-/* $NetBSD: netbsd32_exec.c,v 1.26 2000/12/01 12:28:33 jdolecek Exp $ */
-/* from: NetBSD: exec_aout.c,v 1.15 1996/09/26 23:34:46 cgd Exp */
-
-/*
- * Copyright (c) 1998 Matthew R. Green.
- * 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.
- */
-
-#define ELFSIZE 32
-
-#include "opt_compat_sunos.h"
-#include "opt_syscall_debug.h"
-
-#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/exec_elf.h>
-#include <sys/resourcevar.h>
-#include <sys/signal.h>
-#include <sys/signalvar.h>
-
-#include <compat/netbsd32/netbsd32.h>
-#include <compat/netbsd32/netbsd32_exec.h>
-#include <compat/netbsd32/netbsd32_syscall.h>
-
-#include <machine/frame.h>
-#include <machine/netbsd32_machdep.h>
-
-extern char netbsd32_sigcode[], netbsd32_esigcode[];
-extern struct sysent netbsd32_sysent[];
-#ifdef SYSCALL_DEBUG
-extern const char * const netbsd32_syscallnames[];
-#endif
-int netbsd32_copyinargs __P((struct exec_package *, struct ps_strings *,
- void *, size_t, const void *, const void *));
-
-static int netbsd32_exec_aout_prep_zmagic __P((struct proc *,
- struct exec_package *));
-static int netbsd32_exec_aout_prep_nmagic __P((struct proc *,
- struct exec_package *));
-static int netbsd32_exec_aout_prep_omagic __P((struct proc *,
- struct exec_package *));
-
-const struct emul emul_netbsd32 = {
- "netbsd32",
- "/emul/netbsd32",
- NULL,
- netbsd32_sendsig,
- netbsd32_SYS_syscall,
- netbsd32_SYS_MAXSYSCALL,
- netbsd32_sysent,
-#ifdef SYSCALL_DEBUG
- netbsd32_syscallnames,
-#else
- NULL,
-#endif
- netbsd32_sigcode,
- netbsd32_esigcode,
-};
-
-#ifdef EXEC_ELF32
-
-extern int ELFNAME2(netbsd,signature) __P((struct proc *, struct exec_package *,
- Elf_Ehdr *));
-int
-ELFNAME2(netbsd32,probe)(p, epp, eh, itp, pos)
- struct proc *p;
- struct exec_package *epp;
- void *eh;
- char *itp;
- vaddr_t *pos;
-{
- int error;
- size_t i;
- const char *bp;
-
- if ((error = ELFNAME2(netbsd,signature)(p, epp, eh)) != 0)
- return error;
-
- if (itp[0]) {
- if ((error = emul_find(p, NULL, epp->ep_esch->es_emul->e_path,
- itp, &bp, 0)) &&
- (error = emul_find(p, NULL, "", itp, &bp, 0)))
- return error;
- if ((error = copystr(bp, itp, MAXPATHLEN, &i)) != 0)
- return error;
- free((void *)bp, M_TEMP);
- }
- epp->ep_flags |= EXEC_32;
- *(Elf_Addr *)pos = ELFDEFNNAME(NO_ADDR);
- return 0;
-}
-#endif
-
-#ifdef EXEC_AOUT
-/*
- * exec_netbsd32_makecmds(): Check if it's an netbsd32 a.out format
- * executable.
- *
- * Given a proc pointer and an exec package pointer, see if the referent
- * of the epp is in netbsd32 a.out format. Check 'standard' magic
- * numbers for this architecture.
- *
- * 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_netbsd32_makecmds(p, epp)
- struct proc *p;
- struct exec_package *epp;
-{
- netbsd32_u_long midmag, magic;
- u_short mid;
- int error;
- struct netbsd32_exec *execp = epp->ep_hdr;
-
- if (epp->ep_hdrvalid < sizeof(struct netbsd32_exec))
- return ENOEXEC;
-
- midmag = (netbsd32_u_long)ntohl(execp->a_midmag);
- mid = (midmag >> 16) & 0x3ff;
- magic = midmag & 0xffff;
-
- midmag = mid << 16 | magic;
-
- switch (midmag) {
- case (MID_SPARC << 16) | ZMAGIC:
- error = netbsd32_exec_aout_prep_zmagic(p, epp);
- break;
- case (MID_SPARC << 16) | NMAGIC:
- error = netbsd32_exec_aout_prep_nmagic(p, epp);
- break;
- case (MID_SPARC << 16) | OMAGIC:
- error = netbsd32_exec_aout_prep_omagic(p, epp);
- break;
- default:
- /* Invalid magic */
- error = ENOEXEC;
- break;
- }
-
- if (error == 0) {
- /* set up our emulation information */
- epp->ep_flags |= EXEC_32;
- } else
- kill_vmcmds(&epp->ep_vmcmds);
-
- return error;
-}
-
-/*
- * netbsd32_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
-netbsd32_exec_aout_prep_zmagic(p, epp)
- struct proc *p;
- struct exec_package *epp;
-{
- struct netbsd32_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\n");
-#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|VM_PROT_EXECUTE);
-
- return exec_aout_setup_stack(p, epp);
-}
-
-/*
- * netbsd32_exec_aout_prep_nmagic(): Prepare a 'native' NMAGIC binary's
- * exec package
- */
-
-int
-netbsd32_exec_aout_prep_nmagic(p, epp)
- struct proc *p;
- struct exec_package *epp;
-{
- struct netbsd32_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 = roundup(epp->ep_daddr + execp->a_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);
-}
-
-/*
Home |
Main Index |
Thread Index |
Old Index