/* * Copyright (c) 1982, 1986, 1989 Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms are permitted * provided that the above copyright notice and this paragraph are * duplicated in all such forms and that any documentation, * advertising materials, and other materials related to such * distribution and use acknowledge that the software was developed * by the University of California, Berkeley. The name of the * University may not be used to endorse or promote products derived * from this software without specific prior written permission. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * * @(#)user.h 7.7 (Berkeley) 08/31/89 */ #ifdef KERNEL #include "machine/pcb.h" #include "dmap.h" #include "time.h" #include "resource.h" #include "namei.h" #include "ucred.h" #else #include #include #include #include #include #include #endif /* * Per process structure containing data that * isn't needed in core when the process is swapped out. */ #define MAXCOMLEN 16 /* <= MAXNAMLEN, >= sizeof(ac_comm) */ #define MAXLOGNAME 12 /* >= UT_NAMESIZE */ struct user { struct pcb u_pcb; struct proc *u_procp; /* pointer to proc structure */ int *u_ar0; /* address of users saved R0 */ char u_comm[MAXCOMLEN + 1]; /* syscall parameters, results and catches */ int u_arg[8]; /* arguments to current system call */ int *u_ap; /* pointer to arglist */ label_t u_qsave; /* for non-local gotos on interrupts */ union { /* syscall return values */ struct { int R_val1; int R_val2; } u_rv; #define r_val1 u_rv.R_val1 #define r_val2 u_rv.R_val2 off_t r_off; time_t r_time; } u_r; char u_error; /* return error code */ char u_eosys; /* special action on end of syscall */ /* 1.1 - processes and protection */ char u_logname[MAXLOGNAME]; /* login name, if available */ #define u_ruid u_procp->p_ruid /* real user id - XXX */ #define u_rgid u_procp->p_rgid /* real group id - XXX */ #define u_cred u_nd.ni_cred #define u_uid u_cred->cr_uid /* effective user id */ #define u_gid u_cred->cr_gid /* effective group id */ #define u_ngroups u_cred->cr_ngroups /* number of group id's */ #define u_groups u_cred->cr_groups /* list of effective grp id's */ /* 1.2 - memory management */ size_t u_tsize; /* text size (clicks) */ size_t u_dsize; /* data size (clicks) */ size_t u_ssize; /* stack size (clicks) */ struct dmap u_dmap; /* disk map for data segment */ struct dmap u_smap; /* disk map for stack segment */ struct dmap u_cdmap; /* temp data segment disk map */ struct dmap u_csmap; /* temp stack segment disk map */ label_t u_ssave; /* label variable for swapping */ size_t u_odsize, u_ossize; /* for (clumsy) expansion swaps */ time_t u_outime; /* user time at last sample */ /* 1.3 - signal management */ int (*u_signal[NSIG])(); /* disposition of signals */ int u_sigmask[NSIG]; /* signals to be blocked */ int u_sigonstack; /* signals to take on sigstack */ int u_sigintr; /* signals that interrupt syscalls */ int u_oldmask; /* saved mask from before sigpause */ int u_code; /* ``code'' to trap */ struct sigstack u_sigstack; /* sp & on stack state variable */ #define u_onstack u_sigstack.ss_onstack #define u_sigsp u_sigstack.ss_sp /* 1.4 - descriptor management */ struct file *u_ofile[NOFILE]; /* file structures for open files */ char u_pofile[NOFILE]; /* per-process flags of open files */ int u_lastfile; /* high-water mark of u_ofile */ #define UF_EXCLOSE 0x1 /* auto-close on exec */ #define UF_MAPPED 0x2 /* mapped from device */ #define u_cdir u_nd.ni_cdir /* current directory */ #define u_rdir u_nd.ni_rdir /* root directory of current process */ struct tty *u_ttyp; /* controlling tty pointer */ dev_t u_ttyd; /* controlling tty dev */ short u_cmask; /* mask for file creation */ /* 1.5 - timing and statistics */ struct rusage u_ru; /* stats for this proc */ struct rusage u_cru; /* sum of stats for reaped children */ struct itimerval u_timer[3]; struct timeval u_start; short u_acflag; struct uprof { /* profile arguments */ short *pr_base; /* buffer base */ unsigned pr_size; /* buffer size */ unsigned pr_off; /* pc offset */ unsigned pr_scale; /* pc scaling */ } u_prof; /* 1.6 - resource controls */ struct rlimit u_rlimit[RLIM_NLIMITS]; struct quota *u_quota; /* user's quota structure */ int u_qflags; /* per process quota flags */ /* namei & co. */ struct nameidata u_nd; long u_spare[8]; int u_stack[1]; }; /* u_eosys values */ #define JUSTRETURN 1 #define RESTARTSYS 2 #define NORMALRETURN 3 /* u_error codes */ #ifdef KERNEL #include "errno.h" #else #include #endif #ifdef KERNEL extern struct user u; extern struct user swaputl; extern struct user forkutl; extern struct user xswaputl; extern struct user xswap2utl; extern struct user pushutl; extern struct user vfutl; #endif