1 /* user.h 6.9 85/03/11 */ 2 3 #ifdef KERNEL 4 #include "../machine/pcb.h" 5 #include "dmap.h" 6 #include "time.h" 7 #include "resource.h" 8 #include "namei.h" 9 #else 10 #include <machine/pcb.h> 11 #include <sys/dmap.h> 12 #include <sys/time.h> 13 #include <sys/resource.h> 14 #include <sys/namei.h> 15 #endif 16 17 /* 18 * Per process structure containing data that 19 * isn't needed in core when the process is swapped out. 20 */ 21 22 #define MAXCOMLEN 16 /* <= MAXNAMLEN, >= sizeof(ac_comm) */ 23 24 struct user { 25 struct pcb u_pcb; 26 struct proc *u_procp; /* pointer to proc structure */ 27 int *u_ar0; /* address of users saved R0 */ 28 char u_comm[MAXCOMLEN + 1]; 29 30 /* syscall parameters, results and catches */ 31 int u_arg[8]; /* arguments to current system call */ 32 int *u_ap; /* pointer to arglist */ 33 label_t u_qsave; /* for non-local gotos on interrupts */ 34 union { /* syscall return values */ 35 struct { 36 int R_val1; 37 int R_val2; 38 } u_rv; 39 #define r_val1 u_rv.R_val1 40 #define r_val2 u_rv.R_val2 41 off_t r_off; 42 time_t r_time; 43 } u_r; 44 char u_error; /* return error code */ 45 char u_eosys; /* special action on end of syscall */ 46 47 /* 1.1 - processes and protection */ 48 uid_t u_uid; /* effective user id */ 49 uid_t u_ruid; /* real user id */ 50 gid_t u_gid; /* effective group id */ 51 gid_t u_rgid; /* real group id */ 52 gid_t u_groups[NGROUPS]; /* groups, 0 terminated */ 53 54 /* 1.2 - memory management */ 55 size_t u_tsize; /* text size (clicks) */ 56 size_t u_dsize; /* data size (clicks) */ 57 size_t u_ssize; /* stack size (clicks) */ 58 struct dmap u_dmap; /* disk map for data segment */ 59 struct dmap u_smap; /* disk map for stack segment */ 60 struct dmap u_cdmap, u_csmap; /* shadows of u_dmap, u_smap, for 61 use of parent during fork */ 62 label_t u_ssave; /* label variable for swapping */ 63 size_t u_odsize, u_ossize; /* for (clumsy) expansion swaps */ 64 time_t u_outime; /* user time at last sample */ 65 66 /* 1.3 - signal management */ 67 int (*u_signal[NSIG])(); /* disposition of signals */ 68 int u_sigmask[NSIG]; /* signals to be blocked */ 69 int u_sigonstack; /* signals to take on sigstack */ 70 int u_sigintr; /* signals that interrupt syscalls */ 71 int u_oldmask; /* saved mask from before sigpause */ 72 int u_code; /* ``code'' to trap */ 73 struct sigstack u_sigstack; /* sp & on stack state variable */ 74 #define u_onstack u_sigstack.ss_onstack 75 #define u_sigsp u_sigstack.ss_sp 76 77 /* 1.4 - descriptor management */ 78 struct file *u_ofile[NOFILE]; /* file structures for open files */ 79 char u_pofile[NOFILE]; /* per-process flags of open files */ 80 int u_lastfile; /* high-water mark of u_ofile */ 81 #define UF_EXCLOSE 0x1 /* auto-close on exec */ 82 #define UF_MAPPED 0x2 /* mapped from device */ 83 struct inode *u_cdir; /* current directory */ 84 struct inode *u_rdir; /* root directory of current process */ 85 struct tty *u_ttyp; /* controlling tty pointer */ 86 dev_t u_ttyd; /* controlling tty dev */ 87 short u_cmask; /* mask for file creation */ 88 89 /* 1.5 - timing and statistics */ 90 struct rusage u_ru; /* stats for this proc */ 91 struct rusage u_cru; /* sum of stats for reaped children */ 92 struct itimerval u_timer[3]; 93 int u_XXX[3]; 94 struct timeval u_start; 95 short u_acflag; 96 97 struct uprof { /* profile arguments */ 98 short *pr_base; /* buffer base */ 99 unsigned pr_size; /* buffer size */ 100 unsigned pr_off; /* pc offset */ 101 unsigned pr_scale; /* pc scaling */ 102 } u_prof; 103 104 /* 1.6 - resource controls */ 105 struct rlimit u_rlimit[RLIM_NLIMITS]; 106 struct quota *u_quota; /* user's quota structure */ 107 int u_qflags; /* per process quota flags */ 108 109 /* namei & co. */ 110 struct nameicache { /* last successful directory search */ 111 int nc_prevoffset; /* offset at which last entry found */ 112 ino_t nc_inumber; /* inum of cached directory */ 113 dev_t nc_dev; /* dev of cached directory */ 114 time_t nc_time; /* time stamp for cache entry */ 115 } u_ncache; 116 struct nameidata u_nd; 117 118 int u_stack[1]; 119 }; 120 121 /* u_eosys values */ 122 #define JUSTRETURN 1 123 #define RESTARTSYS 2 124 #define NORMALRETURN 3 125 126 /* u_error codes */ 127 #ifdef KERNEL 128 #include "errno.h" 129 #else 130 #include <errno.h> 131 #endif 132 133 #ifdef KERNEL 134 extern struct user u; 135 extern struct user swaputl; 136 extern struct user forkutl; 137 extern struct user xswaputl; 138 extern struct user xswap2utl; 139 extern struct user pushutl; 140 extern struct user vfutl; 141 #endif 142