* Copyright (c) 1982, 1986, 1989 Regents of the University of California.
* 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) %G%
#include <sys/resource.h>
* 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 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 */
#define r_val1 u_rv.R_val1
#define r_val2 u_rv.R_val2
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 uprof
{ /* profile arguments */
short *pr_base
; /* buffer base */
unsigned pr_size
; /* buffer size */
unsigned pr_off
; /* pc offset */
unsigned pr_scale
; /* pc scaling */
/* 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 */
extern struct user swaputl
;
extern struct user forkutl
;
extern struct user xswaputl
;
extern struct user xswap2utl
;
extern struct user pushutl
;
extern struct user vfutl
;