xref: /original-bsd/sys/sys/user.h (revision 9f9ff93c)
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.11 (Berkeley) 05/15/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 /* syscall parameters, results and catches */
36 	int	u_arg[8];		/* arguments to current system call */
37 	int	*u_ap;			/* pointer to arglist */
38 	union {				/* syscall return values */
39 		struct	{
40 			int	R_val1;
41 			int	R_val2;
42 		} u_rv;
43 #define	r_val1	u_rv.R_val1
44 #define	r_val2	u_rv.R_val2
45 		off_t	r_off;
46 		time_t	r_time;
47 	} u_r;
48 	int	u_error;		/* return error code */
49 
50 /* 1.1 - processes and protection */
51 #define u_cred u_nd.ni_cred
52 #define u_uid	u_cred->cr_uid		/* effective user id */
53 #define u_gid	u_cred->cr_gid		/* effective group id */
54 
55 /* 1.2 - memory management */
56 	segsz_t u_tsize;		/* text size (clicks) */
57 	segsz_t u_dsize;		/* data size (clicks) */
58 	segsz_t u_ssize;		/* stack size (clicks) */
59 	struct	dmap u_dmap;		/* disk map for data segment */
60 	struct	dmap u_smap;		/* disk map for stack segment */
61 	struct	dmap u_cdmap;		/* temp data segment disk map */
62 	struct	dmap u_csmap;		/* temp stack segment disk map */
63 	label_t u_ssave;		/* label variable for swapping */
64 	segsz_t u_odsize, u_ossize;	/* for (clumsy) expansion swaps */
65 	time_t	u_outime;		/* user time at last sample */
66 	struct	mapmem *u_mmap;		/* list of mapped memory regions */
67 
68 /* 1.3 - signal management */
69 	sig_t	u_signal[NSIG];		/* disposition of signals */
70 	int	u_sigmask[NSIG];	/* signals to be blocked */
71 	int	u_sigonstack;		/* signals to take on sigstack */
72 	int	u_sigintr;		/* signals that interrupt syscalls */
73 	int	u_oldmask;		/* saved mask from before sigpause */
74 	struct	sigstack u_sigstack;	/* sp & on stack state variable */
75 #define	u_onstack	u_sigstack.ss_onstack
76 #define	u_sigsp		u_sigstack.ss_sp
77 #define	u_sig	u_arg[0]		/* for core dump/debugger XXX */
78 #define	u_code	u_arg[1]		/* for core dump/debugger XXX */
79 
80 /* 1.4 - descriptor management */
81 	struct	file *u_ofile[NOFILE];	/* file structures for open files */
82 	char	u_pofile[NOFILE];	/* per-process flags of open files */
83 	int	u_lastfile;		/* high-water mark of u_ofile */
84 #define	UF_EXCLOSE 	0x1		/* auto-close on exec */
85 #define	UF_MAPPED 	0x2		/* mapped from device */
86 #define u_cdir u_nd.ni_cdir		/* current directory */
87 #define u_rdir u_nd.ni_rdir		/* root directory of current process */
88 	short	u_cmask;		/* mask for file creation */
89 
90 /* 1.5 - timing and statistics */
91 	struct	rusage u_ru;		/* stats for this proc */
92 	struct	rusage u_cru;		/* sum of stats for reaped children */
93 	struct	itimerval u_timer[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 
107 /* namei & co. */
108 	struct	nameidata u_nd;
109 
110 	long	u_spare[8];
111 	int	u_stack[1];
112 };
113 
114 /* u_eosys values */
115 #define	JUSTRETURN	1
116 #define	RESTARTSYS	2
117 #define NORMALRETURN	3
118 
119 /* u_error codes */
120 #ifdef KERNEL
121 #include "errno.h"
122 #else
123 #include <errno.h>
124 #endif
125 
126 #ifdef KERNEL
127 extern	struct user u;
128 extern	struct user swaputl;
129 extern	struct user forkutl;
130 extern	struct user xswaputl;
131 extern	struct user xswap2utl;
132 extern	struct user pushutl;
133 extern	struct user vfutl;
134 #endif
135