xref: /original-bsd/sys/sys/user.h (revision 82ad9df5)
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.6 (Berkeley) 06/06/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 	char	u_logname[MAXLOGNAME];	/* login name, if available */
69 #define	u_ruid	u_cred->cr_ruid		/* real user id */
70 	gid_t	u_rgid;			/* real group id */
71 #define u_cred u_nd.ni_cred
72 #define u_uid	u_cred->cr_uid		/* effective user id */
73 #define u_gid	u_cred->cr_gid		/* effective group id */
74 #define u_ngroups u_cred->cr_ngroups	/* number of group id's */
75 #define u_groups u_cred->cr_groups	/* list of effective grp id's */
76 
77 /* 1.2 - memory management */
78 	size_t	u_tsize;		/* text size (clicks) */
79 	size_t	u_dsize;		/* data size (clicks) */
80 	size_t	u_ssize;		/* stack size (clicks) */
81 	struct	dmap u_dmap;		/* disk map for data segment */
82 	struct	dmap u_smap;		/* disk map for stack segment */
83 	struct	dmap u_cdmap;		/* temp data segment disk map */
84 	struct	dmap u_csmap;		/* temp stack segment disk map */
85 	label_t u_ssave;		/* label variable for swapping */
86 	size_t	u_odsize, u_ossize;	/* for (clumsy) expansion swaps */
87 	time_t	u_outime;		/* user time at last sample */
88 
89 /* 1.3 - signal management */
90 	int	(*u_signal[NSIG])();	/* disposition of signals */
91 	int	u_sigmask[NSIG];	/* signals to be blocked */
92 	int	u_sigonstack;		/* signals to take on sigstack */
93 	int	u_sigintr;		/* signals that interrupt syscalls */
94 	int	u_oldmask;		/* saved mask from before sigpause */
95 	int	u_code;			/* ``code'' to trap */
96 	struct	sigstack u_sigstack;	/* sp & on stack state variable */
97 #define	u_onstack	u_sigstack.ss_onstack
98 #define	u_sigsp		u_sigstack.ss_sp
99 
100 /* 1.4 - descriptor management */
101 	struct	file *u_ofile[NOFILE];	/* file structures for open files */
102 	char	u_pofile[NOFILE];	/* per-process flags of open files */
103 	int	u_lastfile;		/* high-water mark of u_ofile */
104 #define	UF_EXCLOSE 	0x1		/* auto-close on exec */
105 #define	UF_MAPPED 	0x2		/* mapped from device */
106 #define u_cdir u_nd.ni_cdir		/* current directory */
107 #define u_rdir u_nd.ni_rdir		/* root directory of current process */
108 	struct	tty *u_ttyp;		/* controlling tty pointer */
109 	dev_t	u_ttyd;			/* controlling tty dev */
110 	short	u_cmask;		/* mask for file creation */
111 
112 /* 1.5 - timing and statistics */
113 	struct	rusage u_ru;		/* stats for this proc */
114 	struct	rusage u_cru;		/* sum of stats for reaped children */
115 	struct	itimerval u_timer[3];
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 	long	u_spare[8];
135 	int	u_stack[1];
136 };
137 
138 /* u_eosys values */
139 #define	JUSTRETURN	1
140 #define	RESTARTSYS	2
141 #define NORMALRETURN	3
142 
143 /* u_error codes */
144 #ifdef KERNEL
145 #include "errno.h"
146 #else
147 #include <errno.h>
148 #endif
149 
150 #ifdef KERNEL
151 extern	struct user u;
152 extern	struct user swaputl;
153 extern	struct user forkutl;
154 extern	struct user xswaputl;
155 extern	struct user xswap2utl;
156 extern	struct user pushutl;
157 extern	struct user vfutl;
158 #endif
159