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