/* ![[previous]](../icons/n_left.png)
![[next]](../icons/n_right.png)
![[first]](../icons/n_first.png)
![[last]](../icons/n_last.png)
![[top]](../icons/n_top.png)
![[bottom]](../icons/bottom.png)
![[index]](../icons/index.png)
*/
1 /*
2 * The user structure.
3 * One allocated per process.
4 * Contains all per process data
5 * that doesn't need to be referenced
6 * while the process is swapped.
7 * The user block is USIZE*64 bytes
8 * long; resides at virtual kernel
9 * loc 140000; contains the system
10 * stack per user; is cross referenced
11 * with the proc structure for the
12 * same process.
13 */
14
15 #define EXCLOSE 01
16
17 struct user
18 {
19 label_t u_rsav; /* save info when exchanging stacks */
20 int u_fper; /* FP error register */
21 int u_fpsaved; /* FP regs saved for this proc */
22 struct {
23 int u_fpsr; /* FP status register */
24 double u_fpregs[6]; /* FP registers */
25 } u_fps;
26 char u_segflg; /* IO flag: 0:user D; 1:system; 2:user I */
27 char u_error; /* return error code */
28 short u_uid; /* effective user id */
29 short u_gid; /* effective group id */
30 short u_ruid; /* real user id */
31 short u_rgid; /* real group id */
32 struct proc *u_procp; /* pointer to proc structure */
33 int *u_ap; /* pointer to arglist */
34 union { /* syscall return values */
35 struct {
36 int r_val1;
37 int r_val2;
38 };
39 off_t r_off;
40 time_t r_time;
41 } u_r;
42 caddr_t u_base; /* base address for IO */
43 unsigned int u_count; /* bytes remaining for IO */
44 off_t u_offset; /* offset in file for IO */
45 struct inode *u_cdir; /* pointer to inode of current directory */
46 struct inode *u_rdir; /* root directory of current process */
47 char u_dbuf[DIRSIZ]; /* current pathname component */
48 caddr_t u_dirp; /* pathname pointer */
49 struct direct u_dent; /* current directory entry */
50 struct inode *u_pdir; /* inode of parent directory of dirp */
51 int u_uisa[16]; /* prototype of segmentation addresses */
52 int u_uisd[16]; /* prototype of segmentation descriptors */
53 struct file *u_ofile[NOFILE]; /* pointers to file structures of open files */
54 char u_pofile[NOFILE]; /* per-process flags of open files */
55 int u_arg[5]; /* arguments to current system call */
56 unsigned u_tsize; /* text size (clicks) */
57 unsigned u_dsize; /* data size (clicks) */
58 unsigned u_ssize; /* stack size (clicks) */
59 label_t u_qsav; /* label variable for quits and interrupts */
60 label_t u_ssav; /* label variable for swapping */
61 int u_signal[NSIG]; /* disposition of signals */
62 time_t u_utime; /* this process user time */
63 time_t u_stime; /* this process system time */
64 time_t u_cutime; /* sum of childs' utimes */
65 time_t u_cstime; /* sum of childs' stimes */
66 int *u_ar0; /* address of users saved R0 */
67 struct { /* profile arguments */
68 short *pr_base; /* buffer base */
69 unsigned pr_size; /* buffer size */
70 unsigned pr_off; /* pc offset */
71 unsigned pr_scale; /* pc scaling */
72 } u_prof;
73 char u_intflg; /* catch intr from sys */
74 char u_sep; /* flag for I and D separation */
75 struct tty *u_ttyp; /* controlling tty pointer */
76 dev_t u_ttyd; /* controlling tty dev */
77 struct { /* header of executable file */
78 int ux_mag; /* magic number */
79 unsigned ux_tsize; /* text size */
80 unsigned ux_dsize; /* data size */
81 unsigned ux_bsize; /* bss size */
82 unsigned ux_ssize; /* symbol table size */
83 unsigned ux_entloc; /* entry location */
84 unsigned ux_unused;
85 unsigned ux_relflg;
86 } u_exdata;
87 char u_comm[DIRSIZ];
88 time_t u_start;
89 char u_acflag;
90 short u_fpflag; /* unused now, will be later */
91 short u_cmask; /* mask for file creation */
92 int u_stack[1];
93 /* kernel stack per user
94 * extends from u + USIZE*64
95 * backward not to reach here
96 */
97 };
98
99 extern struct user u;
100
101 /* u_error codes */
102 #define EPERM 1
103 #define ENOENT 2
104 #define ESRCH 3
105 #define EINTR 4
106 #define EIO 5
107 #define ENXIO 6
108 #define E2BIG 7
109 #define ENOEXEC 8
110 #define EBADF 9
111 #define ECHILD 10
112 #define EAGAIN 11
113 #define ENOMEM 12
114 #define EACCES 13
115 #define EFAULT 14
116 #define ENOTBLK 15
117 #define EBUSY 16
118 #define EEXIST 17
119 #define EXDEV 18
120 #define ENODEV 19
121 #define ENOTDIR 20
122 #define EISDIR 21
123 #define EINVAL 22
124 #define ENFILE 23
125 #define EMFILE 24
126 #define ENOTTY 25
127 #define ETXTBSY 26
128 #define EFBIG 27
129 #define ENOSPC 28
130 #define ESPIPE 29
131 #define EROFS 30
132 #define EMLINK 31
133 #define EPIPE 32
134 #define EDOM 33
135 #define ERANGE 34