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