X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/22ba694c5857e62b5a553b1505dcf2e509177f28..3e170ce000f1506b7b5d2c5c7faec85ceabb573d:/bsd/sys/user.h diff --git a/bsd/sys/user.h b/bsd/sys/user.h index 27ff9bdab..4e5235754 100644 --- a/bsd/sys/user.h +++ b/bsd/sys/user.h @@ -65,6 +65,7 @@ #define _SYS_USER_H_ #include +struct waitq_set; #ifndef KERNEL /* stuff that *used* to be included by user.h, or is now needed */ #include @@ -132,8 +133,8 @@ struct label; /* MAC label dummy struct */ struct uthread { /* syscall parameters, results and catches */ u_int64_t uu_arg[8]; /* arguments to current system call */ - int *uu_ap; /* pointer to arglist */ int uu_rval[2]; + unsigned int syscall_code; /* current syscall code */ /* thread exception handling */ mach_exception_code_t uu_code; /* ``code'' to trap */ @@ -144,10 +145,10 @@ struct uthread { union { struct _select_data { u_int64_t abstime; - char * wql; - int poll; - int error; + uint64_t *wqp; int count; + struct select_nocancel_args *args; /* original syscall arguments */ + int32_t *retval; /* place to store return val */ } ss_select_data; struct _kqueue_scan { kevent_callback_t call; /* per-event callback */ @@ -158,12 +159,12 @@ struct uthread { struct _kevent { struct _kqueue_scan scan;/* space for the generic data */ struct fileproc *fp; /* fileproc we hold iocount on */ - int fd; /* filedescriptor for kq */ - int32_t *retval; /* place to store return val */ + int fd; /* filedescriptor for kq */ + unsigned int eventflags; /* flags to determine kevent size/direction */ + int eventcount; /* user-level event count */ + int eventout; /* number of events output */ + int32_t *retval; /* place to store return val */ user_addr_t eventlist; /* user-level event list address */ - size_t eventsize; /* kevent or kevent64_s */ - int eventcount; /* user-level event count */ - int eventout; /* number of events output */ } ss_kevent; /* saved state for kevent() */ struct _kauth { @@ -171,12 +172,22 @@ struct uthread { } uu_kauth; struct ksyn_waitq_element uu_kwe; /* user for pthread synch */ + + struct _waitid_data { + struct waitid_nocancel_args *args; /* original syscall arguments */ + int32_t *retval; /* place to store return val */ + } uu_waitid_data; + + struct _wait4_data { + struct wait4_nocancel_args *args; /* original syscall arguments */ + int32_t *retval; /* place to store return val */ + } uu_wait4_data; } uu_kevent; + /* Persistent memory allocations across system calls */ struct _select { u_int32_t *ibits, *obits; /* bits to select on */ uint nbytes; /* number of bytes in ibits and obits */ - struct _select_data *data; } uu_select; /* saved state for select() */ /* internal support for continuation framework */ @@ -188,8 +199,8 @@ struct uthread { struct proc * uu_proc; thread_t uu_thread; void * uu_userstate; - wait_queue_set_t uu_wqset; /* cached across select calls */ - size_t uu_allocsize; /* ...size of select cache */ + struct waitq_set *uu_wqset; /* waitq state cached across select calls */ + size_t uu_wqstate_sz; /* ...size of uu_wqset buffer */ int uu_flag; sigset_t uu_siglist; /* signals pending for the thread */ sigset_t uu_sigwait; /* sigwait on this thread*/ @@ -216,7 +227,6 @@ struct uthread { struct kern_sigaltstack uu_sigstk; vnode_t uu_vreclaims; vnode_t uu_cdir; /* per thread CWD */ - int uu_notrigger; /* XXX - flag for autofs */ int uu_dupfd; /* fd in fdesc_open/dupfdopen */ int uu_defer_reclaims; @@ -226,6 +236,16 @@ struct uthread { void * uu_vps[32]; void * uu_pcs[32][10]; #endif + +#if PROC_REF_DEBUG +#define NUM_PROC_REFS_TO_TRACK 32 +#define PROC_REF_STACK_DEPTH 10 + int uu_proc_refcount; + int uu_pindex; + void * uu_proc_ps[NUM_PROC_REFS_TO_TRACK]; + uintptr_t uu_proc_pcs[NUM_PROC_REFS_TO_TRACK][PROC_REF_STACK_DEPTH]; +#endif + #if CONFIG_DTRACE uint32_t t_dtrace_errno; /* Most recent errno */ siginfo_t t_dtrace_siginfo; @@ -268,7 +288,6 @@ struct uthread { #endif /* CONFIG_DTRACE */ void * uu_threadlist; char * pth_name; - struct label * uu_label; /* MAC label */ /* Document Tracking struct used to track a "tombstone" for a document */ struct doc_tombstone *t_tombstone;