|
|
1.1 ! root 1: #ifdef KERNEL ! 2: #include "../machine/pcb.h" ! 3: #include "../machine/reg.h" ! 4: #include "../h/dmap.h" ! 5: #include "../h/vtimes.h" ! 6: #else ! 7: #include <machine/reg.h> ! 8: #include <machine/pcb.h> ! 9: #include <sys/dmap.h> ! 10: #include <sys/vtimes.h> ! 11: #endif ! 12: /* ! 13: * The user structure. ! 14: * One allocated per process. ! 15: * Contains all per process data ! 16: * that doesn't need to be referenced ! 17: * while the process is swapped. ! 18: * The user block is UPAGES*NBPG bytes ! 19: * long; resides at virtual user ! 20: * loc 0x80000000-UPAGES*NBPG; contains the system ! 21: * stack per user; is cross referenced ! 22: * with the proc structure for the ! 23: * same process. ! 24: */ ! 25: ! 26: #define SHSIZE 32 ! 27: #define NOGROUP (short)-1 /* end of group marker */ ! 28: ! 29: struct user ! 30: { ! 31: char u_stack[KERNSTACK]; /* the kernel stack */ ! 32: struct pcb u_pcb; ! 33: int u_arg[5]; /* arguments to current system call */ ! 34: label_t u_qsav; /* for non-local gotos on interrupts */ ! 35: char u_segflg; /* 0:user D; 1:system; 2:user I */ ! 36: char u_error; /* return error code */ ! 37: short u_uid; /* effective user id */ ! 38: short u_gid; /* effective group id */ ! 39: short u_ruid; /* real user id */ ! 40: short u_rgid; /* real group id */ ! 41: short u_groups[NGROUPS]; /* access group id array */ ! 42: struct proc *u_procp; /* pointer to proc structure */ ! 43: int *u_ap; /* pointer to arglist */ ! 44: union { /* syscall return values */ ! 45: struct { ! 46: int R_val1; ! 47: int R_val2; ! 48: } u_rv; ! 49: #define r_val1 u_rv.R_val1 ! 50: #define r_val2 u_rv.R_val2 ! 51: off_t r_off; ! 52: time_t r_time; ! 53: } u_r; ! 54: caddr_t u_base; /* base address for IO */ ! 55: unsigned int u_count; /* bytes remaining for IO */ ! 56: off_t u_offset; /* offset in file for IO */ ! 57: struct inode *u_cdir; /* pointer to inode of current directory */ ! 58: struct inode *u_rdir; /* root directory of current process */ ! 59: char u_dbuf[DIRSIZ]; /* current pathname component */ ! 60: caddr_t u_dirp; /* pathname pointer */ ! 61: struct direct u_dent; /* current directory entry */ ! 62: /* struct inode *u_pdir; /* inode of parent directory of dirp */ ! 63: struct file *u_ofile[NOFILE]; /* pointers to file structures of open files */ ! 64: char u_pofile[NOFILE]; /* per-process flags of open files */ ! 65: #define EXCLOSE 01 /* auto-close on exec */ ! 66: label_t u_ssav; /* label variable for swapping */ ! 67: int (*u_signal[NSIG])(); /* disposition of signals */ ! 68: int u_code; /* ``code'' to trap */ ! 69: /* on SIGILL code passes compatibility mode fault address */ ! 70: /* on SIGFPE code passes more specific kind of floating point fault */ ! 71: int *u_ar0; /* address of users saved R0 */ ! 72: struct uprof { /* profile arguments */ ! 73: short *pr_base; /* buffer base */ ! 74: unsigned pr_size; /* buffer size */ ! 75: unsigned pr_off; /* pc offset */ ! 76: unsigned pr_scale; /* pc scaling */ ! 77: } u_prof; ! 78: char u_eosys; /* special action on end of syscall */ ! 79: char u_sep; /* flag for I and D separation */ ! 80: dev_t u_ttydev; /* dev,ino of controlling tty */ ! 81: ino_t u_ttyino; ! 82: union { ! 83: struct { /* header of executable file */ ! 84: #ifdef sun ! 85: unsigned short Ux_mach; /* machine type */ ! 86: unsigned short Ux_mag; /* magic number */ ! 87: #else ! 88: unsigned Ux_mag; /* magic number */ ! 89: #endif ! 90: unsigned Ux_tsize; /* text size */ ! 91: unsigned Ux_dsize; /* data size */ ! 92: unsigned Ux_bsize; /* bss size */ ! 93: unsigned Ux_ssize; /* symbol table size */ ! 94: unsigned Ux_entloc; /* entry location */ ! 95: unsigned Ux_unused; ! 96: unsigned Ux_relflg; ! 97: } Ux_A; ! 98: char ux_shell[SHSIZE]; /* #! and name of interpreter */ ! 99: } u_exdata; ! 100: #ifdef sun ! 101: #define ux_mach Ux_A.Ux_mach ! 102: #define M_OLDSUN2 0 /* old sun-2 executable files */ ! 103: #define M_68010 1 /* runs on either 68010 or 68020 */ ! 104: #define M_68020 2 /* runs only on 68020 */ ! 105: ! 106: #define OMAGIC 0407 /* old impure format */ ! 107: #define NMAGIC 0410 /* read-only text */ ! 108: #define ZMAGIC 0413 /* demand load format */ ! 109: #endif ! 110: #define ux_mag Ux_A.Ux_mag ! 111: #define ux_tsize Ux_A.Ux_tsize ! 112: #define ux_dsize Ux_A.Ux_dsize ! 113: #define ux_bsize Ux_A.Ux_bsize ! 114: #define ux_ssize Ux_A.Ux_ssize ! 115: #define ux_entloc Ux_A.Ux_entloc ! 116: #define ux_unused Ux_A.Ux_unused ! 117: #define ux_relflg Ux_A.Ux_relflg ! 118: ! 119: char u_comm[DIRSIZ]; ! 120: time_t u_start; ! 121: char u_acflag; ! 122: short u_fpflag; /* unused now, will be later */ ! 123: short u_cmask; /* mask for file creation */ ! 124: size_t u_tsize; /* text size (clicks) */ ! 125: size_t u_dsize; /* data size (clicks) */ ! 126: size_t u_ssize; /* stack size (clicks) */ ! 127: struct vtimes u_vm; /* stats for this proc */ ! 128: struct vtimes u_cvm; /* sum of stats for reaped children */ ! 129: struct dmap u_dmap; /* disk map for data segment */ ! 130: struct dmap u_smap; /* disk map for stack segment */ ! 131: struct dmap u_cdmap, u_csmap; /* shadows of u_dmap, u_smap, for ! 132: use of parent during fork */ ! 133: time_t u_outime; /* user time at last sample */ ! 134: size_t u_odsize, u_ossize; /* for (clumsy) expansion swaps */ ! 135: int u_limit[8]; /* see <sys/vlimit.h> */ ! 136: int u_nbadio; /* # IO operations on hungup streams */ ! 137: char u_logname[8]; /* login name */ ! 138: #ifdef sun ! 139: int u_lofault; /* catch faults in locore.s */ ! 140: struct hole { /* a data space hole (no swap space) */ ! 141: int uh_first; /* first data page in hole */ ! 142: int uh_last; /* last data page in hole */ ! 143: } u_hole; ! 144: /* sun2 only */ ! 145: int u_memropc[12]; /* state of ropc */ ! 146: struct skyctx { ! 147: u_int usc_regs[8]; /* the Sky registers */ ! 148: short usc_cmd; /* current command */ ! 149: short usc_used; /* user is using Sky */ ! 150: } u_skyctx; ! 151: /* end sun2 only */ ! 152: /* 68020/68881 only */ ! 153: struct fp_status u_fp_status; /* user visible fpp state */ ! 154: struct fp_istate u_fp_istate; /* internal fpp state */ ! 155: /* end 68020/68881 only */ ! 156: /* 68020/fpa only */ ! 157: struct fpa_istate u_fpa_istate; /* supervisor privilege regs */ ! 158: struct fpa_status u_fpa_status; /* user privilege regs */ ! 159: /* end 68020/fpa only */ ! 160: #endif sun ! 161: }; ! 162: ! 163: /* u_eosys values */ ! 164: #define JUSTRETURN 0 ! 165: #define RESTARTSYS 1 ! 166: #define SIMULATERTI 2 ! 167: #define REALLYRETURN 3 ! 168: ! 169: /* u_error codes */ ! 170: #ifdef KERNEL ! 171: #include "../h/errno.h" ! 172: #else ! 173: #include <errno.h> ! 174: #endif ! 175: ! 176: #ifdef KERNEL ! 177: #ifdef sun ! 178: #define u (*(struct user *)UADDR) ! 179: #else sun ! 180: extern struct user u; ! 181: #endif sun ! 182: extern struct user swaputl; ! 183: extern struct user forkutl; ! 184: extern struct user xswaputl; ! 185: extern struct user xswap2utl; ! 186: extern struct user pushutl; ! 187: extern struct user vfutl; ! 188: extern struct user prusrutl; ! 189: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.