BSD 4_4 release
[unix-history] / usr / src / sys / sys / user.h
index fc8f951..cbe91bd 100644 (file)
-/*     user.h  4.25    83/05/18        */
+/*
+ * Copyright (c) 1982, 1986, 1989, 1991, 1993
+ *     The Regents of the University of California.  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 the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University 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 REGENTS 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 REGENTS 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.
+ *
+ *     @(#)user.h      8.1 (Berkeley) 6/2/93
+ */
 
 
-#ifdef KERNEL
-#include "../machine/pcb.h"
-#include "../h/dmap.h"
-#else
 #include <machine/pcb.h>
 #include <machine/pcb.h>
-#include <sys/dmap.h>
+#ifndef KERNEL
+/* stuff that *used* to be included by user.h, or is now needed */
+#include <errno.h>
+#include <sys/time.h>
+#include <sys/resource.h>
+#include <sys/ucred.h>
+#include <sys/uio.h>
 #endif
 #endif
-#include <time.h>
-#include <resource.h>
+#include <sys/resourcevar.h>
+#include <sys/signalvar.h>
+#include <vm/vm.h>             /* XXX */
+#include <sys/sysctl.h>
+
+
 /*
 /*
- * Per process structure containing data that
- * isn't needed in core when the process is swapped out.
+ * Per process structure containing data that isn't needed in core
+ * when the process isn't running (esp. when swapped out).
+ * This structure may or may not be at the same kernel address
+ * in all processes.
  */
  
  */
  
