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