BSD 4_4_Lite1 release
[unix-history] / usr / src / sys / sys / user.h
index 560926f..85fdd13 100644 (file)
-/*     user.h  3.4     %H%     */
+/*
+ * 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.2 (Berkeley) 9/23/93
+ */
 
 
-#ifdef KERNEL
-#include "../h/pcb.h"
-#include "../h/dmap.h"
-#include "../h/vtimes.h"
-#ifdef FASTVAX
-asm(".set U_ARG,120");
-asm(".set U_QSAV,140");
-#endif
-#else
-#include <sys/pcb.h>
-#include <sys/dmap.h>
-#include <sys/vtimes.h>
+#include <machine/pcb.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 <sys/resourcevar.h>
+#include <sys/signalvar.h>
+#include <vm/vm.h>             /* XXX */
+#include <sys/sysctl.h>
+
+
 /*
 /*
- * The user structure.
- * One allocated per process.
- * Contains all per process data
- * that doesn't need to be referenced
- * while the process is swapped.
- * The user block is UPAGES*NBPG bytes
- * long; resides at virtual user
- * loc 0x80000000-UPAGES*NBPG; contains the system
- * stack per user; is cross referenced
- * with the proc structure for the
- * same process.
+ * 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        EXCLOSE 01
-struct user
-{
+struct user {
        struct  pcb u_pcb;
        struct  pcb u_pcb;
-       int     u_arg[5];               /* arguments to current system call */
-       label_t u_qsav;                 /* for non-local gotos on interrupts */
-       char    u_segflg;               /* 0:user D; 1:system; 2:user I */
-       char    u_error;                /* return error code */
-       short   u_uid;                  /* effective user id */
-       short   u_gid;                  /* effective group id */
-       short   u_ruid;                 /* real user id */
-       short   u_rgid;                 /* real group id */
-       struct  proc *u_procp;          /* pointer to proc structure */
-       int     *u_ap;                  /* pointer to arglist */
-       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;
-       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 */
-       struct  inode *u_cdir;          /* pointer to inode of current directory */
-       struct  inode *u_rdir;          /* root directory of current process */
-       char    u_dbuf[DIRSIZ];         /* current pathname component */
-       caddr_t u_dirp;                 /* pathname pointer */
-       struct  direct u_dent;          /* current directory entry */
-       struct  inode *u_pdir;          /* inode of parent directory of dirp */
-       struct  file *u_ofile[NOFILE];  /* pointers to file structures of open files */
-       char    u_pofile[NOFILE];       /* per-process flags of open files */
-       label_t u_ssav;                 /* label variable for swapping */
-       int     (*u_signal[NSIG])();    /* disposition of signals */
-       int     u_cfcode;               /* ``code'' to trap when CM faulted */
-       int     *u_ar0;                 /* address of users saved R0 */
-       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;
-       char    u_eosys;                /* special action on end of syscall */
-       char    u_sep;                  /* flag for I and D separation */
-       struct  tty *u_ttyp;            /* controlling tty pointer */
-       dev_t   u_ttyd;                 /* controlling tty dev */
-       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;
-       } u_exdata;
-       char    u_comm[DIRSIZ];
-       time_t  u_start;
-       char    u_acflag;
-       short   u_fpflag;               /* unused now, will be later */
-       short   u_cmask;                /* mask for file creation */
-       size_t  u_tsize;                /* text size (clicks) */
-       size_t  u_dsize;                /* data size (clicks) */
-       size_t  u_ssize;                /* stack size (clicks) */
-       struct  vtimes u_vm;            /* stats for this proc */
-       struct  vtimes u_cvm;           /* sum of stats for reaped children */
-       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 */
-       time_t  u_outime;               /* user time at last sample */
-       size_t  u_odsize, u_ossize;     /* for (clumsy) expansion swaps */
-       size_t  u_vrpages[NOFILE];      /* number vread pages hanging on fd */
-       int     u_stack[1];
 
 
-                                       /*
-                                        * kernel stack per user
-                                        * extends from u + UPAGES*512
-                                        * backward not to reach here
-                                        */
-};
+       struct  sigacts u_sigacts;      /* p_sigacts points here (use it!) */
+       struct  pstats u_stats;         /* p_stats points here (use it!) */
 
 
-/* u_eosys values */
-#define        JUSTRETURN      0
-#define        RESTARTSYS      1
-#define        SIMULATERTI     2
+       /*
+        * 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_error codes */
-#include <errno.h>
+/*
+ * Redefinitions to make the debuggers happy for now...  This subterfuge
+ * brought to you by coredump() and trace_req().  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 */