-#define        SHSIZE  32
 struct user {
        struct  pcb u_pcb;
 struct user {
        struct  pcb u_pcb;
-       struct  proc *u_procp;          /* pointer to proc structure */
-       int     *u_ar0;                 /* address of users saved R0 */
-       char    u_comm[MAXNAMLEN + 1];
-
-/* syscall parameters, results and catches */
-       int     u_arg[8];               /* arguments to current system call */
-       int     *u_ap;                  /* pointer to arglist */
-       label_t u_qsave;                /* for non-local gotos on interrupts */
-       char    u_error;                /* return error code */
-       union {                         /* syscall return values */
-               struct  {
-                       int     R_val1;
-                       int     R_val2;
-               } u_rv;
-#define        r_val1  u_rv.R_val1
-#define        r_val2  u_rv.R_val2
-               off_t   r_off;
-               time_t  r_time;
-       } u_r;
-       char    u_eosys;                /* special action on end of syscall */
-
-/* 1.1 - processes and protection */
-       short   u_uid;                  /* effective user id */
-       short   u_gid;                  /* effective group id */
-       int     u_groups[NGROUPS];      /* groups, 0 terminated */
-       short   u_ruid;                 /* real user id */
-       short   u_rgid;                 /* real group id */
-
-/* 1.2 - memory management */
-       size_t  u_tsize;                /* text size (clicks) */
-       size_t  u_dsize;                /* data size (clicks) */
-       size_t  u_ssize;                /* stack size (clicks) */
-       struct  dmap u_dmap;            /* disk map for data segment */
-       struct  dmap u_smap;            /* disk map for stack segment */
-       struct  dmap u_cdmap, u_csmap;  /* shadows of u_dmap, u_smap, for
-                                          use of parent during fork */
-       label_t u_ssave;                /* label variable for swapping */
-       size_t  u_odsize, u_ossize;     /* for (clumsy) expansion swaps */
-       time_t  u_outime;               /* user time at last sample */
 
 
-/* 1.3 - signal management */
-       int     (*u_signal[NSIG])();    /* disposition of signals */
-       long    u_sigmask[NSIG];        /* signals to be blocked */
-       int     u_code;                 /* ``code'' to trap */
-       caddr_t u_sigstack;             /* 0 means no sigstack */
-       int     u_onsigstack;
+       struct  sigacts u_sigacts;      /* p_sigacts points here (use it!) */
+       struct  pstats u_stats;         /* p_stats points here (use it!) */
 
 
-/* 1.4 - descriptor management */
-       struct  file *u_ofile[NOFILE];  /* file structures for open files */
-       char    u_pofile[NOFILE];       /* per-process flags of open files */
-#define        UF_EXCLOSE      0x1             /* auto-close on exec */
-#define        UF_SHLOCK       0x2             /* shared lock present */
-#define        UF_EXLOCK       0x4             /* exclusive lock present */
-#define        UF_MAPPED       0x8
-       struct  inode *u_cdir;          /* current directory */
-       struct  inode *u_rdir;          /* root directory of current process */
-       struct  tty *u_ttyp;            /* controlling tty pointer */
-       dev_t   u_ttyd;                 /* controlling tty dev */
-       short   u_cmask;                /* mask for file creation */
-
-/* 1.5 - timing and statistics */
-       struct  rusage u_ru;            /* stats for this proc */
-       struct  rusage u_cru;           /* sum of stats for reaped children */
-       struct  itimerval u_timer[3];
-       int     u_XXX[3];
-       time_t  u_start;
-       short   u_acflag;
-
-/* 1.6 - resource controls */
-       struct  rlimit u_rlimit[RLIM_NLIMITS];
-       struct  quota *u_quota; /* user's quota structure */
-       int     u_qflags;               /* per process quota flags */
-
-/* BEGIN TRASH */
-       char    u_segflg;               /* 0:user D; 1:system; 2:user I */
-       caddr_t u_base;                 /* base address for IO */
-       unsigned int u_count;           /* bytes remaining for IO */
-       off_t   u_offset;               /* offset in file for IO */
-       union {
-          struct {                     /* header of executable file */
-               int     Ux_mag;         /* magic number */
-               unsigned Ux_tsize;      /* text size */
-               unsigned Ux_dsize;      /* data size */
-               unsigned Ux_bsize;      /* bss size */
-               unsigned Ux_ssize;      /* symbol table size */
-               unsigned Ux_entloc;     /* entry location */
-               unsigned Ux_unused;
-               unsigned Ux_relflg;
-          } Ux_A;
-          char ux_shell[SHSIZE];       /* #! and name of interpreter */
-       } u_exdata;
-#define        ux_mag          Ux_A.Ux_mag
-#define        ux_tsize        Ux_A.Ux_tsize
-#define        ux_dsize        Ux_A.Ux_dsize
-#define        ux_bsize        Ux_A.Ux_bsize
-#define        ux_ssize        Ux_A.Ux_ssize
-#define        ux_entloc       Ux_A.Ux_entloc
-#define        ux_unused       Ux_A.Ux_unused
-#define        ux_relflg       Ux_A.Ux_relflg
-       caddr_t u_dirp;                 /* pathname pointer */
-       struct  direct u_dent;          /* current directory entry */
-       struct  inode *u_pdir;          /* inode of parent directory of dirp */
-/* END TRASH */
-       struct uprof {                  /* profile arguments */
-               short   *pr_base;       /* buffer base */
-               unsigned pr_size;       /* buffer size */
-               unsigned pr_off;        /* pc offset */
-               unsigned pr_scale;      /* pc scaling */
-       } u_prof;
-#ifdef sun
-       int     u_lofault;              /* catch faults in locore.s */
-#endif
-       int     u_stack[1];
+       /*
+        * Remaining fields only for core dump and/or ptrace--
+        * not valid at other times!
+        */
+       struct  kinfo_proc u_kproc;     /* proc + eproc */
+       struct  md_coredump u_md;       /* machine dependent glop */
 };
 
 };
 
-/* u_eosys values */
-#define        JUSTRETURN      0
-#define        RESTARTSYS      1
-#define        SIMULATERTI     2
-#define        REALLYRETURN    3
-
-/* u_error codes */
-#include <errno.h>
+/*
+ * Redefinitions to make the debuggers happy for now...
+ * This subterfuge brought to you by coredump() and procxmt().
+ * These fields are *only* valid at those times!
+ */
+#define        U_ar0   u_kproc.kp_proc.p_md.md_regs /* copy of curproc->p_md.md_regs */
+#define        U_tsize u_kproc.kp_eproc.e_vm.vm_tsize
+#define        U_dsize u_kproc.kp_eproc.e_vm.vm_dsize
+#define        U_ssize u_kproc.kp_eproc.e_vm.vm_ssize
+#define        U_sig   u_sigacts.ps_sig
+#define        U_code  u_sigacts.ps_code
 
 
-#ifdef KERNEL
-extern struct user u;
-extern struct user swaputl;
-extern struct user forkutl;
-extern struct user xswaputl;
-extern struct user xswap2utl;
-extern struct user pushutl;
-extern struct user vfutl;
-#endif
+#ifndef KERNEL
+#define        u_ar0   U_ar0
+#define        u_tsize U_tsize
+#define        u_dsize U_dsize
+#define        u_ssize U_ssize
+#define        u_sig   U_sig
+#define        u_code  U_code
+#endif /* KERNEL */