1 /* user.h 4.20 82/09/12 */ 2 3 #include <sys/pcb.h> 4 #include <sys/dmap.h> 5 #include <time.h> 6 #include <resource.h> 7 /* 8 * Per process structure containing data that 9 * isn't needed in core when the process is swapped out. 10 */ 11 12 #define SHSIZE 32 13 14 struct user { 15 struct pcb u_pcb; 16 struct proc *u_procp; /* pointer to proc structure */ 17 int *u_ar0; /* address of users saved R0 */ 18 char u_comm[MAXNAMLEN + 1]; 19 20 /* syscall parameters, results and catches */ 21 int u_arg[8]; /* arguments to current system call */ 22 int *u_ap; /* pointer to arglist */ 23 label_t u_qsave; /* for non-local gotos on interrupts */ 24 char u_error; /* return error code */ 25 union { /* syscall return values */ 26 struct { 27 int R_val1; 28 int R_val2; 29 } u_rv; 30 #define r_val1 u_rv.R_val1 31 #define r_val2 u_rv.R_val2 32 off_t r_off; 33 time_t r_time; 34 } u_r; 35 char u_eosys; /* special action on end of syscall */ 36 37 /* 1.1 - processes and protection */ 38 short u_uid; /* effective user id */ 39 short u_gid; /* effective group id */ 40 int u_groups[NGROUPS]; /* groups, 0 terminated */ 41 short u_ruid; /* real user id */ 42 short u_rgid; /* real group id */ 43 44 /* 1.2 - memory management */ 45 size_t u_tsize; /* text size (clicks) */ 46 size_t u_dsize; /* data size (clicks) */ 47 size_t u_ssize; /* stack size (clicks) */ 48 struct dmap u_dmap; /* disk map for data segment */ 49 struct dmap u_smap; /* disk map for stack segment */ 50 struct dmap u_cdmap, u_csmap; /* shadows of u_dmap, u_smap, for 51 use of parent during fork */ 52 label_t u_ssave; /* label variable for swapping */ 53 size_t u_odsize, u_ossize; /* for (clumsy) expansion swaps */ 54 time_t u_outime; /* user time at last sample */ 55 56 /* 1.3 - signal management */ 57 int (*u_signal[NSIG])(); /* disposition of signals */ 58 long u_sigmask[NSIG]; /* signals to be blocked */ 59 int u_code; /* ``code'' to trap */ 60 caddr_t u_sigstack; /* 0 means no sigstack */ 61 int u_onsigstack; 62 /* on SIGILL code passes compatibility mode fault address */ 63 /* on SIGFPE code passes more specific kind of floating point fault */ 64 65 /* 1.4 - descriptor management */ 66 struct file *u_ofile[NOFILE]; /* file structures for open files */ 67 char u_pofile[NOFILE]; /* per-process flags of open files */ 68 #define EXCLOSE 01 /* auto-close on exec */ 69 #define RDLOCK 02 /* read lock present */ 70 #define WRLOCK 04 /* write lock present */ 71 struct inode *u_cdir; /* current directory */ 72 struct inode *u_rdir; /* root directory of current process */ 73 struct tty *u_ttyp; /* controlling tty pointer */ 74 dev_t u_ttyd; /* controlling tty dev */ 75 short u_cmask; /* mask for file creation */ 76 77 /* 1.5 - timing and statistics */ 78 struct rusage u_ru; /* stats for this proc */ 79 struct rusage u_cru; /* sum of stats for reaped children */ 80 struct itimerval u_timer[3]; 81 int u_XXX[3]; 82 time_t u_start; 83 short u_acflag; 84 85 /* 1.6 - resource controls */ 86 struct rlimit u_rlimit[RLIM_NLIMITS]; 87 struct quota *u_quota; /* user's quota structure */ 88 int u_qflags; /* per process quota flags */ 89 90 /* BEGIN TRASH */ 91 char u_segflg; /* 0:user D; 1:system; 2:user I */ 92 caddr_t u_base; /* base address for IO */ 93 unsigned int u_count; /* bytes remaining for IO */ 94 off_t u_offset; /* offset in file for IO */ 95 union { 96 struct { /* header of executable file */ 97 int Ux_mag; /* magic number */ 98 unsigned Ux_tsize; /* text size */ 99 unsigned Ux_dsize; /* data size */ 100 unsigned Ux_bsize; /* bss size */ 101 unsigned Ux_ssize; /* symbol table size */ 102 unsigned Ux_entloc; /* entry location */ 103 unsigned Ux_unused; 104 unsigned Ux_relflg; 105 } Ux_A; 106 char ux_shell[SHSIZE]; /* #! and name of interpreter */ 107 } u_exdata; 108 #define ux_mag Ux_A.Ux_mag 109 #define ux_tsize Ux_A.Ux_tsize 110 #define ux_dsize Ux_A.Ux_dsize 111 #define ux_bsize Ux_A.Ux_bsize 112 #define ux_ssize Ux_A.Ux_ssize 113 #define ux_entloc Ux_A.Ux_entloc 114 #define ux_unused Ux_A.Ux_unused 115 #define ux_relflg Ux_A.Ux_relflg 116 caddr_t u_dirp; /* pathname pointer */ 117 struct direct u_dent; /* current directory entry */ 118 struct inode *u_pdir; /* inode of parent directory of dirp */ 119 /* END TRASH */ 120 int u_stack[1]; 121 }; 122 123 /* u_eosys values */ 124 #define JUSTRETURN 0 125 #define RESTARTSYS 1 126 #define SIMULATERTI 2 127 128 /* u_error codes */ 129 #include <errno.h> 130 131 #ifdef KERNEL 132 extern struct user u; 133 extern struct user swaputl; 134 extern struct user forkutl; 135 extern struct user xswaputl; 136 extern struct user xswap2utl; 137 extern struct user pushutl; 138 extern struct user vfutl; 139 #endif 140