The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/sys/exec.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $NetBSD: exec.h,v 1.106.4.1 2005/09/08 21:04:14 tron Exp $      */
    2 
    3 /*-
    4  * Copyright (c) 1992, 1993
    5  *      The Regents of the University of California.  All rights reserved.
    6  * (c) UNIX System Laboratories, Inc.
    7  * All or some portions of this file are derived from material licensed
    8  * to the University of California by American Telephone and Telegraph
    9  * Co. or Unix System Laboratories, Inc. and are reproduced herein with
   10  * the permission of UNIX System Laboratories, Inc.
   11  *
   12  * Redistribution and use in source and binary forms, with or without
   13  * modification, are permitted provided that the following conditions
   14  * are met:
   15  * 1. Redistributions of source code must retain the above copyright
   16  *    notice, this list of conditions and the following disclaimer.
   17  * 2. Redistributions in binary form must reproduce the above copyright
   18  *    notice, this list of conditions and the following disclaimer in the
   19  *    documentation and/or other materials provided with the distribution.
   20  * 3. Neither the name of the University nor the names of its contributors
   21  *    may be used to endorse or promote products derived from this software
   22  *    without specific prior written permission.
   23  *
   24  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   25  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   26  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   27  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   28  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   29  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   30  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   31  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   32  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   33  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   34  * SUCH DAMAGE.
   35  *
   36  *      @(#)exec.h      8.4 (Berkeley) 2/19/95
   37  */
   38 
   39 /*-
   40  * Copyright (c) 1993 Theo de Raadt.  All rights reserved.
   41  *
   42  * Redistribution and use in source and binary forms, with or without
   43  * modification, are permitted provided that the following conditions
   44  * are met:
   45  * 1. Redistributions of source code must retain the above copyright
   46  *    notice, this list of conditions and the following disclaimer.
   47  * 2. Redistributions in binary form must reproduce the above copyright
   48  *    notice, this list of conditions and the following disclaimer in the
   49  *    documentation and/or other materials provided with the distribution.
   50  *
   51  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
   52  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   53  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   54  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
   55  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   56  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   57  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
   58  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   59  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
   60  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   61  */
   62 
   63 /*-
   64  * Copyright (c) 1994 Christopher G. Demetriou
   65  *
   66  * Redistribution and use in source and binary forms, with or without
   67  * modification, are permitted provided that the following conditions
   68  * are met:
   69  * 1. Redistributions of source code must retain the above copyright
   70  *    notice, this list of conditions and the following disclaimer.
   71  * 2. Redistributions in binary form must reproduce the above copyright
   72  *    notice, this list of conditions and the following disclaimer in the
   73  *    documentation and/or other materials provided with the distribution.
   74  * 3. All advertising materials mentioning features or use of this software
   75  *    must display the following acknowledgement:
   76  *      This product includes software developed by the University of
   77  *      California, Berkeley and its contributors.
   78  * 4. Neither the name of the University nor the names of its contributors
   79  *    may be used to endorse or promote products derived from this software
   80  *    without specific prior written permission.
   81  *
   82  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   83  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   84  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   85  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   86  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   87  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   88  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   89  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   90  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   91  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   92  * SUCH DAMAGE.
   93  *
   94  *      @(#)exec.h      8.4 (Berkeley) 2/19/95
   95  */
   96 
   97 #ifndef _SYS_EXEC_H_
   98 #define _SYS_EXEC_H_
   99 
  100 /*
  101  * The following structure is found at the top of the user stack of each
  102  * user process. The ps program uses it to locate argv and environment
  103  * strings. Programs that wish ps to display other information may modify
  104  * it; normally ps_argvstr points to argv[0], and ps_nargvstr is the same
  105  * as the program's argc. The fields ps_envstr and ps_nenvstr are the
  106  * equivalent for the environment.
  107  */
  108 struct ps_strings {
  109         char    **ps_argvstr;   /* first of 0 or more argument strings */
  110         int     ps_nargvstr;    /* the number of argument strings */
  111         char    **ps_envstr;    /* first of 0 or more environment strings */
  112         int     ps_nenvstr;     /* the number of environment strings */
  113 };
  114 
  115 /*
  116  * Below the ps_strings and sigtramp, we may require a gap on the stack
  117  * (used to copyin/copyout various emulation data structures).
  118  */
  119 #define STACKGAPLEN     4096    /* plenty enough for now */
  120 
  121 /*
  122  * the following structures allow execve() to put together processes
  123  * in a more extensible and cleaner way.
  124  *
  125  * the exec_package struct defines an executable being execve()'d.
  126  * it contains the header, the vmspace-building commands, the vnode
  127  * information, and the arguments associated with the newly-execve'd
  128  * process.
  129  *
  130  * the exec_vmcmd struct defines a command description to be used
  131  * in creating the new process's vmspace.
  132  */
  133 
  134 struct lwp;
  135 struct proc;
  136 struct exec_package;
  137 struct vnode;
  138 struct ucred;
  139 
  140 typedef int (*exec_makecmds_fcn)(struct proc *, struct exec_package *);
  141 
  142 struct execsw {
  143         u_int   es_hdrsz;               /* size of header for this format */
  144         exec_makecmds_fcn es_makecmds;  /* function to setup vmcmds */
  145         union {                         /* probe function */
  146                 int (*elf_probe_func)(struct proc *,
  147                         struct exec_package *, void *, char *, vaddr_t *);
  148                 int (*ecoff_probe_func)(struct proc *, struct exec_package *);
  149                 int (*mach_probe_func)(char **);
  150         } u;
  151         const struct  emul *es_emul;    /* os emulation */
  152         int     es_prio;                /* entry priority */
  153         int     es_arglen;              /* Extra argument size in words */
  154                                         /* Copy arguments on the new stack */
  155         int     (*es_copyargs)(struct proc *, struct exec_package *,
  156                         struct ps_strings *, char **, void *);
  157                                         /* Set registers before execution */
  158         void    (*es_setregs)(struct lwp *, struct exec_package *, u_long);
  159                                         /* Dump core */
  160         int     (*es_coredump)(struct lwp *, struct vnode *, struct ucred *);
  161         int     (*es_setup_stack)(struct proc *, struct exec_package *);
  162 };
  163 
  164 #define EXECSW_PRIO_ANY         0x000   /* default, no preference */
  165 #define EXECSW_PRIO_FIRST       0x001   /* this should be among first */
  166 #define EXECSW_PRIO_LAST        0x002   /* this should be among last */
  167 
  168 /* exec vmspace-creation command set; see below */
  169 struct exec_vmcmd_set {
  170         u_int   evs_cnt;
  171         u_int   evs_used;
  172         struct  exec_vmcmd *evs_cmds;
  173 };
  174 
  175 #define EXEC_DEFAULT_VMCMD_SETSIZE      9       /* # of cmds in set to start */
  176 
  177 struct exec_package {
  178         const char *ep_name;            /* file's name */
  179         void    *ep_hdr;                /* file's exec header */
  180         u_int   ep_hdrlen;              /* length of ep_hdr */
  181         u_int   ep_hdrvalid;            /* bytes of ep_hdr that are valid */
  182         struct nameidata *ep_ndp;       /* namei data pointer for lookups */
  183         struct  exec_vmcmd_set ep_vmcmds;  /* vmcmds used to build vmspace */
  184         struct  vnode *ep_vp;           /* executable's vnode */
  185         struct  vattr *ep_vap;          /* executable's attributes */
  186         u_long  ep_taddr;               /* process's text address */
  187         u_long  ep_tsize;               /* size of process's text */
  188         u_long  ep_daddr;               /* process's data(+bss) address */
  189         u_long  ep_dsize;               /* size of process's data(+bss) */
  190         u_long  ep_maxsaddr;            /* proc's max stack addr ("top") */
  191         u_long  ep_minsaddr;            /* proc's min stack addr ("bottom") */
  192         u_long  ep_ssize;               /* size of process's stack */
  193         u_long  ep_entry;               /* process's entry point */
  194         vaddr_t ep_vm_minaddr;          /* bottom of process address space */
  195         vaddr_t ep_vm_maxaddr;          /* top of process address space */
  196         u_int   ep_flags;               /* flags; see below. */
  197         char    **ep_fa;                /* a fake args vector for scripts */
  198         int     ep_fd;                  /* a file descriptor we're holding */
  199         void    *ep_emul_arg;           /* emulation argument */
  200         const struct    execsw *ep_es;  /* appropriate execsw entry */
  201         const struct    execsw *ep_esch;/* checked execsw entry */
  202 };
  203 #define EXEC_INDIR      0x0001          /* script handling already done */
  204 #define EXEC_HASFD      0x0002          /* holding a shell script */
  205 #define EXEC_HASARGL    0x0004          /* has fake args vector */
  206 #define EXEC_SKIPARG    0x0008          /* don't copy user-supplied argv[0] */
  207 #define EXEC_DESTR      0x0010          /* destructive ops performed */
  208 #define EXEC_32         0x0020          /* 32-bit binary emulation */
  209 #define EXEC_HASES      0x0040          /* don't update exec switch pointer */
  210 
  211 struct exec_vmcmd {
  212         int     (*ev_proc)(struct proc *, struct exec_vmcmd *);
  213                                 /* procedure to run for region of vmspace */
  214         u_long  ev_len;         /* length of the segment to map */
  215         u_long  ev_addr;        /* address in the vmspace to place it at */
  216         struct  vnode *ev_vp;   /* vnode pointer for the file w/the data */
  217         u_long  ev_offset;      /* offset in the file for the data */
  218         u_int   ev_prot;        /* protections for segment */
  219         int     ev_flags;
  220 #define VMCMD_RELATIVE  0x0001  /* ev_addr is relative to base entry */
  221 #define VMCMD_BASE      0x0002  /* marks a base entry */
  222 #define VMCMD_FIXED     0x0004  /* entry must be mapped at ev_addr */
  223 };
  224 
  225 #ifdef _KERNEL
  226 #include <sys/mallocvar.h>
  227 
  228 MALLOC_DECLARE(M_EXEC);
  229 
  230 /*
  231  * funtions used either by execve() or the various CPU-dependent execve()
  232  * hooks.
  233  */
  234 void    kill_vmcmd              (struct exec_vmcmd **);
  235 int     exec_makecmds           (struct proc *, struct exec_package *);
  236 int     exec_runcmds            (struct proc *, struct exec_package *);
  237 void    vmcmdset_extend         (struct exec_vmcmd_set *);
  238 void    kill_vmcmds             (struct exec_vmcmd_set *);
  239 int     vmcmd_map_pagedvn       (struct proc *, struct exec_vmcmd *);
  240 int     vmcmd_map_readvn        (struct proc *, struct exec_vmcmd *);
  241 int     vmcmd_readvn            (struct proc *, struct exec_vmcmd *);
  242 int     vmcmd_map_zero          (struct proc *, struct exec_vmcmd *);
  243 int     copyargs                (struct proc *, struct exec_package *,
  244                                     struct ps_strings *, char **, void *);
  245 void    setregs                 (struct lwp *, struct exec_package *, u_long);
  246 int     check_veriexec          (struct proc *, struct vnode *,
  247                                      struct exec_package *, int);
  248 int     check_exec              (struct proc *, struct exec_package *, int);
  249 int     exec_init               (int);
  250 int     exec_read_from          (struct proc *, struct vnode *, u_long off,
  251                                     void *, size_t);
  252 int     exec_setup_stack        (struct proc *, struct exec_package *);
  253 
  254 
  255 #ifdef LKM
  256 int     emul_register           (const struct emul *, int);
  257 int     emul_unregister         (const char *);
  258 const struct emul *emul_search(const char *);
  259 
  260 int     exec_add                (struct execsw *, const char *);
  261 int     exec_remove             (const struct execsw *);
  262 #endif /* LKM */
  263 
  264 void    new_vmcmd(struct exec_vmcmd_set *,
  265                     int (*)(struct proc *, struct exec_vmcmd *),
  266                     u_long, u_long, struct vnode *, u_long, u_int, int);
  267 #define NEW_VMCMD(evsp,proc,len,addr,vp,offset,prot) \
  268         new_vmcmd(evsp,proc,len,addr,vp,offset,prot,0)
  269 #define NEW_VMCMD2(evsp,proc,len,addr,vp,offset,prot,flags) \
  270         new_vmcmd(evsp,proc,len,addr,vp,offset,prot,flags)
  271 
  272 #endif /* _KERNEL */
  273 
  274 #include <sys/exec_aout.h>
  275 
  276 #endif /* !_SYS_EXEC_H_ */

Cache object: 36ad87be632d0c9a7a0349d8ad2abf5a


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.