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