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