Commit | Line | Data |
---|---|---|
55492a25 C |
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 |