|
|
DataMuseum.dkPresents historical artifacts from the history of: RC9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - downloadIndex: @ T u
Length: 7622 (0x1dc6)
Types: TextFile
Notes: @(#)user.h 13.4 (RC International) 91/09/11 */
Names: »user.h«
└─⟦50656ff4a⟧ Bits:30010538 TX 3.1 Coldstart
└─⟦bbf173f5c⟧ »0004«
└─⟦this⟧ »./usr/include/sys/user.h«
/* @(#)user.h 13.4 (RC International) 91/09/11 */
#include <rc/pcb.h>
#include <sys/dmap.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <sys/exec.h>
#define UMAGIC 0x65ad7667
/*
* Per process structure containing data that
* isn't needed in core when the process is swapped out.
*/
#define SHSIZE 32
#define AOUTSIZE (sizeof(struct exec)/sizeof(unsigned))
#define MAXCOMLEN 16 /* <= MAXNAMLEN, >= sizeof(a_com) */
#define UFILENUMROWS 8
#define UFILEROWSIZE 32
#define UFILESHIFT 5
#define UFILEMASK (UFILEROWSIZE - 1)
struct user {
struct pcb u_pcb; /* machine specific context state */
int u_magic; /* magic number */
int u_size; /* size of u. area (bytes) */
struct proc *u_procp; /* pointer to proc structure */
int *u_ar0; /* address of users saved R0 */
char u_comm[MAXNAMLEN + 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 */
char u_error; /* return error code */
bool_t u_non_update; /* in non_update transaction state */
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_eosys; /* special action on end of syscall */
int u_syscallno; /* last syscall no */
int u_reserve0[7]; /* reserved for expansion */
/* 1.1 - processes and protection */
short u_uid; /* effective user id */
short u_gid; /* effective group id */
int u_groups[NGROUPS]; /* groups, 0 terminated */
short u_ruid; /* real user id */
short u_rgid; /* real group id */
int u_reserve1[8]; /* reserved for expansion */
/* 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) */
long u_textstart; /* starting address of text (for dbx) */
long u_datastart; /* starting address of data (for dbx) */
struct dmap u_dmap; /* disk map for data segment */
struct dmap u_smap; /* disk map for stack segment */
struct dmap u_cdmap, u_csmap; /* shadows of u_dmap, u_smap, for
use of parent during fork */
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 */
int u_reserve2[6]; /* reserved for expansion */
/* 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_oldmask; /* saved mask from before sigpause */
int u_code; /* ``code'' to trap */
int u_sigflag; /* signal flags from sigsetmode */
struct sigstack u_sigstack; /* sp & on stack state variable */
#define u_onstack u_sigstack.ss_onstack
#define u_sigsp u_sigstack.ss_sp
int (*u_sigtramp)(); /* library cleanup address */
int u_sigintr; /* signals that interrupt syscalls */
int u_signodefer; /* signals defered when caught */
int u_sigresethand; /* signals reset when caught */
int u_reserve3[6]; /* reserved for expansion */
/* 1.4 - descriptor management */
int u_filemax; /* max files used this process */
struct file
**u_files[UFILENUMROWS];
/* blocks of file descriptor pointers */
u_char *u_fileflags[UFILENUMROWS];
/* one per file flags word */
#define UF_EXCLOSE 0x1 /* auto-close on exec */
#define UF_MAPPED 0x2 /* mapped from device */
#define UF_TRANS 0x4 /* in transaction */
/*
* The upper bits of the u_fileflags is used to store the current lock mode
* of the file in order to pass the information to the child during a fork.
*/
#define UF_LOCK_NULL (1 << 4) /* NULL lock */
#define UF_LOCK_IS (2 << 4) /* IS lock */
#define UF_LOCK_IX (3 << 4) /* IX lock */
#define UF_LOCK_S (4 << 4) /* S lock */
#define UF_LOCK_SIX (5 << 4) /* SIX lock */
#define UF_LOCK_X (6 << 4) /* X lock */
#define UF_LOCK_XIS (7 << 4) /* XIS lock */
int u_cdir_ino; /* i # of current working directory */
UID_T u_cdir_fsuid; /* fs uid of cw directory */
UID_T u_cdir_nameuid; /* nameserver uid of cw directory */
int u_rdir_ino; /* i #number of root directory */
UID_T u_rdir_fsuid; /* fs uid of root directory */
UID_T u_rdir_nameuid; /* nameserver uid of root directory */
struct tty_pty *u_ttyp; /* controlling tty pointer */
dev_t u_ttyd; /* controlling tty dev */
UID_T u_trid; /* transaction id, or zero if no tr. */
int u_ipctr_pid; /* ipc tr client pid on server proc */
/* on client side it is 0 */
int u_ipctr_ppid; /* ipc tr parent pid of a server */
UID_T u_ipctr_puid; /* ipctr parent proc asyncq uid */
u_char u_ipctr_ncp; /* no of child ipctr process */
u_char u_mxtr_ninvites; /* no of invitations for mxipc trans */
short u_ipctr_sig_cnt; /* use async_receiver do sync wait */
bool_t u_ipctr_ready; /* this proc enter tr_ready state */
bool_t u_ipctr_mx; /* mxipc transaction (server side) */
short u_cmask; /* mask for file creation */
bool_t u_tr_writer; /* the current tr did a write */
struct mxtr_filelist *u_mx_flist; /*mxipc file list */
int u_reserve4[8]; /* reserved for expansion */
/* 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[5];
struct timeval u_start; /* start time of process */
short u_acflag; /* accounting flags */
int u_read_calls; /* # of read calls */
int u_bytes_read; /* # of bytes read */
int u_write_calls; /* # of write calls */
int u_bytes_sent; /* # of bytes written */
int u_btr_calls; /* # of begin transaction calls */
int u_fswait; /* time to wait for an unmounted f/s */
int u_reserve5[8]; /* reserved for expansion */
/* 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 */
int u_reserve6[8]; /* reserved for expansion */
/* 1.7 - debugger status */
struct file *u_debugfile; /* file struct for debugger's fd */
int u_debugpid; /* pid of debugger process */
int u_reserve7[8]; /* reserved for expansion */
/* BEGIN TRASH */
char u_segflg; /* 0:user D; 1:system; 2:user I */
caddr_t u_base; /* base address for IO */
unsigned int u_count; /* bytes remaining for IO */
off_t u_offset; /* offset in file for IO */
union {
unsigned ux_aout[AOUTSIZE]; /* referenced as a struct exec */
char ux_shell[SHSIZE]; /* #! and name of interpreter */
} u_exdata;
caddr_t u_dirp; /* pathname pointer */
struct direct u_dent; /* current directory entry */
struct inode *u_pdir; /* inode of parent directory of dirp */
int u_reserve8[8]; /* reserved for expansion */
/* END TRASH */
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;
/* was shared mem */
int u_reserve9a[16];
/* 1.9 uid_queue management */
struct uid_queue *u_mmq; /* for multi-message events */
struct uid_queue *u_csq; /* for connection system use */
/* sysv shared memory */
#define U_MAXSHM 16
struct ushm_segdesc {
unsigned ushm_base;
unsigned ushm_size;
} u_shm[U_MAXSHM];
int u_reserve9[21]; /* reserved for expansion */
int u_stack[1];
};
/* u_eosys values */
#define JUSTRETURN 0
#define RESTARTSYS 1
#define SIMULATERTI 2
#define REALLYRETURN 3
#define INTRSYS 4
/* u_error codes */
#include <errno.h>