BSD 4_2 development
[unix-history] / usr / src / sys / h / user.h
CommitLineData
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
23struct 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
148extern struct user u;
149extern struct user swaputl;
150extern struct user forkutl;
151extern struct user xswaputl;
152extern struct user xswap2utl;
153extern struct user pushutl;
154extern struct user vfutl;
155#endif