0400: /*
0401: * The user structure.
0402: * One allocated per process.
0403: * Contains all per process data
0404: * that doesn't need to be referenced
0405: * while the process is swapped.
0406: * The user block is USIZE*64 bytes
0407: * long; resides at virtual kernel
0408: * loc 140000; contains the system
0409: * stack per user; is cross referenced
0410: * with the proc structure for the
0411: * same process.
0412: */
0413: struct user
0414: {
0415: int u_rsav[2]; /* save r5,r6 when exchanging stacks */
0416: int u_fsav[25]; /* save fp registers */
0417: /* rsav and fsav must be first in structure */
0418: char u_segflg; /* flag for IO; user or kernel space */
0419: char u_error; /* return error code */
0420: char u_uid; /* effective user id */
0421: char u_gid; /* effective group id */
0422: char u_ruid; /* real user id */
0423: char u_rgid; /* real group id */
0424: int u_procp; /* pointer to proc structure */
0425: char *u_base; /* base address for IO */
0426: char *u_count; /* bytes remaining for IO */
0427: char *u_offset[2]; /* offset in file for IO */
0428: int *u_cdir; /* pointer to inode of current directory */
0429: char u_dbuf[DIRSIZ]; /* current pathname component */
0430: char *u_dirp; /* current pointer to inode */
0431: struct { /* current directory entry */
0432: int u_ino;
0433: char u_name[DIRSIZ];
0434: } u_dent;
0435: int *u_pdir; /* inode of parent directory of dirp */
0436: int u_uisa[16]; /* prototype of segmentation addresses */
0437: int u_uisd[16]; /* prototype of segmentation descriptors */
0438: int u_ofile[NOFILE]; /* pointers to file structures of open files */
0439: int u_arg[5]; /* arguments to current system call */
0440: int u_tsize; /* text size (*64) */
0441: int u_dsize; /* data size (*64) */
0442: int u_ssize; /* stack size (*64) */
0443: int u_sep; /* flag for I and D separation */
0444: int u_qsav[2]; /* label variable for quits and interrupts */
0445: int u_ssav[2]; /* label variable for swapping */
0446: int u_signal[NSIG]; /* disposition of signals */
0447: int u_utime; /* this process user time */
0448: int u_stime; /* this process system time */
0449: int u_cutime[2]; /* sum of childs' utimes */
0450: int u_cstime[2]; /* sum of childs' stimes */
0451: int *u_ar0; /* address of users saved R0 */
0452: int u_prof[4]; /* profile arguments */
0453: char u_intflg; /* catch intr from sys */
0454: /* kernel stack per user
0455: * extends from u + USIZE*64
0456: * backward not to reach here
0457: */
0458: } u;
0459: /* --------------------------- */
0460:
0461: /* u_error codes */
0462:
0463:
0464:
0465: #define EFAULT 106
0466: #define EPERM 1
0467: #define ENOENT 2
0468: #define ESRCH 3
0469: #define EINTR 4
0470: #define EIO 5
0471: #define ENXIO 6
0472: #define E2BIG 7
0473: #define ENOEXEC 8
0474: #define EBADF 9
0475: #define ECHILD 10
0476: #define EAGAIN 11
0477: #define ENOMEM 12
0478: #define EACCES 13
0479: #define ENOTBLK 15
0480: #define EBUSY 16
0481: #define EEXIST 17
0482: #define EXDEV 18
0483: #define ENODEV 19
0484: #define ENOTDIR 20
0485: #define EISDIR 21
0486: #define EINVAL 22
0487: #define ENFILE 23
0488: #define EMFILE 24
0489: #define ENOTTY 25
0490: #define ETXTBSY 26
0491: #define EFBIG 27
0492: #define ENOSPC 28
0493: #define ESPIPE 29
0494: #define EROFS 30
0495: #define EMLINK 31
0496: #define EPIPE 32