114 lines
4.6 KiB
C
114 lines
4.6 KiB
C
/*
|
|
* Copyright (c) 1986 Regents of the University of California.
|
|
* All rights reserved. The Berkeley software License Agreement
|
|
* specifies the terms and conditions for redistribution.
|
|
*/
|
|
#ifdef KERNEL
|
|
#include "dir.h"
|
|
#include "exec.h"
|
|
#include "time.h"
|
|
#include "resource.h"
|
|
#else
|
|
#include <sys/dir.h>
|
|
#include <sys/exec.h>
|
|
#include <sys/time.h>
|
|
#include <sys/resource.h>
|
|
#endif
|
|
|
|
/*
|
|
* data that doesn't need to be referenced while the process is swapped.
|
|
* For PIC32, the user block is USIZE bytes long; resides at virtual kernel loc
|
|
* 0x80007400; contains the system stack (and possibly network stack) per
|
|
* user; is cross referenced with the proc structure for the same process.
|
|
*/
|
|
#define MAXCOMLEN MAXNAMLEN /* <= MAXNAMLEN, >= sizeof(ac_comm) */
|
|
|
|
struct user {
|
|
struct proc *u_procp; /* pointer to proc structure */
|
|
int *u_frame; /* address of users saved frame */
|
|
char u_comm[MAXCOMLEN + 1]; /* command file name */
|
|
label_t u_qsave; /* for non-local gotos on interrupts */
|
|
label_t u_rsave; /* save info when exchanging stacks */
|
|
label_t u_ssave; /* label variable for swapping */
|
|
|
|
/* syscall parameters and results */
|
|
int u_arg[6]; /* arguments to current system call */
|
|
int u_rval; /* return value */
|
|
int u_error; /* return error code */
|
|
|
|
/* 1.1 - processes and protection */
|
|
uid_t u_uid; /* effective user id */
|
|
uid_t u_svuid; /* saved user id */
|
|
uid_t u_ruid; /* real user id */
|
|
gid_t u_svgid; /* saved group id */
|
|
gid_t u_rgid; /* real group id */
|
|
gid_t u_groups[NGROUPS]; /* groups, 0 terminated */
|
|
|
|
/* 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) */
|
|
|
|
/* 1.3 - signal management */
|
|
sig_t u_signal[NSIG]; /* disposition of signals */
|
|
long u_sigmask[NSIG]; /* signals to be blocked */
|
|
long u_sigonstack; /* signals to take on sigstack */
|
|
long u_sigintr; /* signals that interrupt syscalls */
|
|
long u_oldmask; /* saved mask from before sigpause */
|
|
int u_code; /* ``code'' to trap */
|
|
int u_psflags; /* Process Signal flags */
|
|
struct sigaltstack u_sigstk; /* signal stack info */
|
|
u_int u_sigtramp; /* pointer to trampoline code in user space */
|
|
|
|
/* 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 */
|
|
struct inode *u_cdir; /* current directory */
|
|
struct inode *u_rdir; /* root directory of current process */
|
|
struct tty *u_ttyp; /* controlling tty pointer */
|
|
dev_t u_ttyd; /* controlling tty dev */
|
|
int u_cmask; /* mask for file creation */
|
|
|
|
/* 1.5 - timing and statistics */
|
|
struct k_rusage u_ru; /* stats for this proc */
|
|
struct k_rusage u_cru; /* sum of stats for reaped children */
|
|
struct k_itimerval u_timer[2]; /* profile/virtual timers */
|
|
long u_start;
|
|
int u_dupfd; /* XXX - see kern_descrip.c/fdopen */
|
|
|
|
struct uprof { /* profile arguments */
|
|
unsigned *pr_base; /* buffer base */
|
|
unsigned pr_size; /* buffer size */
|
|
unsigned pr_off; /* pc offset */
|
|
unsigned pr_scale; /* pc scaling */
|
|
} u_prof;
|
|
|
|
/* 1.6 - resource controls */
|
|
struct rlimit u_rlimit[RLIM_NLIMITS];
|
|
|
|
/* namei & co. */
|
|
struct nameicache { /* last successful directory search */
|
|
off_t nc_prevoffset; /* offset at which last entry found */
|
|
ino_t nc_inumber; /* inum of cached directory */
|
|
dev_t nc_dev; /* dev of cached directory */
|
|
} u_ncache;
|
|
int u_stack[1]; /* kernel stack per user
|
|
* extends from u + USIZE
|
|
* backward not to reach here */
|
|
};
|
|
|
|
#include <sys/errno.h>
|
|
|
|
#ifdef KERNEL
|
|
extern struct user u, u0;
|
|
|
|
/*
|
|
* Increment user profiling counters.
|
|
*/
|
|
void addupc (caddr_t pc, struct uprof *pbuf, int ticks);
|
|
|
|
#endif
|