DataMuseum.dk

Presents historical artifacts from the history of:

RC9000

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about RC9000

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download
Index: @ T u

⟦a7ce6b536⟧ TextFile

    Length: 7622 (0x1dc6)
    Types: TextFile
    Notes: @(#)user.h 13.4 (RC International) 91/09/11 */
    Names: »user.h«

Derivation

└─⟦50656ff4a⟧ Bits:30010538 TX 3.1 Coldstart
    └─⟦bbf173f5c⟧ »0004« 
        └─⟦this⟧ »./usr/include/sys/user.h« 

TextFile

/*	@(#)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>