|
|
1.1 root 1: /* user.h 6.1 83/07/29 */
2: /* Documentation Block and Change history :
3: bernie 1/28/85 Add audittrail structures
4: */
5:
6: #if defined(KERNEL) || defined(KUTIL)
7: #include "../machine/pcb.h"
8: #include "../h/dmap.h"
9: #include "../h/time.h"
10: #include "../h/resource.h"
11: #include "../h/errno.h"
12: #else
13: #include <errno.h>
14: #include <machine/pcb.h>
15: #include <sys/dmap.h>
16: #include <sys/time.h>
17: #include <sys/resource.h>
18: #endif
19:
20: /*
21: * Per process structure containing data that
22: * isn't needed in core when the process is swapped out.
23: */
24:
25: #define SHSIZE 32
26: #define MAXCOMLEN 16 /* <= MAXNAMLEN, >= sizeof(a_comm) */
27:
28: struct user {
29: struct pcb u_pcb;
30: struct proc *u_procp; /* pointer to proc structure */
31: int *u_ar0; /* address of users saved R0 */
32: char u_comm[MAXNAMLEN + 1];
33:
34: /* syscall parameters, results and catches */
35: int u_arg[8]; /* arguments to current system call */
36: int *u_ap; /* pointer to arglist */
37: label_t u_qsave; /* for non-local gotos on interrupts */
38: char u_error; /* return error code */
39: union { /* syscall return values */
40: struct {
41: int R_val1;
42: int R_val2;
43: } u_rv;
44: #define r_val1 u_rv.R_val1
45: #define r_val2 u_rv.R_val2
46: off_t r_off;
47: time_t r_time;
48: } u_r;
49: char u_eosys; /* special action on end of syscall */
50:
51: /* 1.1 - processes and protection */
52: short u_uid; /* effective user id */
53: short u_gid; /* effective group id */
54: int u_groups[NGROUPS]; /* groups, 0 terminated */
55: short u_ruid; /* real user id */
56: short u_rgid; /* real group id */
57:
58: /* 1.2 - memory management */
59: size_t u_tsize; /* text size (clicks) */
60: size_t u_dsize; /* data size (clicks) */
61: size_t u_ssize; /* stack size (clicks) */
62: struct dmap u_dmap; /* disk map for data segment */
63: struct dmap u_smap; /* disk map for stack segment */
64: struct dmap u_cdmap, u_csmap; /* shadows of u_dmap, u_smap, for
65: use of parent during fork */
66: label_t u_ssave; /* label variable for swapping */
67: size_t u_odsize, u_ossize; /* for (clumsy) expansion swaps */
68: time_t u_outime; /* user time at last sample */
69:
70: /* 1.3 - signal management */
71: int (*u_signal[NSIG])(); /* disposition of signals */
72: int u_sigmask[NSIG]; /* signals to be blocked */
73: int u_sigonstack; /* signals to take on sigstack */
74: int u_oldmask; /* saved mask from before sigpause */
75: int u_code; /* ``code'' to trap */
76: struct sigstack u_sigstack; /* sp & on stack state variable */
77: #define u_onstack u_sigstack.ss_onstack
78: #define u_sigsp u_sigstack.ss_sp
79:
80: /* 1.4 - descriptor management */
81: struct file *u_ofile[NOFILE]; /* file structures for open files */
82: char u_pofile[NOFILE]; /* per-process flags of open files */
83: #define UF_EXCLOSE 0x1 /* auto-close on exec */
84: #define UF_MAPPED 0x2 /* mapped from device */
85: struct inode *u_cdir; /* current directory */
86: struct inode *u_rdir; /* root directory of current process */
87: struct tty *u_ttyp; /* controlling tty pointer */
88: dev_t u_ttyd; /* controlling tty dev */
89: short u_cmask; /* mask for file creation */
90:
91: /* 1.5 - timing and statistics */
92: struct rusage u_ru; /* stats for this proc */
93: struct rusage u_cru; /* sum of stats for reaped children */
94: struct itimerval u_timer[3];
95: int u_XXX[3];
96: time_t u_start;
97: short u_acflag;
98:
99: /* 1.6 - resource controls */
100: struct rlimit u_rlimit[RLIM_NLIMITS];
101: struct quota *u_quota; /* user's quota structure */
102: int u_qflags; /* per process quota flags */
103:
104: /* BEGIN TRASH */
105: char u_segflg; /* 0:user D; 1:system; 2:user I */
106: caddr_t u_base; /* base address for IO */
107: unsigned int u_count; /* bytes remaining for IO */
108: off_t u_offset; /* offset in file for IO */
109: union {
110: struct { /* header of executable file */
111: int Ux_mag; /* magic number */
112: unsigned Ux_tsize; /* text size */
113: unsigned Ux_dsize; /* data size */
114: unsigned Ux_bsize; /* bss size */
115: unsigned Ux_ssize; /* symbol table size */
116: unsigned Ux_entloc; /* entry location */
117: unsigned Ux_unused;
118: unsigned Ux_relflg;
119: } Ux_A;
120: char ux_shell[SHSIZE]; /* #! and name of interpreter */
121: } u_exdata;
122: #define ux_mag Ux_A.Ux_mag
123: #define ux_tsize Ux_A.Ux_tsize
124: #define ux_dsize Ux_A.Ux_dsize
125: #define ux_bsize Ux_A.Ux_bsize
126: #define ux_ssize Ux_A.Ux_ssize
127: #define ux_entloc Ux_A.Ux_entloc
128: #define ux_unused Ux_A.Ux_unused
129: #define ux_relflg Ux_A.Ux_relflg
130: caddr_t u_dirp; /* pathname pointer */
131: struct direct u_dent; /* current directory entry */
132: struct inode *u_pdir; /* inode of parent directory of dirp */
133: /* END TRASH */
134: struct uprof { /* profile arguments */
135: short *pr_base; /* buffer base */
136: unsigned pr_size; /* buffer size */
137: unsigned pr_off; /* pc offset */
138: unsigned pr_scale; /* pc scaling */
139: } u_prof;
140: /* Sys 5 stuff */
141: daddr_t u_unused; /* used to be used for ulimit */
142: short u_lock; /* process/text/data locking flags */
143: #ifdef AUDITTRAIL
144: struct audbuf *u_rootdir; /* pathname of current rootdir */
145: struct audbuf *u_cwdir; /* pathname of current directory */
146: struct audbuf *u_path; /* pointer for holding audit pathname */
147: short u_pathtype; /* flag for root or cwdir rel path */
148: #endif
149: int u_stack[1];
150: };
151:
152: /* u_eosys values */
153: #define JUSTRETURN 0
154: #define RESTARTSYS 1
155: #define SIMULATERTI 2
156: #define REALLYRETURN 3
157:
158: #ifdef KERNEL
159: extern struct user u;
160: extern struct user swaputl;
161: extern struct user forkutl;
162: extern struct user xswaputl;
163: extern struct user xswap2utl;
164: extern struct user pushutl;
165: extern struct user vfutl;
166: char ckey_cache[NOFCKEY]; /* = 1 if code key i may be in code cache */
167: char dkey_cache[NOFDKEY]; /* = 1 if data key i may be in data cache */
168: short ckey_cnt[NOFCKEY]; /* # of processes using code key i */
169: short dkey_cnt[NOFDKEY]; /* processes using data key i (should be 1) */
170: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.