xref: /original-bsd/sys/sys/user.h (revision f4de999c)
1 /*
2  * Copyright (c) 1982, 1986, 1989 Regents of the University of California.
3  * All rights reserved.
4  *
5  * %sccs.include.redist.c%
6  *
7  *	@(#)user.h	7.12 (Berkeley) 06/22/90
8  */
9 
10 #ifdef KERNEL
11 #include "machine/pcb.h"
12 #include "dmap.h"
13 #include "time.h"
14 #include "resource.h"
15 #include "namei.h"
16 #include "ucred.h"
17 #else
18 #include <machine/pcb.h>
19 #include <sys/dmap.h>
20 #include <sys/time.h>
21 #include <sys/resource.h>
22 #include <sys/namei.h>
23 #include <sys/ucred.h>
24 #endif
25 
26 /*
27  * Per process structure containing data that
28  * isn't needed in core when the process is swapped out.
29  */
30 
31 struct	user {
32 	struct	pcb u_pcb;
33 	struct	proc *u_procp;		/* pointer to proc structure */
34 	int	*u_ar0;			/* address of users saved R0 */
35 
36 /* 1.1 - processes and protection */
37 #define u_cred u_nd.ni_cred
38 #define u_uid	u_cred->cr_uid		/* effective user id */
39 #define u_gid	u_cred->cr_gid		/* effective group id */
40 
41 /* 1.2 - memory management */
42 	segsz_t u_tsize;		/* text size (clicks) */
43 	segsz_t u_dsize;		/* data size (clicks) */
44 	segsz_t u_ssize;		/* stack size (clicks) */
45 	struct	dmap u_dmap;		/* disk map for data segment */
46 	struct	dmap u_smap;		/* disk map for stack segment */
47 	struct	dmap u_cdmap;		/* temp data segment disk map */
48 	struct	dmap u_csmap;		/* temp stack segment disk map */
49 	label_t u_ssave;		/* label variable for swapping */
50 	segsz_t u_odsize, u_ossize;	/* for (clumsy) expansion swaps */
51 	time_t	u_outime;		/* user time at last sample */
52 	struct	mapmem *u_mmap;		/* list of mapped memory regions */
53 
54 /* 1.3 - signal management */
55 	sig_t	u_signal[NSIG];		/* disposition of signals */
56 	int	u_sigmask[NSIG];	/* signals to be blocked */
57 	int	u_sigonstack;		/* signals to take on sigstack */
58 	int	u_sigintr;		/* signals that interrupt syscalls */
59 	int	u_oldmask;		/* saved mask from before sigpause */
60 	struct	sigstack u_sigstack;	/* sp & on stack state variable */
61 #define	u_onstack	u_sigstack.ss_onstack
62 #define	u_sigsp		u_sigstack.ss_sp
63 	int	u_sig;			/* for core dump/debugger XXX */
64 	int	u_code;			/* for core dump/debugger XXX */
65 
66 /* 1.4 - descriptor management */
67 	struct	file *u_ofile[NOFILE];	/* file structures for open files */
68 	char	u_pofile[NOFILE];	/* per-process flags of open files */
69 	int	u_lastfile;		/* high-water mark of u_ofile */
70 #define	UF_EXCLOSE 	0x1		/* auto-close on exec */
71 #define	UF_MAPPED 	0x2		/* mapped from device */
72 #define u_cdir u_nd.ni_cdir		/* current directory */
73 #define u_rdir u_nd.ni_rdir		/* root directory of current process */
74 	short	u_cmask;		/* mask for file creation */
75 
76 /* 1.5 - timing and statistics */
77 	struct	rusage u_ru;		/* stats for this proc */
78 	struct	rusage u_cru;		/* sum of stats for reaped children */
79 	struct	itimerval u_timer[3];
80 	struct	timeval u_start;
81 	short	u_acflag;
82 
83 	struct uprof {			/* profile arguments */
84 		short	*pr_base;	/* buffer base */
85 		unsigned pr_size;	/* buffer size */
86 		unsigned pr_off;	/* pc offset */
87 		unsigned pr_scale;	/* pc scaling */
88 	} u_prof;
89 
90 /* 1.6 - resource controls */
91 	struct	rlimit u_rlimit[RLIM_NLIMITS];
92 
93 /* namei & co. */
94 	struct	nameidata u_nd;
95 
96 	long	u_spare[8];
97 	int	u_stack[1];
98 };
99 
100 /* u_eosys values */
101 #define	JUSTRETURN	1
102 #define	RESTARTSYS	2
103 #define NORMALRETURN	3
104 
105 /* u_error codes */
106 #ifdef KERNEL
107 #include "errno.h"
108 #else
109 #include <errno.h>
110 #endif
111 
112 #ifdef KERNEL
113 extern	struct user u;
114 extern	struct user swaputl;
115 extern	struct user forkutl;
116 extern	struct user xswaputl;
117 extern	struct user xswap2utl;
118 extern	struct user pushutl;
119 extern	struct user vfutl;
120 #endif
121