1 /* 2 * Copyright (c) 1982, 1986, 1989 Regents of the University of California. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms are permitted 6 * provided that the above copyright notice and this paragraph are 7 * duplicated in all such forms and that any documentation, 8 * advertising materials, and other materials related to such 9 * distribution and use acknowledge that the software was developed 10 * by the University of California, Berkeley. The name of the 11 * University may not be used to endorse or promote products derived 12 * from this software without specific prior written permission. 13 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 14 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 15 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 16 * 17 * @(#)user.h 7.6 (Berkeley) 06/06/89 18 */ 19 20 #ifdef KERNEL 21 #include "machine/pcb.h" 22 #include "dmap.h" 23 #include "time.h" 24 #include "resource.h" 25 #include "namei.h" 26 #include "ucred.h" 27 #else 28 #include <machine/pcb.h> 29 #include <sys/dmap.h> 30 #include <sys/time.h> 31 #include <sys/resource.h> 32 #include <sys/namei.h> 33 #include <sys/ucred.h> 34 #endif 35 36 /* 37 * Per process structure containing data that 38 * isn't needed in core when the process is swapped out. 39 */ 40 41 #define MAXCOMLEN 16 /* <= MAXNAMLEN, >= sizeof(ac_comm) */ 42 #define MAXLOGNAME 12 /* >= UT_NAMESIZE */ 43 44 struct user { 45 struct pcb u_pcb; 46 struct proc *u_procp; /* pointer to proc structure */ 47 int *u_ar0; /* address of users saved R0 */ 48 char u_comm[MAXCOMLEN + 1]; 49 50 /* syscall parameters, results and catches */ 51 int u_arg[8]; /* arguments to current system call */ 52 int *u_ap; /* pointer to arglist */ 53 label_t u_qsave; /* for non-local gotos on interrupts */ 54 union { /* syscall return values */ 55 struct { 56 int R_val1; 57 int R_val2; 58 } u_rv; 59 #define r_val1 u_rv.R_val1 60 #define r_val2 u_rv.R_val2 61 off_t r_off; 62 time_t r_time; 63 } u_r; 64 char u_error; /* return error code */ 65 char u_eosys; /* special action on end of syscall */ 66 67 /* 1.1 - processes and protection */ 68 char u_logname[MAXLOGNAME]; /* login name, if available */ 69 #define u_ruid u_cred->cr_ruid /* real user id */ 70 gid_t u_rgid; /* real group id */ 71 #define u_cred u_nd.ni_cred 72 #define u_uid u_cred->cr_uid /* effective user id */ 73 #define u_gid u_cred->cr_gid /* effective group id */ 74 #define u_ngroups u_cred->cr_ngroups /* number of group id's */ 75 #define u_groups u_cred->cr_groups /* list of effective grp id's */ 76 77 /* 1.2 - memory management */ 78 size_t u_tsize; /* text size (clicks) */ 79 size_t u_dsize; /* data size (clicks) */ 80 size_t u_ssize; /* stack size (clicks) */ 81 struct dmap u_dmap; /* disk map for data segment */ 82 struct dmap u_smap; /* disk map for stack segment */ 83 struct dmap u_cdmap; /* temp data segment disk map */ 84 struct dmap u_csmap; /* temp stack segment disk map */ 85 label_t u_ssave; /* label variable for swapping */ 86 size_t u_odsize, u_ossize; /* for (clumsy) expansion swaps */ 87 time_t u_outime; /* user time at last sample */ 88 89 /* 1.3 - signal management */ 90 int (*u_signal[NSIG])(); /* disposition of signals */ 91 int u_sigmask[NSIG]; /* signals to be blocked */ 92 int u_sigonstack; /* signals to take on sigstack */ 93 int u_sigintr; /* signals that interrupt syscalls */ 94 int u_oldmask; /* saved mask from before sigpause */ 95 int u_code; /* ``code'' to trap */ 96 struct sigstack u_sigstack; /* sp & on stack state variable */ 97 #define u_onstack u_sigstack.ss_onstack 98 #define u_sigsp u_sigstack.ss_sp 99 100 /* 1.4 - descriptor management */ 101 struct file *u_ofile[NOFILE]; /* file structures for open files */ 102 char u_pofile[NOFILE]; /* per-process flags of open files */ 103 int u_lastfile; /* high-water mark of u_ofile */ 104 #define UF_EXCLOSE 0x1 /* auto-close on exec */ 105 #define UF_MAPPED 0x2 /* mapped from device */ 106 #define u_cdir u_nd.ni_cdir /* current directory */ 107 #define u_rdir u_nd.ni_rdir /* root directory of current process */ 108 struct tty *u_ttyp; /* controlling tty pointer */ 109 dev_t u_ttyd; /* controlling tty dev */ 110 short u_cmask; /* mask for file creation */ 111 112 /* 1.5 - timing and statistics */ 113 struct rusage u_ru; /* stats for this proc */ 114 struct rusage u_cru; /* sum of stats for reaped children */ 115 struct itimerval u_timer[3]; 116 struct timeval u_start; 117 short u_acflag; 118 119 struct uprof { /* profile arguments */ 120 short *pr_base; /* buffer base */ 121 unsigned pr_size; /* buffer size */ 122 unsigned pr_off; /* pc offset */ 123 unsigned pr_scale; /* pc scaling */ 124 } u_prof; 125 126 /* 1.6 - resource controls */ 127 struct rlimit u_rlimit[RLIM_NLIMITS]; 128 struct quota *u_quota; /* user's quota structure */ 129 int u_qflags; /* per process quota flags */ 130 131 /* namei & co. */ 132 struct nameidata u_nd; 133 134 long u_spare[8]; 135 int u_stack[1]; 136 }; 137 138 /* u_eosys values */ 139 #define JUSTRETURN 1 140 #define RESTARTSYS 2 141 #define NORMALRETURN 3 142 143 /* u_error codes */ 144 #ifdef KERNEL 145 #include "errno.h" 146 #else 147 #include <errno.h> 148 #endif 149 150 #ifdef KERNEL 151 extern struct user u; 152 extern struct user swaputl; 153 extern struct user forkutl; 154 extern struct user xswaputl; 155 extern struct user xswap2utl; 156 extern struct user pushutl; 157 extern struct user vfutl; 158 #endif 159