home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 15 / 15.iso / s / s053 / 8.ddi / usr / include / sys / exec.h < prev    next >
Encoding:
C/C++ Source or Header  |  1990-12-08  |  3.7 KB  |  152 lines

  1. /*    Copyright (c) 1990 UNIX System Laboratories, Inc.    */
  2. /*    Copyright (c) 1984, 1986, 1987, 1988, 1989, 1990 AT&T    */
  3. /*      All Rights Reserved      */
  4.  
  5. /*    THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF         */
  6. /*    UNIX System Laboratories, Inc.                         */
  7. /*    The copyright notice above does not evidence any       */
  8. /*    actual or intended publication of such source code.    */
  9.  
  10. #ifndef _SYS_EXEC_H
  11. #define _SYS_EXEC_H
  12.  
  13. #ident    "@(#)/usr/include/sys/exec.h.sl 1.1 4.0 12/08/90 33407 AT&T-USL"
  14.  
  15. #include <sys/types.h>
  16. #include <sys/vnode.h>
  17. #include <sys/cred.h>
  18. #include <sys/resource.h>
  19. #include <sys/proc.h>
  20.  
  21.  
  22. #define getexmag(x)   (x[1] << 8) + x[0]
  23.  
  24.  
  25. /*
  26.  * User argument structure for stack image management
  27.  */
  28.  
  29. struct uarg {
  30.     caddr_t estkstart;
  31.     int estksize;
  32.     u_int estkhflag;
  33.     int stringsize;
  34.     int argsize;
  35.     int envsize;
  36.     int argc;
  37.     int envc;
  38.     int prefixc;    /* intp argument prefix invisible to psargs */
  39.     int prefixsize;
  40.     caddr_t *prefixp;
  41.     int auxsize;
  42.     addr_t stacklow;
  43.     caddr_t stackend;
  44.     char **argp;
  45.     char **envp;
  46.     char *fname;
  47.     int traceinval;
  48.     caddr_t auxaddr;
  49.     caddr_t argaddr;
  50.     int flags;
  51. };
  52.  
  53. typedef struct execenv {
  54.     caddr_t ex_brkbase;
  55.     short   ex_magic;
  56.     vnode_t *ex_vp;
  57. } execenv_t; 
  58.  
  59. /* flags definition */
  60.  
  61. #define   RINTP   0x1 /* A run-time interpreter is active */
  62. #define   EMULA   0x2 /* Invoking emulator */
  63.  
  64.  
  65. struct execsw {
  66.     short *exec_magic;
  67.     int   (*exec_func)();
  68.     int   (*exec_core)();
  69. };
  70.  
  71. extern int nexectype;        /* number of elements in execsw */
  72. extern struct execsw execsw[];
  73.  
  74. typedef struct exhdmap {
  75.     struct exhdmap    *nextmap;
  76.     off_t        curbase;
  77.     off_t        curoff;
  78.     int        cureoff;
  79.     caddr_t        bndrycasep;
  80.     long        bndrycasesz;
  81.     struct fbuf    *fbufp;
  82.     int        keepcnt;
  83. } exhdmap_t;
  84.  
  85. typedef struct exhda {
  86.     vnode_t    *vp;
  87.     u_long    vnsize;
  88.     exhdmap_t    *maplist;
  89.     int state;
  90.     int nomap;
  91. } exhda_t;
  92.  
  93. #define EXHDA_HADERROR    1
  94.  
  95. #if defined(__STDC__)
  96.  
  97. extern int exhd_getmap(exhda_t *, off_t, int, int, char *);
  98. extern void exhd_release(exhda_t *);
  99. extern int remove_proc(struct uarg *);
  100. extern int execmap(vnode_t *, caddr_t, size_t, size_t, off_t, int);
  101. extern void setexecenv(struct execenv *);
  102. extern int setregs(struct uarg *);
  103. extern int core_seg(proc_t *, vnode_t *, off_t, caddr_t, size_t, rlim_t, cred_t
  104. *);
  105. extern int gexec(vnode_t **, struct uarg *, int, long *);
  106. extern caddr_t execstk_addr(int, u_int *);
  107. extern int execpermissions(struct vnode *, struct vattr *, exhda_t *, struct uarg *);
  108. extern int arglistsz(char **, int *, int *, int);
  109. extern int copyarglist(int, char **, int, char **, char *, int);
  110.  
  111. #else
  112.  
  113. extern int exhd_getmap();
  114. extern void exechd_release();
  115. extern int execmap();
  116. extern int remove_proc();
  117. extern void setexecenv();
  118. extern int setregs();
  119. extern int core_seg();
  120. extern int gexec();
  121. extern caddr_t execstk_addr();
  122. extern int execpermissions();
  123. extern int arglistsz();
  124. extern int copyarglist();
  125.  
  126. #endif    /* __STDC__ */
  127.  
  128. /* flags for exhd_getmap(): */
  129. #define    EXHD_NOALIGN    0
  130. #define EXHD_4BALIGN    1    /* align on 4 byte boundary */
  131. #define EXHD_KEEPMAP    2    /* keep for parallel use with other maps */
  132.                 /* if not set, map will be freed
  133.                  * automatically on next getmap
  134.                  */
  135. #define EXHD_COPY    4    /* Copy to the provided address */
  136.  
  137. /* the following macro is a machine dependent encapsulation of
  138.  * postfix processing to hide the stack direction from elf.c
  139.  * thereby making the elf.c code machine independent.
  140.  */
  141. #ifdef i386
  142. #define execpoststack(ARGS, ARRAYADDR, BYTESIZE)  \
  143.     (copyout((caddr_t)(ARRAYADDR), (ARGS)->auxaddr, BYTESIZE) ? EFAULT : \
  144.             (((ARGS)->auxaddr += (BYTESIZE)), 0))
  145. #else
  146. #define execpoststack(ARGS, ARRAYADDR, BYTESIZE)  \
  147.     (copyout((caddr_t)(ARRAYADDR), (ARGS)->stackend, BYTESIZE) ? EFAULT \
  148.         : (((ARGS)->stackend += (BYTESIZE)), 0))
  149. #endif
  150.  
  151. #endif /* _SYS_EXEC_H */
  152.