xref: /original-bsd/sys/sys/user.h (revision 3aaceb89)
1 /*	user.h	4.20	82/09/12	*/
2 
3 #include <sys/pcb.h>
4 #include <sys/dmap.h>
5 #include <time.h>
6 #include <resource.h>
7 /*
8  * Per process structure containing data that
9  * isn't needed in core when the process is swapped out.
10  */
11 
12 #define	SHSIZE	32
13 
14 struct	user {
15 	struct	pcb u_pcb;
16 	struct	proc *u_procp;		/* pointer to proc structure */
17 	int	*u_ar0;			/* address of users saved R0 */
18 	char	u_comm[MAXNAMLEN + 1];
19 
20 /* syscall parameters, results and catches */
21 	int	u_arg[8];		/* arguments to current system call */
22 	int	*u_ap;			/* pointer to arglist */
23 	label_t	u_qsave;		/* for non-local gotos on interrupts */
24 	char	u_error;		/* return error code */
25 	union {				/* syscall return values */
26 		struct	{
27 			int	R_val1;
28 			int	R_val2;
29 		} u_rv;
30 #define	r_val1	u_rv.R_val1
31 #define	r_val2	u_rv.R_val2
32 		off_t	r_off;
33 		time_t	r_time;
34 	} u_r;
35 	char	u_eosys;		/* special action on end of syscall */
36 
37 /* 1.1 - processes and protection */
38 	short	u_uid;			/* effective user id */
39 	short	u_gid;			/* effective group id */
40 	int	u_groups[NGROUPS];	/* groups, 0 terminated */
41 	short	u_ruid;			/* real user id */
42 	short	u_rgid;			/* real group id */
43 
44 /* 1.2 - memory management */
45 	size_t	u_tsize;		/* text size (clicks) */
46 	size_t	u_dsize;		/* data size (clicks) */
47 	size_t	u_ssize;		/* stack size (clicks) */
48 	struct	dmap u_dmap;		/* disk map for data segment */
49 	struct	dmap u_smap;		/* disk map for stack segment */
50 	struct	dmap u_cdmap, u_csmap;	/* shadows of u_dmap, u_smap, for
51 					   use of parent during fork */
52 	label_t u_ssave;		/* label variable for swapping */
53 	size_t	u_odsize, u_ossize;	/* for (clumsy) expansion swaps */
54 	time_t	u_outime;		/* user time at last sample */
55 
56 /* 1.3 - signal management */
57 	int	(*u_signal[NSIG])();	/* disposition of signals */
58 	long	u_sigmask[NSIG];	/* signals to be blocked */
59 	int	u_code;			/* ``code'' to trap */
60 	caddr_t	u_sigstack;		/* 0 means no sigstack */
61 	int	u_onsigstack;
62 /* on SIGILL code passes compatibility mode fault address  */
63 /* on SIGFPE code passes more specific kind of floating point fault */
64 
65 /* 1.4 - descriptor management */
66 	struct	file *u_ofile[NOFILE];	/* file structures for open files */
67 	char	u_pofile[NOFILE];	/* per-process flags of open files */
68 #define	EXCLOSE 01		/* auto-close on exec */
69 #define	RDLOCK	02		/* read lock present */
70 #define	WRLOCK	04		/* write lock present */
71 	struct	inode *u_cdir;		/* current directory */
72 	struct	inode *u_rdir;		/* root directory of current process */
73 	struct	tty *u_ttyp;		/* controlling tty pointer */
74 	dev_t	u_ttyd;			/* controlling tty dev */
75 	short	u_cmask;		/* mask for file creation */
76 
77 /* 1.5 - timing and statistics */
78 	struct	rusage u_ru;		/* stats for this proc */
79 	struct	rusage u_cru;		/* sum of stats for reaped children */
80 	struct	itimerval u_timer[3];
81 	int	u_XXX[3];
82 	time_t	u_start;
83 	short	u_acflag;
84 
85 /* 1.6 - resource controls */
86 	struct	rlimit u_rlimit[RLIM_NLIMITS];
87 	struct	quota *u_quota;	/* user's quota structure */
88 	int	u_qflags;		/* per process quota flags */
89 
90 /* BEGIN TRASH */
91 	char	u_segflg;		/* 0:user D; 1:system; 2:user I */
92 	caddr_t	u_base;			/* base address for IO */
93 	unsigned int u_count;		/* bytes remaining for IO */
94 	off_t	u_offset;		/* offset in file for IO */
95 	union {
96 	   struct {			/* header of executable file */
97 		int	Ux_mag;		/* magic number */
98 		unsigned Ux_tsize;	/* text size */
99 		unsigned Ux_dsize;	/* data size */
100 		unsigned Ux_bsize;	/* bss size */
101 		unsigned Ux_ssize;	/* symbol table size */
102 		unsigned Ux_entloc;	/* entry location */
103 		unsigned Ux_unused;
104 		unsigned Ux_relflg;
105 	   } Ux_A;
106 	   char ux_shell[SHSIZE];	/* #! and name of interpreter */
107 	} u_exdata;
108 #define	ux_mag		Ux_A.Ux_mag
109 #define	ux_tsize	Ux_A.Ux_tsize
110 #define	ux_dsize	Ux_A.Ux_dsize
111 #define	ux_bsize	Ux_A.Ux_bsize
112 #define	ux_ssize	Ux_A.Ux_ssize
113 #define	ux_entloc	Ux_A.Ux_entloc
114 #define	ux_unused	Ux_A.Ux_unused
115 #define	ux_relflg	Ux_A.Ux_relflg
116 	caddr_t	u_dirp;			/* pathname pointer */
117 	struct	direct u_dent;		/* current directory entry */
118 	struct	inode *u_pdir;		/* inode of parent directory of dirp */
119 /* END TRASH */
120 	int	u_stack[1];
121 };
122 
123 /* u_eosys values */
124 #define	JUSTRETURN	0
125 #define	RESTARTSYS	1
126 #define	SIMULATERTI	2
127 
128 /* u_error codes */
129 #include <errno.h>
130 
131 #ifdef KERNEL
132 extern	struct user u;
133 extern	struct user swaputl;
134 extern	struct user forkutl;
135 extern	struct user xswaputl;
136 extern	struct user xswap2utl;
137 extern	struct user pushutl;
138 extern	struct user vfutl;
139 #endif
140