xref: /original-bsd/sys/sys/user.h (revision c47935e1)
1 /*
2  * Copyright (c) 1982, 1986, 1989 Regents of the University of California.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms are permitted
6  * provided that the above copyright notice and this paragraph are
7  * duplicated in all such forms and that any documentation,
8  * advertising materials, and other materials related to such
9  * distribution and use acknowledge that the software was developed
10  * by the University of California, Berkeley.  The name of the
11  * University may not be used to endorse or promote products derived
12  * from this software without specific prior written permission.
13  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16  *
17  *	@(#)user.h	7.5 (Berkeley) 05/09/89
18  */
19 
20 #ifdef KERNEL
21 #include "machine/pcb.h"
22 #include "dmap.h"
23 #include "time.h"
24 #include "resource.h"
25 #include "namei.h"
26 #include "ucred.h"
27 #else
28 #include <machine/pcb.h>
29 #include <sys/dmap.h>
30 #include <sys/time.h>
31 #include <sys/resource.h>
32 #include <sys/namei.h>
33 #include <sys/ucred.h>
34 #endif
35 
36 /*
37  * Per process structure containing data that
38  * isn't needed in core when the process is swapped out.
39  */
40 
41 #define	MAXCOMLEN	16		/* <= MAXNAMLEN, >= sizeof(ac_comm) */
42 #define	MAXLOGNAME	12		/* >= UT_NAMESIZE */
43 
44 struct	user {
45 	struct	pcb u_pcb;
46 	struct	proc *u_procp;		/* pointer to proc structure */
47 	int	*u_ar0;			/* address of users saved R0 */
48 	char	u_comm[MAXCOMLEN + 1];
49 
50 /* syscall parameters, results and catches */
51 	int	u_arg[8];		/* arguments to current system call */
52 	int	*u_ap;			/* pointer to arglist */
53 	label_t	u_qsave;		/* for non-local gotos on interrupts */
54 	union {				/* syscall return values */
55 		struct	{
56 			int	R_val1;
57 			int	R_val2;
58 		} u_rv;
59 #define	r_val1	u_rv.R_val1
60 #define	r_val2	u_rv.R_val2
61 		off_t	r_off;
62 		time_t	r_time;
63 	} u_r;
64 	char	u_error;		/* return error code */
65 	char	u_eosys;		/* special action on end of syscall */
66 
67 /* 1.1 - processes and protection */
68 #define	u_ruid	u_cred->cr_ruid		/* real user id */
69 	gid_t	u_rgid;			/* real group id */
70 #define u_cred u_nd.ni_cred
71 #define u_uid	u_cred->cr_uid		/* effective user id */
72 #define u_gid	u_cred->cr_gid		/* effective group id */
73 #define u_ngroups u_cred->cr_ngroups	/* number of group id's */
74 #define u_groups u_cred->cr_groups	/* list of effective grp id's */
75 
76 /* 1.2 - memory management */
77 	size_t	u_tsize;		/* text size (clicks) */
78 	size_t	u_dsize;		/* data size (clicks) */
79 	size_t	u_ssize;		/* stack size (clicks) */
80 	struct	dmap u_dmap;		/* disk map for data segment */
81 	struct	dmap u_smap;		/* disk map for stack segment */
82 	struct	dmap u_cdmap;		/* temp data segment disk map */
83 	struct	dmap u_csmap;		/* temp stack segment disk map */
84 	label_t u_ssave;		/* label variable for swapping */
85 	size_t	u_odsize, u_ossize;	/* for (clumsy) expansion swaps */
86 	time_t	u_outime;		/* user time at last sample */
87 
88 /* 1.3 - signal management */
89 	int	(*u_signal[NSIG])();	/* disposition of signals */
90 	int	u_sigmask[NSIG];	/* signals to be blocked */
91 	int	u_sigonstack;		/* signals to take on sigstack */
92 	int	u_sigintr;		/* signals that interrupt syscalls */
93 	int	u_oldmask;		/* saved mask from before sigpause */
94 	int	u_code;			/* ``code'' to trap */
95 	struct	sigstack u_sigstack;	/* sp & on stack state variable */
96 #define	u_onstack	u_sigstack.ss_onstack
97 #define	u_sigsp		u_sigstack.ss_sp
98 
99 /* 1.4 - descriptor management */
100 	struct	file *u_ofile[NOFILE];	/* file structures for open files */
101 	char	u_pofile[NOFILE];	/* per-process flags of open files */
102 	int	u_lastfile;		/* high-water mark of u_ofile */
103 #define	UF_EXCLOSE 	0x1		/* auto-close on exec */
104 #define	UF_MAPPED 	0x2		/* mapped from device */
105 #define u_cdir u_nd.ni_cdir		/* current directory */
106 #define u_rdir u_nd.ni_rdir		/* root directory of current process */
107 	struct	tty *u_ttyp;		/* controlling tty pointer */
108 	dev_t	u_ttyd;			/* controlling tty dev */
109 	short	u_cmask;		/* mask for file creation */
110 
111 /* 1.5 - timing and statistics */
112 	struct	rusage u_ru;		/* stats for this proc */
113 	struct	rusage u_cru;		/* sum of stats for reaped children */
114 	struct	itimerval u_timer[3];
115 	char	u_logname[MAXLOGNAME];	/* login name, if available */
116 	struct	timeval u_start;
117 	short	u_acflag;
118 
119 	struct uprof {			/* profile arguments */
120 		short	*pr_base;	/* buffer base */
121 		unsigned pr_size;	/* buffer size */
122 		unsigned pr_off;	/* pc offset */
123 		unsigned pr_scale;	/* pc scaling */
124 	} u_prof;
125 
126 /* 1.6 - resource controls */
127 	struct	rlimit u_rlimit[RLIM_NLIMITS];
128 	struct	quota *u_quota;		/* user's quota structure */
129 	int	u_qflags;		/* per process quota flags */
130 
131 /* namei & co. */
132 	struct	nameidata u_nd;
133 
134 	int	u_stack[1];
135 };
136 
137 /* u_eosys values */
138 #define	JUSTRETURN	1
139 #define	RESTARTSYS	2
140 #define NORMALRETURN	3
141 
142 /* u_error codes */
143 #ifdef KERNEL
144 #include "errno.h"
145 #else
146 #include <errno.h>
147 #endif
148 
149 #ifdef KERNEL
150 extern	struct user u;
151 extern	struct user swaputl;
152 extern	struct user forkutl;
153 extern	struct user xswaputl;
154 extern	struct user xswap2utl;
155 extern	struct user pushutl;
156 extern	struct user vfutl;
157 #endif
158