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.12 (Berkeley) 06/22/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 36 /* 1.1 - processes and protection */ 37 #define u_cred u_nd.ni_cred 38 #define u_uid u_cred->cr_uid /* effective user id */ 39 #define u_gid u_cred->cr_gid /* effective group id */ 40 41 /* 1.2 - memory management */ 42 segsz_t u_tsize; /* text size (clicks) */ 43 segsz_t u_dsize; /* data size (clicks) */ 44 segsz_t u_ssize; /* stack size (clicks) */ 45 struct dmap u_dmap; /* disk map for data segment */ 46 struct dmap u_smap; /* disk map for stack segment */ 47 struct dmap u_cdmap; /* temp data segment disk map */ 48 struct dmap u_csmap; /* temp stack segment disk map */ 49 label_t u_ssave; /* label variable for swapping */ 50 segsz_t u_odsize, u_ossize; /* for (clumsy) expansion swaps */ 51 time_t u_outime; /* user time at last sample */ 52 struct mapmem *u_mmap; /* list of mapped memory regions */ 53 54 /* 1.3 - signal management */ 55 sig_t u_signal[NSIG]; /* disposition of signals */ 56 int u_sigmask[NSIG]; /* signals to be blocked */ 57 int u_sigonstack; /* signals to take on sigstack */ 58 int u_sigintr; /* signals that interrupt syscalls */ 59 int u_oldmask; /* saved mask from before sigpause */ 60 struct sigstack u_sigstack; /* sp & on stack state variable */ 61 #define u_onstack u_sigstack.ss_onstack 62 #define u_sigsp u_sigstack.ss_sp 63 int u_sig; /* for core dump/debugger XXX */ 64 int u_code; /* for core dump/debugger XXX */ 65 66 /* 1.4 - descriptor management */ 67 struct file *u_ofile[NOFILE]; /* file structures for open files */ 68 char u_pofile[NOFILE]; /* per-process flags of open files */ 69 int u_lastfile; /* high-water mark of u_ofile */ 70 #define UF_EXCLOSE 0x1 /* auto-close on exec */ 71 #define UF_MAPPED 0x2 /* mapped from device */ 72 #define u_cdir u_nd.ni_cdir /* current directory */ 73 #define u_rdir u_nd.ni_rdir /* root directory of current process */ 74 short u_cmask; /* mask for file creation */ 75 76 /* 1.5 - timing and statistics */ 77 struct rusage u_ru; /* stats for this proc */ 78 struct rusage u_cru; /* sum of stats for reaped children */ 79 struct itimerval u_timer[3]; 80 struct timeval u_start; 81 short u_acflag; 82 83 struct uprof { /* profile arguments */ 84 short *pr_base; /* buffer base */ 85 unsigned pr_size; /* buffer size */ 86 unsigned pr_off; /* pc offset */ 87 unsigned pr_scale; /* pc scaling */ 88 } u_prof; 89 90 /* 1.6 - resource controls */ 91 struct rlimit u_rlimit[RLIM_NLIMITS]; 92 93 /* namei & co. */ 94 struct nameidata u_nd; 95 96 long u_spare[8]; 97 int u_stack[1]; 98 }; 99 100 /* u_eosys values */ 101 #define JUSTRETURN 1 102 #define RESTARTSYS 2 103 #define NORMALRETURN 3 104 105 /* u_error codes */ 106 #ifdef KERNEL 107 #include "errno.h" 108 #else 109 #include <errno.h> 110 #endif 111 112 #ifdef KERNEL 113 extern struct user u; 114 extern struct user swaputl; 115 extern struct user forkutl; 116 extern struct user xswaputl; 117 extern struct user xswap2utl; 118 extern struct user pushutl; 119 extern struct user vfutl; 120 #endif 121