xref: /original-bsd/sys/sys/user.h (revision 7e7b101a)
1 /*	user.h	6.9	85/03/11	*/
2 
3 #ifdef KERNEL
4 #include "../machine/pcb.h"
5 #include "dmap.h"
6 #include "time.h"
7 #include "resource.h"
8 #include "namei.h"
9 #else
10 #include <machine/pcb.h>
11 #include <sys/dmap.h>
12 #include <sys/time.h>
13 #include <sys/resource.h>
14 #include <sys/namei.h>
15 #endif
16 
17 /*
18  * Per process structure containing data that
19  * isn't needed in core when the process is swapped out.
20  */
21 
22 #define	MAXCOMLEN	16		/* <= MAXNAMLEN, >= sizeof(ac_comm) */
23 
24 struct	user {
25 	struct	pcb u_pcb;
26 	struct	proc *u_procp;		/* pointer to proc structure */
27 	int	*u_ar0;			/* address of users saved R0 */
28 	char	u_comm[MAXCOMLEN + 1];
29 
30 /* syscall parameters, results and catches */
31 	int	u_arg[8];		/* arguments to current system call */
32 	int	*u_ap;			/* pointer to arglist */
33 	label_t	u_qsave;		/* for non-local gotos on interrupts */
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_error;		/* return error code */
45 	char	u_eosys;		/* special action on end of syscall */
46 
47 /* 1.1 - processes and protection */
48 	uid_t	u_uid;			/* effective user id */
49 	uid_t	u_ruid;			/* real user id */
50 	gid_t	u_gid;			/* effective group id */
51 	gid_t	u_rgid;			/* real group id */
52 	gid_t	u_groups[NGROUPS];	/* groups, 0 terminated */
53 
54 /* 1.2 - memory management */
55 	size_t	u_tsize;		/* text size (clicks) */
56 	size_t	u_dsize;		/* data size (clicks) */
57 	size_t	u_ssize;		/* stack size (clicks) */
58 	struct	dmap u_dmap;		/* disk map for data segment */
59 	struct	dmap u_smap;		/* disk map for stack segment */
60 	struct	dmap u_cdmap, u_csmap;	/* shadows of u_dmap, u_smap, for
61 					   use of parent during fork */
62 	label_t u_ssave;		/* label variable for swapping */
63 	size_t	u_odsize, u_ossize;	/* for (clumsy) expansion swaps */
64 	time_t	u_outime;		/* user time at last sample */
65 
66 /* 1.3 - signal management */
67 	int	(*u_signal[NSIG])();	/* disposition of signals */
68 	int	u_sigmask[NSIG];	/* signals to be blocked */
69 	int	u_sigonstack;		/* signals to take on sigstack */
70 	int	u_sigintr;		/* signals that interrupt syscalls */
71 	int	u_oldmask;		/* saved mask from before sigpause */
72 	int	u_code;			/* ``code'' to trap */
73 	struct	sigstack u_sigstack;	/* sp & on stack state variable */
74 #define	u_onstack	u_sigstack.ss_onstack
75 #define	u_sigsp		u_sigstack.ss_sp
76 
77 /* 1.4 - descriptor management */
78 	struct	file *u_ofile[NOFILE];	/* file structures for open files */
79 	char	u_pofile[NOFILE];	/* per-process flags of open files */
80 	int	u_lastfile;		/* high-water mark of u_ofile */
81 #define	UF_EXCLOSE 	0x1		/* auto-close on exec */
82 #define	UF_MAPPED 	0x2		/* mapped from device */
83 	struct	inode *u_cdir;		/* current directory */
84 	struct	inode *u_rdir;		/* root directory of current process */
85 	struct	tty *u_ttyp;		/* controlling tty pointer */
86 	dev_t	u_ttyd;			/* controlling tty dev */
87 	short	u_cmask;		/* mask for file creation */
88 
89 /* 1.5 - timing and statistics */
90 	struct	rusage u_ru;		/* stats for this proc */
91 	struct	rusage u_cru;		/* sum of stats for reaped children */
92 	struct	itimerval u_timer[3];
93 	int	u_XXX[3];
94 	struct	timeval u_start;
95 	short	u_acflag;
96 
97 	struct uprof {			/* profile arguments */
98 		short	*pr_base;	/* buffer base */
99 		unsigned pr_size;	/* buffer size */
100 		unsigned pr_off;	/* pc offset */
101 		unsigned pr_scale;	/* pc scaling */
102 	} u_prof;
103 
104 /* 1.6 - resource controls */
105 	struct	rlimit u_rlimit[RLIM_NLIMITS];
106 	struct	quota *u_quota;		/* user's quota structure */
107 	int	u_qflags;		/* per process quota flags */
108 
109 /* namei & co. */
110 	struct nameicache {		/* last successful directory search */
111 		int nc_prevoffset;	/* offset at which last entry found */
112 		ino_t nc_inumber;	/* inum of cached directory */
113 		dev_t nc_dev;		/* dev of cached directory */
114 		time_t nc_time;		/* time stamp for cache entry */
115 	} u_ncache;
116 	struct	nameidata u_nd;
117 
118 	int	u_stack[1];
119 };
120 
121 /* u_eosys values */
122 #define	JUSTRETURN	1
123 #define	RESTARTSYS	2
124 #define NORMALRETURN	3
125 
126 /* u_error codes */
127 #ifdef KERNEL
128 #include "errno.h"
129 #else
130 #include <errno.h>
131 #endif
132 
133 #ifdef KERNEL
134 extern	struct user u;
135 extern	struct user swaputl;
136 extern	struct user forkutl;
137 extern	struct user xswaputl;
138 extern	struct user xswap2utl;
139 extern	struct user pushutl;
140 extern	struct user vfutl;
141 #endif
142