home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.2 (Developer) / NS_dev_3.2.iso / NextDeveloper / Headers / bsd / sys / user.h < prev    next >
Text File  |  1993-10-19  |  13KB  |  436 lines

  1. /* 
  2.  * Mach Operating System
  3.  * Copyright (c) 1987 Carnegie-Mellon University
  4.  * All rights reserved.  The CMU software License Agreement specifies
  5.  * the terms and conditions for use and redistribution.
  6.  */
  7. /* 
  8.  * HISTORY
  9.  * 27-Sep-89  Morris Meyer (mmeyer) at NeXT
  10.  *    NFS 4.0 Changes: ucred definition moved to ucred.h.
  11.  *             Addition of u_auid.
  12.  *
  13.  * 28-Apr-88  David Golub (dbg) at Carnegie-Mellon University
  14.  *    Move u_rpause and u_rfs from thread to task U-area - they are
  15.  *    both global process state.
  16.  *
  17.  * 26-Feb-88  David Kirschen (kirschen) at Encore Computer Corporation
  18.  *      Add include of param.h for NGROUPS, etc.
  19.  *
  20.  * 19-Nov-87  Avadis Tevanian (avie) at Carnegie-Mellon University
  21.  *    Eliminated conditionals, purged history.
  22.  */
  23.  
  24. /*
  25.  * Copyright (c) 1982, 1986 Regents of the University of California.
  26.  * All rights reserved.  The Berkeley software License Agreement
  27.  * specifies the terms and conditions for redistribution.
  28.  *
  29.  *    @(#)user.h    7.1 (Berkeley) 6/4/86
  30.  */
  31.  
  32. /* @(#)user.h    1.8 87/08/24 3.2/4.3NFSSRC */
  33.  
  34. #ifndef    _SYS_USER_H_
  35. #define    _SYS_USER_H_
  36.  
  37. #import <sys/types.h>
  38.  
  39. #if    KERNEL
  40. #import <kern/lock.h>
  41. #else    KERNEL
  42. #import <kernserv/lock.h>
  43. #endif    KERNEL
  44. #import <sys/param.h>
  45. #if    NeXT
  46. #else    NeXT
  47. #import <machine/pcb.h>
  48. #endif    NeXT
  49. #import <sys/time.h>
  50. #import <sys/resource.h>
  51. #import <sys/ucred.h>
  52. #if    NeXT && m68k
  53. #import <bsd/m68k/fptrace.h>
  54. #endif    NeXT && m68k
  55.  
  56. /*
  57.  * Per process structure containing data that
  58.  * isn't needed in core when the process is swapped out.
  59.  */
  60.  
  61. #define    MAXCOMLEN    16        /* <= MAXNAMLEN, >= sizeof(ac_comm) */
  62.  
  63. #if    (defined(KERNEL) || defined(SHOW_UTT))
  64. /*
  65.  *    Per-thread U area.
  66.  *
  67.  *    It is likely that this structure contains no fields that must be
  68.  *    saved between system calls.
  69.  */
  70. struct uthread {
  71.     int    *uu_ar0;        /* address of users saved R0 */
  72.  
  73. /* syscall parameters, results and catches */
  74.     int    uu_arg[8];        /* arguments to current system call */
  75.     int    *uu_ap;            /* pointer to arglist */
  76.     label_t    uu_qsave;        /* for non-local gotos on interrupts */
  77.     union {                /* syscall return values */
  78.         struct    {
  79.             int    R_val1;
  80.             int    R_val2;
  81.         } u_rv;
  82. #define    r_val1    u_rv.R_val1
  83. #define    r_val2    u_rv.R_val2
  84.         off_t    r_off;
  85.         time_t    r_time;
  86.     } uu_r;
  87.     char    uu_error;        /* return error code */
  88.     char    uu_eosys;        /* special action on end of syscall */
  89.  
  90. /* CS_RPAUSE */
  91.     struct fs *uu_rpsfs;        /* resource pause file system */
  92.     char    uu_rpswhich;        /* resource pause operation selection */
  93. /* CS_RPAUSE */
  94.  
  95. /* thread exception handling */
  96.     int    uu_code;            /* ``code'' to trap */
  97.     char uu_cursig;                /* p_cursig for exc. */
  98.     int  uu_sig;                /* p_sig for exc. */
  99. };
  100.  
  101. /*
  102.  *    Per-task U area - global process state.
  103.  */
  104. struct utask {
  105. #ifdef    NeXT
  106. #else    NeXT
  107.     struct    pcb uu_pcb;
  108. #endif    NeXT
  109.     struct    proc *uu_procp;        /* pointer to proc structure */
  110.     int    *uu_ar0;        /* address of users saved R0 */
  111.     char    uu_comm[MAXCOMLEN + 1];
  112.  
  113. /* 1.1 - processes and protection */
  114. #if    ROMP_DUALCALL
  115.     char    uu_calltype;        /* 0 - old calling sequence */
  116. #endif    ROMP_DUALCALL
  117. /* SUN_VFS */
  118.     struct ucred *uu_cred;        /* user credentials (uid, gid, etc) */
  119. #define    uu_uid    uu_cred->cr_uid
  120. #define    uu_gid    uu_cred->cr_gid
  121. #define    uu_groups uu_cred->cr_groups
  122. #define    uu_ruid    uu_cred->cr_ruid
  123. #define    uu_rgid    uu_cred->cr_rgid
  124. /* SUN_VFS */
  125.  
  126.     lock_data_t    uu_cred_lock;    /* lock for credentials */
  127. #define u_cred_lock()        lock_write(&u.utask->uu_cred_lock)
  128. #define u_cred_unlock()        lock_write_done(&u.utask->uu_cred_lock)
  129. #define u_cred_lock_init(lock)    lock_init(lock, TRUE);
  130.  
  131. /* 1.2 - memory management */
  132.     time_t    uu_outime;        /* user time at last sample */
  133.  
  134. /* 1.3 - signal management */
  135.     void    (*uu_signal[NSIG+1])();    /* disposition of signals */
  136.     int    uu_sigmask[NSIG+1];    /* signals to be blocked */
  137. #ifdef    i386
  138.     int    (*uu_sigreturn)();
  139. #endif    i386
  140. #ifdef    multimax
  141.     int    (*uu_sigcatch)();    /* used as a way not to do tramp. */
  142. #endif    multimax
  143. #ifdef    balance
  144.     int    (*uu_sigtramp)();    /* signal trampoline code */
  145. #endif    balance
  146.     int    uu_sigonstack;        /* signals to take on sigstack */
  147.     int    uu_sigintr;        /* signals that interrupt syscalls */
  148.     int    uu_oldmask;        /* saved mask from before sigpause */
  149.     struct    sigstack uu_sigstack;    /* sp & on stack state variable */
  150. #define    uu_onstack    uu_sigstack.ss_onstack
  151. #define    uu_sigsp    uu_sigstack.ss_sp
  152.  
  153. /* 1.4 - descriptor management */
  154. #if    NeXT
  155.     struct    file **uu_ofile;    /* file structures for open files */
  156.     char    *uu_pofile;        /* per-process flags of open files */
  157.     int    uu_lastfile;        /* high-water mark of uu_ofile */
  158.     int    uu_ofile_cnt;        /* number of file structs allocated */
  159. #else    NeXT
  160.     struct    file *uu_ofile[NOFILE];    /* file structures for open files */
  161.     char    uu_pofile[NOFILE];    /* per-process flags of open files */
  162.     int    uu_lastfile;        /* high-water mark of uu_ofile */
  163. #endif    NeXT
  164. #define    UF_EXCLOSE     0x1        /* auto-close on exec */
  165. #define    UF_MAPPED     0x2        /* mapped from device */
  166. #define UF_FDLOCK    0x4        /* file desc locked (SysV style) */
  167.     struct    vnode *uu_cdir;        /* current directory */
  168.     struct    vnode *uu_rdir;        /* root directory of current process */
  169.     struct    tty *uu_ttyp;        /* controlling tty pointer */
  170.     dev_t    uu_ttyd;        /* controlling tty dev */
  171.     short    uu_cmask;        /* mask for file creation */
  172.  
  173. /* 1.5 - timing and statistics */
  174.     struct    rusage uu_ru;        /* stats for this proc */
  175.     struct    rusage uu_cru;        /* sum of stats for reaped children */
  176.     struct    itimerval uu_timer[3];
  177.     int    uu_XXX[3];
  178.     struct    timeval uu_start;
  179.     short    uu_acflag;
  180.  
  181.     struct uuprof {            /* profile arguments */
  182.         simple_lock_t pr_lock;    /* lock for thread updating */
  183. #if    NeXT
  184.         struct uuprof *pr_next;    /* multiple profiling buffers allowed */
  185. #endif    NeXT
  186.         short    *pr_base;    /* buffer base */
  187.         unsigned pr_size;    /* buffer size */
  188.         unsigned pr_off;    /* pc offset */
  189.         unsigned pr_scale;    /* pc scaling */
  190.     } uu_prof;
  191. /* CS_RPAUSE */
  192.     u_char    uu_rpause;        /* resource pause flags: */
  193. #define    URPS_AGAIN    01        /* - no child processes available */
  194. #define    URPS_NOMEM    02        /* - no memory available */
  195. #define    URPS_NFILE    04        /* - file table overflow */
  196. #define    URPS_NOSPC    010        /* - no space on device */
  197. /* CS_RPAUSE */
  198.  
  199. /* 1.6 - resource controls */
  200.     struct    rlimit uu_rlimit[RLIM_NLIMITS];
  201.  
  202.     int    uu_stack[1];
  203. #if    defined(NeXT) && defined(DEBUG) && defined(m68k)
  204.     struct fptrace_data uu_fptrace;    /* fpemul trace data */
  205. #endif    defined(NeXT) && defined(DEBUG) && defined(m68k)
  206. };
  207.  
  208. #endif    defined(KERNEL)
  209. struct    user {
  210. #if    NeXT
  211. #else    NeXT
  212.     struct    pcb u_pcb;
  213. #endif    NeXT
  214.     struct    proc *u_procp;        /* pointer to proc structure */
  215.     int    *u_ar0;            /* address of users saved R0 */
  216.     char    u_comm[MAXCOMLEN + 1];
  217.  
  218. /* syscall parameters, results and catches */
  219.     int    u_arg[8];        /* arguments to current system call */
  220.     int    *u_ap;            /* pointer to arglist */
  221.     label_t    u_qsave;        /* for non-local gotos on interrupts */
  222.     union {                /* syscall return values */
  223.         struct    {
  224.             int    R_val1;
  225.             int    R_val2;
  226.         } u_rv;
  227. #define    r_val1    u_rv.R_val1
  228. #define    r_val2    u_rv.R_val2
  229.         off_t    r_off;
  230.         time_t    r_time;
  231.     } u_r;
  232.     char    u_error;        /* return error code */
  233.     char    u_eosys;        /* special action on end of syscall */
  234.  
  235. /* 1.1 - processes and protection */
  236. #if    ROMP_DUALCALL
  237.     char    u_calltype;        /* 0 == old calling sequence */
  238. #endif    ROMP_DUALCALL
  239. /* SUN_VFS */
  240.     struct ucred *u_cred;        /* user credentials (uid, gid, etc) */
  241. #define    u_uid        u_cred->cr_uid
  242. #define    u_gid        u_cred->cr_gid
  243. #define    u_groups     u_cred->cr_groups
  244. #define    u_ruid        u_cred->cr_ruid
  245. #define    u_rgid        u_cred->cr_rgid
  246. #define    u_auid        u_cred->cr_auid
  247. /* SUN_VFS */
  248.  
  249. /* 1.2 - memory management */
  250.     size_t    u_tsize;        /* text size (clicks) */
  251.     size_t    u_dsize;        /* data size (clicks) */
  252.     size_t    u_ssize;        /* stack size (clicks) */
  253.     caddr_t    u_text_start;        /* text starting address */
  254.     caddr_t    u_data_start;        /* data starting address */
  255.     time_t    u_outime;        /* user time at last sample */
  256.  
  257. /* 1.3 - signal management */
  258.     void    (*u_signal[NSIG+1])();    /* disposition of signals */
  259.     int    u_sigmask[NSIG+1];    /* signals to be blocked */
  260. #ifdef    i386
  261.     int    (*uu_sigreturn)();
  262. #endif    i386
  263. #ifdef    multimax
  264.     int    (*u_sigcatch)();    /* used as a way not to do tramp. */
  265. #endif    multimax
  266. #ifdef    balance
  267.     int    (*u_sigtramp)();    /* signal trampoline code */
  268. #endif    balance
  269.     int    u_sigonstack;        /* signals to take on sigstack */
  270.     int    u_sigintr;        /* signals that interrupt syscalls */
  271.     int    u_oldmask;        /* saved mask from before sigpause */
  272.     int    u_code;            /* ``code'' to trap */
  273.     struct    sigstack u_sigstack;    /* sp & on stack state variable */
  274. #define    u_onstack    u_sigstack.ss_onstack
  275. #define    u_sigsp        u_sigstack.ss_sp
  276.  
  277. /* 1.4 - descriptor management */
  278.     struct    file *u_ofile[NOFILE];    /* file structures for open files */
  279.     char    u_pofile[NOFILE];    /* per-process flags of open files */
  280.     int    u_lastfile;        /* high-water mark of u_ofile */
  281. #define    UF_EXCLOSE     0x1        /* auto-close on exec */
  282. #define    UF_MAPPED     0x2        /* mapped from device */
  283. #define UF_FDLOCK    0x4        /* file desc locked (SysV style) */
  284.     struct    vnode *u_cdir;        /* current directory */
  285.     struct    vnode *u_rdir;        /* root directory of current process */
  286.     struct    tty *u_ttyp;        /* controlling tty pointer */
  287.     dev_t    u_ttyd;            /* controlling tty dev */
  288.     short    u_cmask;        /* mask for file creation */
  289.  
  290. /* 1.5 - timing and statistics */
  291.     struct    rusage u_ru;        /* stats for this proc */
  292.     struct    rusage u_cru;        /* sum of stats for reaped children */
  293.     struct    itimerval u_timer[3];
  294.     int    u_XXX[3];
  295.     struct    timeval u_start;
  296.     short    u_acflag;
  297.  
  298.     struct uprof {            /* profile arguments */
  299.         simple_lock_t pr_lock;    /* lock for thread updating */
  300.         short    *pr_base;    /* buffer base */
  301.         unsigned pr_size;    /* buffer size */
  302.         unsigned pr_off;    /* pc offset */
  303.         unsigned pr_scale;    /* pc scaling */
  304.     } u_prof;
  305. /* CS_RPAUSE */
  306.     struct fs *u_rpsfs;        /* resource pause file system */
  307.     char    u_rpswhich;        /* resource pause operation selection */
  308. #define URPW_FNOSPC    0x01        /* - low on fragments */
  309. #define URPW_INOSPC    0x02        /* - low on inodes */
  310. #define URPW_QNOSPC    0x04        /* - out of quota */
  311. #define URPW_POLL    0x40        /* - poll until available */
  312. #define URPW_NOTIFY    0x80        /* - pause in progress */
  313.     u_char    u_rpause;        /* resource pause flags: */
  314. #define    URPS_AGAIN    01        /* - no child processes available */
  315. #define    URPS_NOMEM    02        /* - no memory available */
  316. #define    URPS_NFILE    04        /* - file table overflow */
  317. #define    URPS_NOSPC    010        /* - no space on device */
  318. /* CS_RPAUSE */
  319.  
  320. /* 1.6 - resource controls */
  321.     struct    rlimit u_rlimit[RLIM_NLIMITS];
  322.  
  323.     int    u_stack[1];
  324. };
  325.  
  326. /* u_eosys values */
  327. #define    JUSTRETURN    1
  328. #define    RESTARTSYS    2
  329. #define NORMALRETURN    3
  330.  
  331. /* u_error codes */
  332. #import <sys/errno.h>
  333.  
  334. #ifdef KERNEL
  335.  
  336.  
  337. #import <machine/user.h>
  338.  
  339. #ifndef    u
  340. #define u    (current_thread()->u_address)
  341. #endif    u
  342.  
  343. #if    NeXT
  344. #else    NeXT
  345. #define u_pcb        uthread->uu_pcb
  346. #endif    NeXT
  347. #define u_procp        utask->uu_procp
  348. #define u_ar0        uthread->uu_ar0
  349. #define u_comm        utask->uu_comm
  350.  
  351. #define u_arg        uthread->uu_arg
  352. #define u_ap        uthread->uu_ap
  353. #define u_qsave        uthread->uu_qsave
  354. #define u_r        uthread->uu_r
  355. #define u_error        uthread->uu_error
  356. #define u_eosys        uthread->uu_eosys
  357.  
  358. /* SUN_VFS */
  359. #undef    u_cred
  360. #undef    u_uid
  361. #undef    u_gid
  362. #undef    u_groups
  363. #undef    u_ruid
  364. #undef    u_rgid
  365. #define    u_cred        utask->uu_cred
  366. #define    u_uid        utask->uu_cred->cr_uid
  367. #define    u_gid        utask->uu_cred->cr_gid
  368. #define    u_groups     utask->uu_cred->cr_groups
  369. #define    u_ruid        utask->uu_cred->cr_ruid
  370. #define    u_rgid        utask->uu_cred->cr_rgid
  371. /* SUN_VFS */
  372.  
  373. #define u_tsize        utask->uu_tsize
  374. #define u_dsize        utask->uu_dsize
  375. #define u_ssize        utask->uu_ssize
  376. #define    u_text_start    utask->uu_text_start
  377. #define    u_data_start    utask->uu_data_start
  378. #define u_outime    utask->uu_outime
  379.  
  380. #define u_signal    utask->uu_signal
  381. #ifdef    i386
  382. #define u_sigreturn     utask->uu_sigreturn
  383. #endif    i386
  384. #ifdef    multimax
  385. #define    u_sigcatch    utask->uu_sigcatch
  386. #endif    multimax
  387. #ifdef    balance
  388. #define    u_sigtramp    utask->uu_sigtramp
  389. #endif    balance
  390. #define u_sigmask    utask->uu_sigmask
  391. #define u_sigonstack    utask->uu_sigonstack
  392. #define u_sigintr    utask->uu_sigintr
  393. #define u_oldmask    utask->uu_oldmask
  394. #define u_code        uthread->uu_code
  395. #define u_sigstack    utask->uu_sigstack
  396.  
  397. #define    u_onstack    u_sigstack.ss_onstack
  398. #define    u_sigsp        u_sigstack.ss_sp
  399.  
  400. #define u_ofile        utask->uu_ofile
  401. #define u_pofile    utask->uu_pofile
  402. #define u_lastfile    utask->uu_lastfile
  403. #if    NeXT
  404. #define u_ofile_cnt    utask->uu_ofile_cnt
  405. #define u_fptrace    utask->uu_fptrace
  406. #endif    NeXT
  407. #define u_cdir        utask->uu_cdir
  408. #define u_rdir        utask->uu_rdir
  409. #define u_ttyp        utask->uu_ttyp
  410. #define u_ttyd        utask->uu_ttyd
  411. #define u_cmask        utask->uu_cmask
  412.  
  413. #define u_ru        utask->uu_ru
  414. #define u_cru        utask->uu_cru
  415. #define u_timer        utask->uu_timer
  416. #define u_XXX        utask->uu_XXX
  417. #define u_start        utask->uu_start
  418. #define u_acflag    utask->uu_acflag
  419.  
  420. #define u_prof        utask->uu_prof
  421. /* CS_RPAUSE */
  422. #define u_rpsfs        uthread->uu_rpsfs
  423. #define u_rpswhich    uthread->uu_rpswhich
  424. #define u_rpause    utask->uu_rpause
  425. /* CS_RPAUSE */
  426.  
  427. #define u_rlimit    utask->uu_rlimit
  428.  
  429. #define u_sig        uthread->uu_sig
  430. #define u_cursig    uthread->uu_cursig
  431. #endif
  432. #endif    _SYS_USER_H_
  433.  
  434.  
  435.  
  436.