diff --git a/rtl/ntapi.pas b/rtl/ntapi.pas index abd0d520..51562e0a 100644 --- a/rtl/ntapi.pas +++ b/rtl/ntapi.pas @@ -51,6 +51,7 @@ const NT_INFINITE=$8000000000000000; + //ThreadInformationClass ThreadBasicInformation = 0; ThreadTimes = 1; ThreadPriority = 2; @@ -70,13 +71,24 @@ const ThreadIsIoPending = 16; ThreadHideFromDebugger = 17; + //ProcessInformationClass ProcessBasicInformation=0; ProcessQuotaLimits =1; ProcessIoCounters =2; ProcessVmCounters =3; ProcessTimes =4; + ProcessPriorityClass =18; ProcessAffinityMask =21; + //ntapi PriorityClass + PROCESS_PRIORITY_CLASS_UNKNOWN =0; + PROCESS_PRIORITY_CLASS_IDLE =1; + PROCESS_PRIORITY_CLASS_NORMAL =2; + PROCESS_PRIORITY_CLASS_HIGH =3; + PROCESS_PRIORITY_CLASS_REALTIME =4; + PROCESS_PRIORITY_CLASS_BELOW_NORMAL=5; + PROCESS_PRIORITY_CLASS_ABOVE_NORMAL=6; + //FileInformationClass FileBasicInformation = 4; FileStandardInformation = 5; @@ -418,6 +430,12 @@ type InheritedFromUPI:QWORD; end; + PPROCESS_PRIORITY_CLASS=^PROCESS_PRIORITY_CLASS; + PROCESS_PRIORITY_CLASS=packed record + Foreground :Boolean; + PriorityClass:Byte; + end; + PKERNEL_USER_TIMES=^KERNEL_USER_TIMES; KERNEL_USER_TIMES=packed record CreateTime:LARGE_INTEGER; diff --git a/sys/kern/kern_cpuset.pas b/sys/kern/kern_cpuset.pas index 8aba07ee..90d510d7 100644 --- a/sys/kern/kern_cpuset.pas +++ b/sys/kern/kern_cpuset.pas @@ -25,7 +25,8 @@ uses systm, kern_thr, kern_thread, - vm_machdep; + md_thread, + md_proc; function sys_cpuset_getaffinity(level,which:Integer;id,cpusetsize:QWORD;mask:p_cpuset_t):Integer; var @@ -39,7 +40,7 @@ begin Case which of CPU_WHICH_TID: begin - if (int64(id)=-1) then + if (Integer(id)=-1) then begin td:=curkthread; thread_inc_ref(td); @@ -56,7 +57,7 @@ begin end; CPU_WHICH_PID: begin - if (int64(id)=-1) or (id=g_pid) then + if (Integer(id)=-1) or (id=g_pid) then begin Result:=cpuset_getproc(old); if (Result<>0) then Exit(ESRCH); @@ -87,7 +88,7 @@ begin Case which of CPU_WHICH_TID: begin - if (int64(id)=-1) then + if (Integer(id)=-1) then begin td:=curkthread; thread_inc_ref(td); @@ -106,7 +107,7 @@ begin CPU_WHICH_PID: begin begin - if (int64(id)=-1) or (id=g_pid) then + if (Integer(id)=-1) or (id=g_pid) then begin Result:=cpuset_setproc(new); if (Result<>0) then Result:=ESRCH; diff --git a/sys/kern/kern_exit.pas b/sys/kern/kern_exit.pas new file mode 100644 index 00000000..c51d29fa --- /dev/null +++ b/sys/kern/kern_exit.pas @@ -0,0 +1,188 @@ +unit kern_exit; + +{$mode ObjFPC}{$H+} +{$CALLING SysV_ABI_CDecl} + +interface + +uses + kern_resource; + +const + WCOREFLAG=&0200; + _WSTOPPED=&0177; { _WSTATUS if process is stopped } + + { + * Option bits for the third argument of wait4. WNOHANG causes the + * wait to not hang if there are no stopped or terminated processes, rather + * returning an error indication in this case (pid==0). WUNTRACED + * indicates that the caller should receive status about untraced children + * which stop due to signals. If children are stopped and a wait without + * this option is done, it is as though they were still running... nothing + * about them is returned. WNOWAIT only request information about zombie, + * leaving the proc around, available for later waits. + } + WNOHANG =1; { Don't hang in wait. } + WUNTRACED =2; { Tell about stopped, untraced children. } + WSTOPPED =WUNTRACED; { SUS compatibility } + WCONTINUED=4; { Report a job control continued process. } + WNOWAIT =8; { Poll only. Don't delete the proc entry. } + WEXITED =16; { Wait for exited processes. } + WTRAPPED =32; { Wait for a process to hit a trap or a breakpoint. } + + WLINUXCLONE=$80000000; { Wait for kthread spawned from linux_clone. } + + { + * Tokens for special values of the "pid" parameter to wait4. + * Extended struct __wrusage to collect rusage for both the target + * process and its children within one wait6() call. + } + WAIT_ANY =(-1); { any process } + WAIT_MYPGRP=0; { any process in my process group } + +type + _W_INT=Integer; + +function _WSTATUS(x:Integer):Integer; inline; +function WIFSTOPPED(x:Integer):Boolean; inline; +function WSTOPSIG(x:Integer):Integer; inline; +function WIFSIGNALED(x:Integer):Boolean; inline; +function WTERMSIG(x:Integer):Integer; inline; +function WIFEXITED(x:Integer):Boolean; inline; +function WEXITSTATUS(x:Integer):Integer; inline; +function WIFCONTINUED(x:Integer):Boolean; inline; { 0x13=SIGCONT } +function WCOREDUMP(x:Integer):Boolean; inline; +function W_STOPCODE(sig:Integer):Integer; inline; +function W_EXITCODE(ret,sig:Integer):Integer; inline; + +procedure exit1(rv:Integer); + +procedure sys_sys_exit(rval:Integer); +function sys_wait4(pid:Integer;status:PInteger;options:Integer;rusage:p_rusage):Integer; + +implementation + +uses + errno, + systm; + +function _WSTATUS(x:Integer):Integer; inline; +begin + Result:=(_W_INT(x) and &0177); +end; + +function WIFSTOPPED(x:Integer):Boolean; inline; +begin + Result:=(_WSTATUS(x)=_WSTOPPED); +end; + +function WSTOPSIG(x:Integer):Integer; inline; +begin + Result:=(_W_INT(x) shr 8) ; +end; + +function WIFSIGNALED(x:Integer):Boolean; inline; +begin + Result:=(_WSTATUS(x)<>_WSTOPPED) and (_WSTATUS(x)<>0); +end; + +function WTERMSIG(x:Integer):Integer; inline; +begin + Result:=(_WSTATUS(x)); +end; + +function WIFEXITED(x:Integer):Boolean; inline; +begin + Result:=(_WSTATUS(x)=0); +end; + +function WEXITSTATUS(x:Integer):Integer; inline; +begin + Result:=(_W_INT(x) shr 8); +end; + +function WIFCONTINUED(x:Integer):Boolean; inline; { 0x13=SIGCONT } +begin + Result:=(x=$13); +end; + +function WCOREDUMP(x:Integer):Boolean; inline; +begin + Result:=(_W_INT(x) and WCOREFLAG)<>0; +end; + +function W_STOPCODE(sig:Integer):Integer; inline; +begin + Result:=(sig shl 8) or _WSTOPPED; +end; + +function W_EXITCODE(ret,sig:Integer):Integer; inline; +begin + Result:=(ret shl 8) or sig; +end; + +procedure exit1(rv:Integer); +begin + Halt(rv); +end; + +procedure sys_sys_exit(rval:Integer); +begin + exit1(W_EXITCODE(rval, 0)); + // NOTREACHED +end; + +function kern_wait(pid:Integer;status:PInteger;options:Integer;rusage:p_rusage):Integer; +begin + options:=options or WEXITED or WTRAPPED; + + { If we don't know the option, just return. } + if ((options and (not (WUNTRACED or WNOHANG or WCONTINUED or WNOWAIT or + WEXITED or WTRAPPED or WLINUXCLONE)))<>0) then + begin + Exit(EINVAL); + end; + + if ((options and (WEXITED or WUNTRACED or WCONTINUED or WTRAPPED))=0) then + begin + { + * We will be unable to find any matching processes, + * because there are no known events to look for. + * Prefer to Exiterror instead of blocking + * indefinitely. + } + Exit(EINVAL); + end; + + Exit(ECHILD); +end; + +{ + * The dirty work is handled by kern_wait(). + } +function sys_wait4(pid:Integer;status:PInteger;options:Integer;rusage:p_rusage):Integer; +var + ru:t_rusage; + rup:p_rusage; + error,_status:Integer; +begin + if (rusage<>nil) then + rup:=@ru + else + rup:=nil; + + error:=kern_wait(pid, @_status, options, rup); + + if (status<>nil) and (error=0) then + error:=copyout(@_status, status, sizeof(_status)); + + if (rusage<>nil) and (error=0) then + error:=copyout(@ru, rusage, sizeof(t_rusage)); + + Exit(error); +end; + + + +end. + diff --git a/sys/kern/kern_prot.pas b/sys/kern/kern_prot.pas new file mode 100644 index 00000000..0822bc49 --- /dev/null +++ b/sys/kern/kern_prot.pas @@ -0,0 +1,488 @@ +unit kern_prot; + +{$mode ObjFPC}{$H+} +{$CALLING SysV_ABI_CDecl} + +interface + +const + MAXLOGNAME =17; { max login name length (incl. NUL) } + +function sys_getpid():Integer; +function sys_getppid():Integer; +function sys_getpgrp():Integer; +function sys_getpgid():Integer; +function sys_getsid():Integer; +function sys_getuid():Integer; +function sys_geteuid():Integer; +function sys_getgid():Integer; +function sys_getegid():Integer; +function sys_getgroups(gidsetsize:DWORD;gidset:PInteger):Integer; +function sys_setsid():Integer; +function sys_setpgid(pid,pgid:Integer):Integer; +function sys_setuid(uid:Integer):Integer; +function sys_seteuid(euid:Integer):Integer; +function sys_setgid(gid:Integer):Integer; +function sys_setegid(egid:Integer):Integer; +function sys_setgroups(gidsetsize:DWORD;gidset:PInteger):Integer; +function sys_setreuid(ruid,euid:Integer):Integer; +function sys_setregid(rgid,egid:Integer):Integer; +function sys_setresuid(ruid,euid,suid:Integer):Integer; +function sys_setresgid(rgid,egid,sgid:Integer):Integer; +function sys_getresuid(ruid,euid,suid:PInteger):Integer; +function sys_getresgid(rgid,egid,sgid:PInteger):Integer; +function sys_issetugid():Integer; +function sys_getlogin(namebuf:PChar;namelen:DWORD):Integer; +function sys_setlogin(namebuf:PChar):Integer; + +function p_cansignal(signum:Integer):Integer; + +implementation + +uses + errno, + systm, + signal, + kern_thr, + md_proc; + +{ + * System calls related to processes and protection + } + +function sys_getpid():Integer; +var + td:p_kthread; +begin + td:=curkthread; + if (td=nil) then Exit(-1); + td^.td_retval[0]:=g_pid; + Exit(0); +end; + +function sys_getppid():Integer; +var + td:p_kthread; +begin + td:=curkthread; + if (td=nil) then Exit(-1); + td^.td_retval[0]:=1; //psevodo parent id + Exit(0); +end; + +{ + * Get process group ID; note that POSIX getpgrp takes no parameter. + } +function sys_getpgrp():Integer; +var + td:p_kthread; +begin + td:=curkthread; + if (td=nil) then Exit(-1); + td^.td_retval[0]:=0; //psevodo group id + Exit(0); +end; + +{ Get an arbitary pid's process group id } +function sys_getpgid():Integer; +var + td:p_kthread; +begin + td:=curkthread; + if (td=nil) then Exit(-1); + td^.td_retval[0]:=0; //psevodo group id + Exit(0); +end; + +{ + * Get an arbitary pid's session id. + } +function sys_getsid():Integer; +var + td:p_kthread; +begin + td:=curkthread; + if (td=nil) then Exit(-1); + td^.td_retval[0]:=0; //psevodo session id + Exit(0); +end; + +function sys_getuid():Integer; +var + td:p_kthread; +begin + td:=curkthread; + if (td=nil) then Exit(-1); + td^.td_retval[0]:=0; //psevodo user id + Exit(0); +end; + +function sys_geteuid():Integer; +var + td:p_kthread; +begin + td:=curkthread; + if (td=nil) then Exit(-1); + td^.td_retval[0]:=0; //psevodo user id + Exit(0); +end; + +function sys_getgid():Integer; +var + td:p_kthread; +begin + td:=curkthread; + if (td=nil) then Exit(-1); + td^.td_retval[0]:=0; //psevodo group id + Exit(0); +end; + +{ + * Get effective group ID. The 'egid' is groups[0], and could be obtained + * via getgroups. This syscall exists because it is somewhat painful to do + * correctly in a library function. + } +function sys_getegid():Integer; +var + td:p_kthread; +begin + td:=curkthread; + if (td=nil) then Exit(-1); + td^.td_retval[0]:=0; //psevodo group id + Exit(0); +end; + +function sys_getgroups(gidsetsize:DWORD;gidset:PInteger):Integer; +const + cr_ngroups=1; +var + td:p_kthread; + ngrp:Integer; + groups:array[0..0] of Integer; +begin + td:=curkthread; + if (td=nil) then Exit(-1); + + if (gidsetsize < cr_ngroups) then + begin + if (gidsetsize=0) then + ngrp:=0 + else + Exit(EINVAL); + end else + ngrp:=cr_ngroups; + + groups[0]:=0; + + if (gidsetsize > 0) then + Result:=copyout(@groups, gidset, ngrp * sizeof(Integer)); + + if (Result=0) then + td^.td_retval[0]:=ngrp; +end; + +function sys_setsid():Integer; +begin + Exit(EPERM); +end; + +{ + * set process group (setpgid/old setpgrp) + * + * caller does setpgid(targpid, targpgid) + * + * pid must be caller or child of caller (ESRCH) + * if a child + * pid must be in same session (EPERM) + * pid can't have done an exec (EACCES) + * if pgid<>pid + * there must exist some pid in same session having pgid (EPERM) + * pid must not be session leader (EPERM) + } +function sys_setpgid(pid,pgid:Integer):Integer; +begin + if (pid<>0) and (pid<>g_pid) then + begin + Exit(ESRCH); + end; + + Exit(EPERM); +end; + +{ + * Use the clause in B.4.2.2 that allows setuid/setgid to be 4.2/4.3BSD + * compatible. It says that setting the uid/gid to euid/egid is a special + * case of 'appropriate privilege'. Once the rules are expanded out, this + * basically means that setuid(nnn) sets all three id's, in all permitted + * cases unless _POSIX_SAVED_IDS is enabled. In that case, setuid(getuid()) + * does not set the saved id - this is dangerous for traditional BSD + * programs. For this reason, we *really* do not want to set + * _POSIX_SAVED_IDS and do not want to clear POSIX_APPENDIX_B_4_2_2. + } +function sys_setuid(uid:Integer):Integer; +begin + Result:=0; + if (uid<>0) then //not psevodo user id + begin + Exit(EPERM); + end; +end; + +function sys_seteuid(euid:Integer):Integer; +begin + Result:=0; + if (euid<>0) then //not psevodo user id + begin + Exit(EPERM); + end; +end; + +function sys_setgid(gid:Integer):Integer; +begin + Result:=0; + if (gid<>0) then //not group user id + begin + Exit(EPERM); + end; +end; + +function sys_setegid(egid:Integer):Integer; +begin + Result:=0; + if (egid<>0) then //not group user id + begin + Exit(EPERM); + end; +end; + +function sys_setgroups(gidsetsize:DWORD;gidset:PInteger):Integer; +const + ngroups_max=1023; +var + groups:array[0..0] of Integer; +begin + Result:=0; + + if (gidsetsize > ngroups_max + 1) then + Exit(EINVAL); + + Result:=copyin(gidset, @groups, 1 * sizeof(Integer)); + if (Result<>0) then Exit; + + if (gidsetsize<>1) then Exit(EPERM); + + if (groups[0]<>0) then //not group user id + begin + Exit(EPERM); + end; +end; + +function sys_setreuid(ruid,euid:Integer):Integer; +begin + Result:=0; + if (ruid<>0) and (ruid<>-1) then //not psevodo user id + begin + Exit(EPERM); + end; + if (euid<>0) and (euid<>-1) then //not psevodo user id + begin + Exit(EPERM); + end; +end; + +function sys_setregid(rgid,egid:Integer):Integer; +begin + Result:=0; + if (rgid<>0) and (rgid<>-1) then //not psevodo group id + begin + Exit(EPERM); + end; + if (egid<>0) and (egid<>-1) then //not psevodo group id + begin + Exit(EPERM); + end; +end; + +{ + * setresuid(ruid, euid, suid) is like setreuid except control over the saved + * uid is explicit. + } +function sys_setresuid(ruid,euid,suid:Integer):Integer; +begin + Result:=0; + if (ruid<>0) and (ruid<>-1) then //not psevodo user id + begin + Exit(EPERM); + end; + if (euid<>0) and (euid<>-1) then //not psevodo user id + begin + Exit(EPERM); + end; + if (suid<>0) and (suid<>-1) then //not psevodo session id + begin + Exit(EPERM); + end; +end; + +{ + * setresgid(rgid, egid, sgid) is like setregid except control over the saved + * gid is explicit. + } +function sys_setresgid(rgid,egid,sgid:Integer):Integer; +begin + Result:=0; + if (rgid<>0) and (rgid<>-1) then //not psevodo group id + begin + Exit(EPERM); + end; + if (egid<>0) and (egid<>-1) then //not psevodo group id + begin + Exit(EPERM); + end; + if (sgid<>0) and (sgid<>-1) then //not psevodo group id + begin + Exit(EPERM); + end; +end; + +function sys_getresuid(ruid,euid,suid:PInteger):Integer; +var + cr_uid:Integer; + error1,error2,error3:Integer; +begin + cr_uid:=0; //psevodo user id + + error1:=0; + error2:=0; + error3:=0; + + if (ruid<>nil) then + error1:=copyout(@cr_uid, ruid, sizeof(Integer)); + + if (euid<>nil) then + error2:=copyout(@cr_uid, euid, sizeof(Integer)); + + if (suid<>nil) then + error3:=copyout(@cr_uid, suid, sizeof(Integer)); + + if (error1<>0) then + begin + Exit(error1); + end else + if (error2<>0) then + begin + Exit(error2); + end else + begin + Exit(error3); + end; +end; + +function sys_getresgid(rgid,egid,sgid:PInteger):Integer; +var + cr_gid:Integer; + error1,error2,error3:Integer; +begin + cr_gid:=0; //psevodo group id + + error1:=0; + error2:=0; + error3:=0; + + if (rgid<>nil) then + error1:=copyout(@cr_gid, rgid, sizeof(Integer)); + + if (egid<>nil) then + error2:=copyout(@cr_gid, egid, sizeof(Integer)); + + if (sgid<>nil) then + error3:=copyout(@cr_gid, sgid, sizeof(Integer)); + + if (error1<>0) then + begin + Exit(error1); + end else + if (error2<>0) then + begin + Exit(error2); + end else + begin + Exit(error3); + end; +end; + +function sys_issetugid():Integer; +begin + Exit(0); +end; + +{ + * Get login name, if available. + } +function sys_getlogin(namebuf:PChar;namelen:DWORD):Integer; +var + login:array[0..MAXLOGNAME-1] of AnsiChar; + len:ptrint; +begin + if (namelen > MAXLOGNAME) then + namelen:=MAXLOGNAME; + + login:='user'; + len:=strlen(@login); + + if (len > namelen) then + Exit(ERANGE); + + Exit(copyout(@login, namebuf, len)); +end; + +{ + * Set login name. + } +function sys_setlogin(namebuf:PChar):Integer; +begin + //error:=priv_check(td, PRIV_PROC_SETLOGIN); + Exit(EPERM); +end; + + +{- + * Determine whether td may deliver the specified signal to p. + * Returns: 0 for permitted, an errno value otherwise + * Locks: Sufficient locks to protect various components of td and p + * must be held. td must be curthread, and a lock must be + * held for p. + * References: td and p must be valid for the lifetime of the call + } +function p_cansignal(signum:Integer):Integer; +begin + if (curkthread=nil) then Exit(-1); + + { + * UNIX signalling semantics require that processes in the same + * session always be able to deliver SIGCONT to one another, + * overriding the remaining protections. + } + { XXX: This will require an additional lock of some sort. } + if (signum=SIGCONT) {and (td^.td_proc^.p_session=p^.p_session)} then + Exit(0); + { + * Some compat layers use SIGTHR and higher signals for + * communication between different kernel threads of the same + * process, so that they expect that it's always possible to + * deliver them, even for suid applications where cr_cansignal() can + * deny such ability for security consideration. It should be + * pretty safe to do since the only way to create two processes + * with the same p_leader is via rfork(2). + } + if (signum >= SIGTHR) and + (signum < SIGTHR + 4) then + Exit(0); + + //Exit(cr_cansignal(td^.td_ucred, p, signum)); + Exit(0); +end; + + +end. + diff --git a/sys/kern/kern_resource.pas b/sys/kern/kern_resource.pas new file mode 100644 index 00000000..1d41ba76 --- /dev/null +++ b/sys/kern/kern_resource.pas @@ -0,0 +1,226 @@ +unit kern_resource; + +{$mode ObjFPC}{$H+} +{$CALLING SysV_ABI_CDecl} + +interface + +uses + time, + vmparam, + vfile; + +const + RLIMIT_CPU = 0; // maximum cpu time in seconds + RLIMIT_FSIZE = 1; // maximum file size + RLIMIT_DATA = 2; // data size + RLIMIT_STACK = 3; // stack size + RLIMIT_CORE = 4; // core file size + RLIMIT_RSS = 5; // resident set size + RLIMIT_MEMLOCK= 6; // locked-in-memory address space + RLIMIT_NPROC = 7; // number of processes + RLIMIT_NOFILE = 8; // number of open files + RLIMIT_SBSIZE = 9; // maximum size of all socket buffers + RLIMIT_VMEM =10; // virtual process size (incl. mmap) + RLIMIT_AS =RLIMIT_VMEM; // standard name for RLIMIT_VMEM + RLIMIT_NPTS =11; // pseudo-terminals + RLIMIT_SWAP =12; // swap used + +function lim_max(which:Integer):QWORD; +function lim_cur(which:Integer):QWORD; + +const + RUSAGE_SELF = 0; + RUSAGE_CHILDREN=-1; + RUSAGE_THREAD = 1; + +type + p_rusage=^t_rusage; + t_rusage=packed record + ru_utime :timeval; // user time used + ru_stime :timeval; // system time used + ru_maxrss :DWORD; // max resident set size + ru_ixrss :DWORD; // integral shared memory size * + ru_idrss :DWORD; // integral unshared data + ru_isrss :DWORD; // integral unshared stack + ru_minflt :DWORD; // page reclaims + ru_majflt :DWORD; // page faults + ru_nswap :DWORD; // swaps + ru_inblock :DWORD; // block input operations + ru_oublock :DWORD; // block output operations + ru_msgsnd :DWORD; // messages sent + ru_msgrcv :DWORD; // messages received + ru_nsignals:DWORD; // signals received + ru_nvcsw :DWORD; // voluntary context switches + ru_nivcsw :DWORD; // involuntary + end; + +const + //Process priority specifications to get/setpriority. + PRIO_MIN=-20; + PRIO_MAX= 20; + + PRIO_PROCESS=0; + PRIO_PGRP =1; + PRIO_USER =2; + +function sys_getpriority(which,who:Integer):Integer; +function sys_setpriority(which,who,prio:Integer):Integer; + +implementation + +uses + errno, + kern_thr, + md_proc; + +function lim_max(which:Integer):QWORD; +begin + Result:=0; + Case which of + RLIMIT_DATA :Result:=MAXDSIZ; + RLIMIT_STACK :Result:=MAXSSIZ; + RLIMIT_MEMLOCK:Result:=pageablemem; + RLIMIT_VMEM :Result:=pageablemem; + RLIMIT_NOFILE :Result:=maxfilesperproc; + else; + end; +end; + +function lim_cur(which:Integer):QWORD; +begin + Result:=0; + Case which of + RLIMIT_DATA :Result:=MAXDSIZ; + RLIMIT_STACK :Result:=MAXSSIZ; + RLIMIT_MEMLOCK:Result:=pageablemem; + RLIMIT_VMEM :Result:=pageablemem; + RLIMIT_NOFILE :Result:=maxfilesperproc; + else; + end; +end; + +function cur_proc_get_nice():Integer; inline; +begin + Result:=get_proc_prio; +end; + +function cur_proc_donice(n:Integer):Integer; +begin + if (n > PRIO_MAX) then n:=PRIO_MAX; + if (n < PRIO_MIN) then n:=PRIO_MIN; + + //if (n < cur_proc_get_nice) and (priv_check(td, PRIV_SCHED_SETPRIORITY) <> 0) then + // Exit(EACCES); + + Result:=set_proc_prio(n); + if (Result<>0) then Result:=EPERM; +end; + +{ + * Resource controls and accounting. + } +function sys_getpriority(which,who:Integer):Integer; +var + td:p_kthread; + error,low:Integer; +begin + td:=curkthread; + if (td=nil) then Exit(-1); + + error:=0; + low:=PRIO_MAX+1; + + case (which) of + + PRIO_PROCESS: + begin + if (who=0) or (who=g_pid) then + begin + low:=cur_proc_get_nice; + end; + end; + + PRIO_PGRP: + begin + if (who=0) then + begin + low:=cur_proc_get_nice; + end; + end; + + PRIO_USER: + begin + if (who=0) or (who=g_pid) then + begin + low:=cur_proc_get_nice; + end; + end; + + else + error:=EINVAL; + end; + + if (low=PRIO_MAX+1) and (error=0) then + error:=ESRCH; + + td^.td_retval[0]:=low; + Exit(error); +end; + +function sys_setpriority(which,who,prio:Integer):Integer; +var + found,error:Integer; +begin + found:=0; + error:=0; + + case (which) of + + PRIO_PROCESS: + begin + if (who=0) or (who=g_pid) then + begin + PROC_LOCK(); + error:=cur_proc_donice(prio); + PROC_UNLOCK(); + Inc(found); + end; + end; + + PRIO_PGRP: + begin + if (who=0) then + begin + PROC_LOCK(); + error:=cur_proc_donice(prio); + PROC_UNLOCK(); + Inc(found); + end; + end; + + PRIO_USER: + begin + if (who=0) or (who=g_pid) then + begin + PROC_LOCK(); + error:=cur_proc_donice(prio); + PROC_UNLOCK(); + Inc(found); + end; + end; + + else + error:=EINVAL; + end; + + if (found=0) and (error=0) then + error:=ESRCH; + + Exit(error); +end; + + + +end. + diff --git a/sys/kern/kern_rtprio.pas b/sys/kern/kern_rtprio.pas index cb91fb65..1e7b5a8b 100644 --- a/sys/kern/kern_rtprio.pas +++ b/sys/kern/kern_rtprio.pas @@ -21,7 +21,7 @@ uses errno, kern_thread, sched_ule, - vm_machdep; + md_proc; function rtp_to_pri(rtp:p_rtprio;td:p_kthread):Integer; var diff --git a/sys/kern/kern_sig.pas b/sys/kern/kern_sig.pas index dad03897..6ab6aceb 100644 --- a/sys/kern/kern_sig.pas +++ b/sys/kern/kern_sig.pas @@ -76,6 +76,8 @@ Function sys_sigsuspend(sigmask:p_sigset_t):Integer; Function sys_sigaltstack(ss:p_stack_t;oss:p_stack_t):Integer; +function sys_kill(pid,signum:Integer):Integer; + Function sigonstack(sp:size_t):Integer; procedure sigqueue_init(list:p_sigqueue); procedure tdsigcleanup(td:p_kthread); @@ -112,7 +114,11 @@ uses kern_mtx, kern_time, kern_thread, + kern_exit, + kern_prot, vm_machdep, + md_thread, + md_proc, machdep, sched_ule, subr_sleepqueue; @@ -1115,6 +1121,103 @@ begin end; end; +function pksignal(sig:Integer;ksi:p_ksiginfo):Integer; forward; + +{ + * Common code for kill process group/broadcast kill. + * cp is calling process. + } +function killpg1(sig,pgid,all:Integer;ksi:p_ksiginfo):Integer; +var + err:Integer; +begin + Result:=ESRCH; + + if (all<>0) then + begin + //broadcast + PROC_LOCK; + + err:=p_cansignal(sig); + if (err=0) then + begin + if (sig<>0) then pksignal(sig, ksi); + Result:=err; + end else + if (Result=ESRCH) then + begin + Result:=err; + end; + + PROC_UNLOCK; + end else + begin + if (pgid=0) then + begin + //zero pgid means send to my process group. + end else + begin + Exit(ESRCH); + end; + + PROC_LOCK; + + err:=p_cansignal(sig); + if (err=0) then + begin + if (sig<>0) then pksignal(sig, ksi); + Result:=err; + end else + if (Result=ESRCH) then + begin + Result:=err; + end; + + PROC_UNLOCK; + end; +end; + +function sys_kill(pid,signum:Integer):Integer; +var + ksi:ksiginfo_t; + error:Integer; +begin + if (signum > _SIG_MAXSIG) then + Exit(EINVAL); + + ksiginfo_init(@ksi); + ksi.ksi_info.si_signo:=signum; + ksi.ksi_info.si_code:=SI_USER; + ksi.ksi_info.si_pid :=pid; + + if (pid > 0) then + begin + { kill single process } + if (pid<>g_pid) then Exit(ESRCH); + + PROC_LOCK; + + error:=p_cansignal(signum); + + if (error=0) and (signum<>0) then + pksignal(signum, @ksi); + + PROC_UNLOCK; + + Exit(error); + end; + + case pid of + -1: { broadcast signal } + Exit(killpg1(signum, 0, 1, @ksi)); + 0: { signal own process group } + Exit(killpg1(signum, 0, 0, @ksi)); + else { negative explicit process group } + Exit(killpg1(signum, -pid, 0, @ksi)); + end; + { NOTREACHED } +end; + procedure postsig_done(sig:Integer;td:p_kthread); var mask:sigset_t; @@ -1585,14 +1688,9 @@ begin Result:=1; end; -function W_EXITCODE(ret,sig:Integer):Integer; inline; -begin - Result:=(ret shl 8) or sig; -end; - procedure sigexit(td:p_kthread;sig:Integer); begin - Halt(W_EXITCODE(0,sig)); + exit1(W_EXITCODE(0,sig)); // NOTREACHED end; diff --git a/sys/kern/kern_synch.pas b/sys/kern/kern_synch.pas index fc4d32d8..e023115a 100644 --- a/sys/kern/kern_synch.pas +++ b/sys/kern/kern_synch.pas @@ -47,6 +47,8 @@ procedure wakeup_one(ident:Pointer); procedure maybe_yield(); procedure kern_yield(prio:Integer); function sys_yield():Integer; +function sys_sched_yield():Integer; +function sys_cpumode_yield():Integer; implementation @@ -169,5 +171,15 @@ begin Exit(0); end; +function sys_sched_yield():Integer; +begin + Result:=sys_yield; +end; + +function sys_cpumode_yield():Integer; +begin + Result:=sys_yield; +end; + end. diff --git a/sys/kern/kern_thr.pas b/sys/kern/kern_thr.pas index 15ce4562..5ac0232c 100644 --- a/sys/kern/kern_thr.pas +++ b/sys/kern/kern_thr.pas @@ -107,6 +107,8 @@ type iflag :Integer; //0x710 end; + t_td_name=array[0..31] of AnsiChar; + p_kthread=^kthread; kthread=record td_umtxq :Pointer; //p_umtx_q @@ -128,7 +130,7 @@ type td_base_user_pri:Word; td_lend_user_pri:Word; td_user_pri :Word; - td_name :array[0..31] of AnsiChar; + td_name :t_td_name; // td_cpuset :Ptruint; td_sigmask :sigset_t; @@ -164,8 +166,8 @@ type stack_size:Ptruint; tls_base :Pointer; tls_size :Ptruint; - child_tid :PQWORD; - parent_tid:PQWORD; + child_tid :PDWORD; + parent_tid:PDWORD; flags :Integer; align :Integer; rtp :Pointer; @@ -388,7 +390,7 @@ var td:p_kthread; begin td:=curkthread; - if (td=nil) then Exit; + if (td=nil) then Exit(0); Result:=(not flags) or (td^.td_pflags and flags); td^.td_pflags:=td^.td_pflags or flags; end; diff --git a/sys/kern/kern_thread.pas b/sys/kern/kern_thread.pas index c26710e4..20f27e4e 100644 --- a/sys/kern/kern_thread.pas +++ b/sys/kern/kern_thread.pas @@ -6,6 +6,7 @@ unit kern_thread; interface uses + sysutils, mqueue, kern_thr, ntapi, @@ -14,7 +15,6 @@ uses signal, signalvar, time, - kern_time, rtprio, kern_rtprio, hamt; @@ -23,12 +23,13 @@ function thread_alloc:p_kthread; procedure thread_free(td:p_kthread); function sys_thr_new(_param:p_thr_param;_size:Integer):Integer; -function sys_thr_self(id:PQWORD):Integer; +function sys_thr_self(id:PDWORD):Integer; procedure sys_thr_exit(state:PQWORD); -function sys_thr_kill(id:QWORD;sig:Integer):Integer; +function sys_thr_kill(id:DWORD;sig:Integer):Integer; function sys_thr_suspend(timeout:ptimespec):Integer; -function sys_thr_wake(id:QWORD):Integer; -function sys_thr_set_name(id:QWORD;pname:PChar):Integer; +function sys_thr_wake(id:DWORD):Integer; +function sys_thr_set_name(id:DWORD;pname:PChar):Integer; +function sys_thr_get_name(id:DWORD;pname:PChar):Integer; function sys_amd64_set_fsbase(base:Pointer):Integer; @@ -69,6 +70,7 @@ uses errno, systm, vm_machdep, + md_thread, kern_rwlock, kern_mtx, kern_umtx, @@ -297,8 +299,8 @@ function create_thread(td :p_kthread; //calling thread stack_base:Pointer; stack_size:QWORD; tls_base :Pointer; - child_tid :PQWORD; - parent_tid:PQWORD; + child_tid :PDWORD; + parent_tid:PDWORD; rtp :p_rtprio; name :PChar ):Integer; @@ -401,13 +403,13 @@ begin if (child_tid<>nil) then begin - n:=suword64(child_tid^,newtd^.td_tid); + n:=suword32(child_tid^,newtd^.td_tid); if (n<>0) then Goto _term; end; if (parent_tid<>nil) then begin - n:=suword64(parent_tid^,newtd^.td_tid); + n:=suword32(parent_tid^,newtd^.td_tid); if (n<>0) then Goto _term; end; @@ -420,7 +422,7 @@ begin if (name<>nil) then begin - Move(name^,newtd^.td_name,SizeOf(newtd^.td_name)); + Move(name^,newtd^.td_name,SizeOf(t_td_name)); end; SetThreadDebugName(newtd^.td_handle,'ps4:'+newtd^.td_name); @@ -450,7 +452,7 @@ function kern_thr_new(td:p_kthread;param:p_thr_param):Integer; var rtp:t_rtprio; rtpp:p_rtprio; - name:array[0..31] of AnsiChar; + name:t_td_name; begin Result:=0; rtpp:=nil; @@ -462,7 +464,7 @@ begin rtpp:=@rtp; end; - name[0]:=#0; + name:=Default(t_td_name); if (param^.name<>nil) then begin @@ -530,7 +532,7 @@ begin RtlExitUserThread(0); end; -function sys_thr_self(id:PQWORD):Integer; +function sys_thr_self(id:PDWORD):Integer; var td:p_kthread; begin @@ -539,7 +541,7 @@ begin td:=curkthread; if (td=nil) then Exit(EFAULT); - Result:=suword64(id^,td^.td_tid); + Result:=suword32(id^,td^.td_tid); if (Result<>0) then Exit(EFAULT); Result:=0; @@ -582,7 +584,7 @@ begin end; end; -function sys_thr_kill(id:QWORD;sig:Integer):Integer; +function sys_thr_kill(id:DWORD;sig:Integer):Integer; var data:_t_stk; begin @@ -592,7 +594,7 @@ begin data.ksi.ksi_info.si_signo:=sig; data.ksi.ksi_info.si_code :=SI_LWP; - if (int64(id)=-1) then + if (Integer(id)=-1) then begin if (sig<>0) and (not _SIG_VALID(sig)) then begin @@ -702,7 +704,7 @@ begin Result:=kern_thr_suspend(td,tsp); end; -function sys_thr_wake(id:QWORD):Integer; +function sys_thr_wake(id:DWORD):Integer; var td:p_kthread; begin @@ -728,21 +730,21 @@ begin thread_dec_ref(td); end; -function sys_thr_set_name(id:QWORD;pname:PChar):Integer; +function sys_thr_set_name(id:DWORD;pname:PChar):Integer; var td:p_kthread; - name:array[0..31] of AnsiChar; + name:t_td_name; begin Result:=0; - name[0]:=#0; + name:=Default(t_td_name); if (name<>nil) then begin Result:=copyinstr(pname,@name,32,nil); if (Result<>0) then Exit; end; - if (int64(id)=-1) then + if (Integer(id)=-1) then begin //TODO SetProcName Exit; @@ -753,7 +755,7 @@ begin thread_lock(td); - Move(name,td^.td_name,SizeOf(td^.td_name)); + td^.td_name:=name; SetThreadDebugName(td^.td_handle,'ps4:'+name); thread_unlock(td); @@ -761,6 +763,41 @@ begin thread_dec_ref(td); end; +function strnlen(s:PChar;maxlen:ptrint):ptrint; +var + len:size_t; +begin + For len:=0 to maxlen-1 do + begin + if (s^=#0) then Break; + Inc(s); + end; + Exit(len); +end; + +function sys_thr_get_name(id:DWORD;pname:PChar):Integer; +var + td:p_kthread; + name:t_td_name; + len:ptrint; +begin + Result:=0; + + td:=tdfind(DWORD(id)); + if (td=nil) then Exit(ESRCH); + + thread_lock(td); + + name:=td^.td_name; + + thread_unlock(td); + + len:=strnlen(name,31); + Result:=copyout(@name,pname,len+1); + + thread_dec_ref(td); +end; + function sys_amd64_set_fsbase(base:Pointer):Integer; var td:p_kthread; diff --git a/sys/kern/kern_umtx.pas b/sys/kern/kern_umtx.pas index f9391d33..df65bf8d 100644 --- a/sys/kern/kern_umtx.pas +++ b/sys/kern/kern_umtx.pas @@ -20,9 +20,9 @@ procedure umtx_thread_init(td:p_kthread); procedure umtx_thread_exit(td:p_kthread); procedure umtx_thread_fini(td:p_kthread); -function _sys_umtx_lock(mtx:p_umtx):Integer; -function _sys_umtx_unlock(mtx:p_umtx):Integer; -function _sys_umtx_op(obj:Pointer;op:Integer;val:QWORD;uaddr1,uaddr2:Pointer):Integer; +function sys__umtx_lock(mtx:p_umtx):Integer; +function sys__umtx_unlock(mtx:p_umtx):Integer; +function sys__umtx_op(obj:Pointer;op:Integer;val:QWORD;uaddr1,uaddr2:Pointer):Integer; // @@ -2453,7 +2453,7 @@ begin Result:=do_rw_unlock(td,obj); end; -function _sys_umtx_lock(mtx:p_umtx):Integer; +function sys__umtx_lock(mtx:p_umtx):Integer; var td:p_kthread; begin @@ -2463,7 +2463,7 @@ begin Result:=_do_lock_umtx(td,mtx,td^.td_tid,0); end; -function _sys_umtx_unlock(mtx:p_umtx):Integer; +function sys__umtx_unlock(mtx:p_umtx):Integer; var td:p_kthread; begin @@ -2495,7 +2495,7 @@ begin Result:=do_sem_wake(td,obj) end; -function _sys_umtx_op(obj:Pointer;op:Integer;val:QWORD;uaddr1,uaddr2:Pointer):Integer; +function sys__umtx_op(obj:Pointer;op:Integer;val:QWORD;uaddr1,uaddr2:Pointer):Integer; var td:p_kthread; begin diff --git a/sys/kern/md_proc.pas b/sys/kern/md_proc.pas new file mode 100644 index 00000000..89d6d547 --- /dev/null +++ b/sys/kern/md_proc.pas @@ -0,0 +1,100 @@ +unit md_proc; + +{$mode ObjFPC}{$H+} +{$CALLING SysV_ABI_CDecl} + +interface + +uses + ntapi, + windows; + +var + g_pid:DWORD=0; + +function cpuset_setproc(new:Ptruint):Integer; +function cpuset_getproc(var old:Ptruint):Integer; + +function get_proc_prio():Integer; +function set_proc_prio(n:Integer):Integer; + +implementation + +function cpuset_setproc(new:Ptruint):Integer; +begin + Result:=NtSetInformationProcess(NtCurrentProcess, + ProcessAffinityMask, + @new, + SizeOf(QWORD)); +end; + +function cpuset_getproc(var old:Ptruint):Integer; +var + info:PROCESS_BASIC_INFORMATION; +begin + Result:=NtQueryInformationProcess(NtCurrentProcess, + ProcessBasicInformation, + @info, + SizeOf(info), + nil); + if (Result=0) then + begin + old:=info.AffinityMask; + end; +end; + +function get_proc_prio():Integer; +var + info:PROCESS_PRIORITY_CLASS; +begin + Result:=NtQueryInformationProcess(NtCurrentProcess, + ProcessPriorityClass, + @info, + SizeOf(info), + nil); + if (Result=0) then + begin + Result:=0; + + case info.PriorityClass of + PROCESS_PRIORITY_CLASS_IDLE :Result:=-20; + PROCESS_PRIORITY_CLASS_BELOW_NORMAL:Result:=-10; + PROCESS_PRIORITY_CLASS_NORMAL :Result:=0; + PROCESS_PRIORITY_CLASS_ABOVE_NORMAL:Result:=10; + PROCESS_PRIORITY_CLASS_HIGH :Result:=20; + else; + end; + + end else + begin + Result:=0; + end; +end; + +function set_proc_prio(n:Integer):Integer; +var + info:PROCESS_PRIORITY_CLASS; +begin + info.Foreground :=False; + info.PriorityClass:=PROCESS_PRIORITY_CLASS_NORMAL; + + case n of + -20..-14:info.PriorityClass:=PROCESS_PRIORITY_CLASS_IDLE; + -13.. -7:info.PriorityClass:=PROCESS_PRIORITY_CLASS_BELOW_NORMAL; + -6.. 6:info.PriorityClass:=PROCESS_PRIORITY_CLASS_NORMAL; + 7.. 13:info.PriorityClass:=PROCESS_PRIORITY_CLASS_ABOVE_NORMAL; + 14.. 20:info.PriorityClass:=PROCESS_PRIORITY_CLASS_HIGH; + else; + end; + + Result:=NtSetInformationProcess(NtCurrentProcess, + ProcessPriorityClass, + @info, + SizeOf(info)); +end; + +initialization + g_pid:=GetCurrentProcessId; + +end. + diff --git a/sys/kern/md_thread.pas b/sys/kern/md_thread.pas new file mode 100644 index 00000000..00f5b315 --- /dev/null +++ b/sys/kern/md_thread.pas @@ -0,0 +1,115 @@ +unit md_thread; + +{$mode ObjFPC}{$H+} +{$CALLING SysV_ABI_CDecl} + +interface + +uses + ntapi, + windows, + kern_thr; + +Const + SYS_STACK_RSRV=64*1024; + SYS_STACK_SIZE=16*1024; + +function cpu_thread_alloc(td:p_kthread):Integer; +function cpu_thread_free(td:p_kthread):Integer; +function cpuset_setaffinity(td:p_kthread;new:Ptruint):Integer; +procedure cpu_set_user_tls(td:p_kthread;base:Pointer); +function cpu_set_priority(td:p_kthread;prio:Integer):Integer; +function cpu_getstack(td:p_kthread):QWORD; inline; + +implementation + +function cpu_thread_alloc(td:p_kthread):Integer; +var + data:Pointer; + size:ULONG_PTR; +begin + data:=nil; + size:=SYS_STACK_RSRV; + + Result:=NtAllocateVirtualMemory( + NtCurrentProcess, + @data, + 0, + @size, + MEM_RESERVE, + PAGE_READWRITE + ); + if (Result<>0) then Exit; + + data:=data+SYS_STACK_RSRV-SYS_STACK_SIZE; + size:=SYS_STACK_SIZE; + + Result:=NtAllocateVirtualMemory( + NtCurrentProcess, + @data, + 0, + @size, + MEM_COMMIT, + PAGE_READWRITE + ); + + data:=data+SYS_STACK_SIZE; + td^.td_kstack:=data; +end; + +function cpu_thread_free(td:p_kthread):Integer; +var + data:Pointer; + size:ULONG_PTR; +begin + data:=td^.td_kstack; + data:=data-SYS_STACK_RSRV; + size:=0; + + Result:=NtFreeVirtualMemory( + NtCurrentProcess, + @data, + @size, + MEM_RELEASE + ); +end; + +function cpuset_setaffinity(td:p_kthread;new:Ptruint):Integer; +begin + td^.td_cpuset:=new; + Result:=NtSetInformationThread(td^.td_handle,ThreadAffinityMask,@new,SizeOf(Ptruint)); +end; + +procedure cpu_set_user_tls(td:p_kthread;base:Pointer); inline; +begin + td^.pcb_fsbase:=base; + td^.td_teb^.tcb:=base; +end; + +function cpu_set_priority(td:p_kthread;prio:Integer):Integer; +begin + td^.td_priority:=prio; + + Case prio of + 0..255:prio:= 16; + 256..496:prio:= 2; + 497..526:prio:= 1; + 527..556:prio:= 0; + 557..586:prio:=-1; + 587..767:prio:=-2; + else + prio:=-16; + end; + + Result:=NtSetInformationThread(td^.td_handle,ThreadBasePriority,@prio,SizeOf(Integer)); +end; + +function cpu_getstack(td:p_kthread):QWORD; inline; +begin + Result:=td^.td_frame^.tf_rsp; +end; + + + +end. + diff --git a/sys/kern/sched_ule.pas b/sys/kern/sched_ule.pas index 7ea2ba5c..1e66badc 100644 --- a/sys/kern/sched_ule.pas +++ b/sys/kern/sched_ule.pas @@ -24,7 +24,8 @@ function setrunnable(td:p_kthread):Integer; implementation uses - vm_machdep; + vm_machdep, + md_thread; procedure sched_fork_thread(td,childtd:p_kthread); begin diff --git a/sys/kern/vm_machdep.pas b/sys/kern/vm_machdep.pas index 7f97b08f..e3677103 100644 --- a/sys/kern/vm_machdep.pas +++ b/sys/kern/vm_machdep.pas @@ -13,18 +13,6 @@ uses trap, kern_thr; -var - g_pid:DWORD=0; - -function cpu_thread_alloc(td:p_kthread):Integer; -function cpu_thread_free(td:p_kthread):Integer; -function cpuset_setaffinity(td:p_kthread;new:Ptruint):Integer; -function cpuset_setproc(new:Ptruint):Integer; -function cpuset_getproc(var old:Ptruint):Integer; -procedure cpu_set_user_tls(td:p_kthread;base:Pointer); -function cpu_set_priority(td:p_kthread;prio:Integer):Integer; -function cpu_getstack(td:p_kthread):QWORD; - procedure ipi_sigreturn; function ipi_send_cpu(td:p_kthread):Integer; @@ -45,7 +33,8 @@ uses machdep, md_context, signal, - kern_sig; + kern_sig, + md_thread; function ntw2px(n:Integer):Integer; inline; begin @@ -135,121 +124,11 @@ begin NtYieldExecution; end; -Const - SYS_STACK_RSRV=64*1024; - SYS_STACK_SIZE=16*1024; - -function cpu_thread_alloc(td:p_kthread):Integer; -var - data:Pointer; - size:ULONG_PTR; -begin - data:=nil; - size:=SYS_STACK_RSRV; - - Result:=NtAllocateVirtualMemory( - NtCurrentProcess, - @data, - 0, - @size, - MEM_RESERVE, - PAGE_READWRITE - ); - if (Result<>0) then Exit; - - data:=data+SYS_STACK_RSRV-SYS_STACK_SIZE; - size:=SYS_STACK_SIZE; - - Result:=NtAllocateVirtualMemory( - NtCurrentProcess, - @data, - 0, - @size, - MEM_COMMIT, - PAGE_READWRITE - ); - - data:=data+SYS_STACK_SIZE; - td^.td_kstack:=data; -end; - -function cpu_thread_free(td:p_kthread):Integer; -var - data:Pointer; - size:ULONG_PTR; -begin - data:=td^.td_kstack; - data:=data-SYS_STACK_RSRV; - size:=0; - - Result:=NtFreeVirtualMemory( - NtCurrentProcess, - @data, - @size, - MEM_RELEASE - ); -end; - -function cpuset_setaffinity(td:p_kthread;new:Ptruint):Integer; -begin - td^.td_cpuset:=new; - Result:=NtSetInformationThread(td^.td_handle,ThreadAffinityMask,@new,SizeOf(Ptruint)); -end; - -function cpuset_setproc(new:Ptruint):Integer; -begin - Result:=NtSetInformationProcess(NtCurrentProcess,ProcessAffinityMask,@new,SizeOf(QWORD)); -end; - -function cpuset_getproc(var old:Ptruint):Integer; -var - info:PROCESS_BASIC_INFORMATION; -begin - Result:=NtQueryInformationProcess(NtCurrentProcess, - ProcessBasicInformation, - @info, - SizeOf(PROCESS_BASIC_INFORMATION), - nil); - if (Result=0) then - begin - old:=info.AffinityMask; - end; -end; - -procedure cpu_set_user_tls(td:p_kthread;base:Pointer); inline; -begin - td^.pcb_fsbase:=base; - td^.td_teb^.tcb:=base; -end; - function cpu_get_iflag(td:p_kthread):PInteger; inline; begin Result:=@td^.td_teb^.iflag; end; -function cpu_set_priority(td:p_kthread;prio:Integer):Integer; -begin - td^.td_priority:=prio; - - Case prio of - 0..255:prio:= 16; - 256..496:prio:= 2; - 497..526:prio:= 1; - 527..556:prio:= 0; - 557..586:prio:=-1; - 587..767:prio:=-2; - else - prio:=-16; - end; - - Result:=NtSetInformationThread(td^.td_handle,ThreadBasePriority,@prio,SizeOf(Integer)); -end; - -function cpu_getstack(td:p_kthread):QWORD; inline; -begin - Result:=td^.td_frame^.tf_rsp; -end; - function IS_SYSTEM_STACK(td:p_kthread;rsp:qword):Boolean; inline; begin Result:=(rsp<=QWORD(td^.td_kstack)) and (rsp>(QWORD(td^.td_kstack)-SYS_STACK_SIZE)); @@ -513,9 +392,6 @@ begin PROC_UNLOCK; end; -initialization - g_pid:=GetCurrentProcessId; - end. diff --git a/sys/rtprio.pas b/sys/rtprio.pas index de1a4a1a..edbfdad7 100644 --- a/sys/rtprio.pas +++ b/sys/rtprio.pas @@ -42,8 +42,8 @@ type _prio:Word; end; -function PRI_BASE(P:Word):Word; inline; -function RTP_PRIO_BASE(P:Word):Word; inline; +function PRI_BASE(P:Word):Word; +function RTP_PRIO_BASE(P:Word):Word; function rtprio_thread(func,tid:Integer;rtp:p_rtprio):Integer; function _rtprio(func,pid:Integer;rtp:p_rtprio):Integer; @@ -55,12 +55,12 @@ uses thr_error, kern_rtprio; -function PRI_BASE(P:Word):Word; inline; +function PRI_BASE(P:Word):Word; begin Result:=P and (not PRI_FIFO_BIT); end; -function RTP_PRIO_BASE(P:Word):Word; inline; +function RTP_PRIO_BASE(P:Word):Word; begin Result:=P and (not PRI_FIFO_BIT); end; diff --git a/sys/sys_umtx.pas b/sys/sys_umtx.pas index 62865583..bb8ad9b2 100644 --- a/sys/sys_umtx.pas +++ b/sys/sys_umtx.pas @@ -89,28 +89,28 @@ end; function _umtx_lock(mtx:p_umtx):Integer; assembler; nostackframe; asm - movq _sys_umtx_lock,%rax + movq sys__umtx_lock,%rax call fast_syscall jmp cerror end; function _umtx_unlock(mtx:p_umtx):Integer; assembler; nostackframe; asm - movq _sys_umtx_unlock,%rax + movq sys__umtx_unlock,%rax call fast_syscall jmp cerror end; function _umtx_op(obj:Pointer;op:Integer;val:QWORD;uaddr1,uaddr2:Pointer):Integer; assembler; nostackframe; asm - movq _sys_umtx_op,%rax + movq sys__umtx_op,%rax call fast_syscall jmp cerror end; function _umtx_op_err(obj:Pointer;op:Integer;val:QWORD;uaddr1,uaddr2:Pointer):Integer; assembler; nostackframe; asm - movq _sys_umtx_op,%rax + movq sys__umtx_op,%rax call fast_syscall end; diff --git a/sys/test/project1.lpi b/sys/test/project1.lpi index 1fc12f76..a594193b 100644 --- a/sys/test/project1.lpi +++ b/sys/test/project1.lpi @@ -225,10 +225,6 @@ - - - - @@ -501,6 +497,26 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/sys/test/project1.lpr b/sys/test/project1.lpr index 6e45de7a..b5aed014 100644 --- a/sys/test/project1.lpr +++ b/sys/test/project1.lpr @@ -31,7 +31,7 @@ uses kern_condvar, kern_osem, kern_id, - sys_osem, + sys_osem, kern_evf, sys_evf, rtprio, @@ -72,7 +72,10 @@ uses null_vnops, null_vfsops, ufs, - vmount; + vmount, + kern_prot, + kern_resource, + md_proc; var mtx:umutex; @@ -1092,6 +1095,10 @@ begin //test_map; sys_init; + Writeln(get_proc_prio()); + Writeln(set_proc_prio(14)); + Writeln(get_proc_prio()); + e:=_umtx_op(nil,UMTX_OP_RW_WRLOCK,0,nil,nil); Writeln('me=',e,' _errno:',__error^); diff --git a/sys/test/test.txt b/sys/test/test.txt new file mode 100644 index 00000000..73396786 --- /dev/null +++ b/sys/test/test.txt @@ -0,0 +1 @@ +1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 \ No newline at end of file diff --git a/sys/thr.pas b/sys/thr.pas index eee0cba1..ea1c02c5 100644 --- a/sys/thr.pas +++ b/sys/thr.pas @@ -34,7 +34,7 @@ implementation uses trap, thr_error, - vm_machdep; + md_proc; function getpid:Integer; begin diff --git a/sys/vm/kern_resource.pas b/sys/vm/kern_resource.pas deleted file mode 100644 index db485c9a..00000000 --- a/sys/vm/kern_resource.pas +++ /dev/null @@ -1,60 +0,0 @@ -unit kern_resource; - -{$mode ObjFPC}{$H+} -{$CALLING SysV_ABI_CDecl} - -interface - -uses - vmparam, - vfile; - -const - RLIMIT_CPU = 0; // maximum cpu time in seconds - RLIMIT_FSIZE = 1; // maximum file size - RLIMIT_DATA = 2; // data size - RLIMIT_STACK = 3; // stack size - RLIMIT_CORE = 4; // core file size - RLIMIT_RSS = 5; // resident set size - RLIMIT_MEMLOCK= 6; // locked-in-memory address space - RLIMIT_NPROC = 7; // number of processes - RLIMIT_NOFILE = 8; // number of open files - RLIMIT_SBSIZE = 9; // maximum size of all socket buffers - RLIMIT_VMEM =10; // virtual process size (incl. mmap) - RLIMIT_AS =RLIMIT_VMEM; // standard name for RLIMIT_VMEM - RLIMIT_NPTS =11; // pseudo-terminals - RLIMIT_SWAP =12; // swap used - -function lim_max(which:Integer):QWORD; -function lim_cur(which:Integer):QWORD; - -implementation - -function lim_max(which:Integer):QWORD; -begin - Result:=0; - Case which of - RLIMIT_DATA :Result:=MAXDSIZ; - RLIMIT_STACK :Result:=MAXSSIZ; - RLIMIT_MEMLOCK:Result:=pageablemem; - RLIMIT_VMEM :Result:=pageablemem; - RLIMIT_NOFILE :Result:=maxfilesperproc; - else; - end; -end; - -function lim_cur(which:Integer):QWORD; -begin - Result:=0; - Case which of - RLIMIT_DATA :Result:=MAXDSIZ; - RLIMIT_STACK :Result:=MAXSSIZ; - RLIMIT_MEMLOCK:Result:=pageablemem; - RLIMIT_VMEM :Result:=pageablemem; - RLIMIT_NOFILE :Result:=maxfilesperproc; - else; - end; -end; - -end. - diff --git a/tools/syscalls_gen/_sysent.pas b/tools/syscalls_gen/_sysent.pas new file mode 100644 index 00000000..aa2b0b3c --- /dev/null +++ b/tools/syscalls_gen/_sysent.pas @@ -0,0 +1,3435 @@ +unit _sysent; + +{$mode ObjFPC}{$H+} +{$CALLING SysV_ABI_CDecl} + +interface + +function nosys:Integer; +function nosup:Integer; +function nzero:Integer; + +type + t_sysent=packed record + sy_narg:ptruint; + sy_call:Pointer; + sy_name:PChar; + end; + +const + sysent_table:array[0..677] of t_sysent=( + (//[0] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[1] + sy_narg:1; + sy_call:nil; + sy_name:'sys_sys_exit' + ), + (//[2] + sy_narg:0; + sy_call:nil; + sy_name:'sys_fork' + ), + (//[3] + sy_narg:3; + sy_call:nil; + sy_name:'sys_read' + ), + (//[4] + sy_narg:3; + sy_call:nil; + sy_name:'sys_write' + ), + (//[5] + sy_narg:3; + sy_call:nil; + sy_name:'sys_open' + ), + (//[6] + sy_narg:1; + sy_call:nil; + sy_name:'sys_close' + ), + (//[7] + sy_narg:4; + sy_call:nil; + sy_name:'sys_wait4' + ), + (//[8] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[9] + sy_narg:2; + sy_call:nil; + sy_name:'sys_link' + ), + (//[10] + sy_narg:1; + sy_call:nil; + sy_name:'sys_unlink' + ), + (//[11] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[12] + sy_narg:1; + sy_call:nil; + sy_name:'sys_chdir' + ), + (//[13] + sy_narg:1; + sy_call:nil; + sy_name:'sys_fchdir' + ), + (//[14] + sy_narg:3; + sy_call:nil; + sy_name:'sys_mknod' + ), + (//[15] + sy_narg:2; + sy_call:nil; + sy_name:'sys_chmod' + ), + (//[16] + sy_narg:3; + sy_call:nil; + sy_name:'sys_chown' + ), + (//[17] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[18] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[19] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[20] + sy_narg:0; + sy_call:nil; + sy_name:'sys_getpid' + ), + (//[21] + sy_narg:4; + sy_call:nil; + sy_name:'sys_mount' + ), + (//[22] + sy_narg:2; + sy_call:nil; + sy_name:'sys_unmount' + ), + (//[23] + sy_narg:1; + sy_call:nil; + sy_name:'sys_setuid' + ), + (//[24] + sy_narg:0; + sy_call:nil; + sy_name:'sys_getuid' + ), + (//[25] + sy_narg:0; + sy_call:nil; + sy_name:'sys_geteuid' + ), + (//[26] + sy_narg:4; + sy_call:nil; + sy_name:'sys_ptrace' + ), + (//[27] + sy_narg:3; + sy_call:nil; + sy_name:'sys_recvmsg' + ), + (//[28] + sy_narg:3; + sy_call:nil; + sy_name:'sys_sendmsg' + ), + (//[29] + sy_narg:6; + sy_call:nil; + sy_name:'sys_recvfrom' + ), + (//[30] + sy_narg:3; + sy_call:nil; + sy_name:'sys_accept' + ), + (//[31] + sy_narg:3; + sy_call:nil; + sy_name:'sys_getpeername' + ), + (//[32] + sy_narg:3; + sy_call:nil; + sy_name:'sys_getsockname' + ), + (//[33] + sy_narg:2; + sy_call:nil; + sy_name:'sys_access' + ), + (//[34] + sy_narg:2; + sy_call:nil; + sy_name:'sys_chflags' + ), + (//[35] + sy_narg:2; + sy_call:nil; + sy_name:'sys_fchflags' + ), + (//[36] + sy_narg:0; + sy_call:nil; + sy_name:'sys_sync' + ), + (//[37] + sy_narg:2; + sy_call:nil; + sy_name:'sys_kill' + ), + (//[38] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[39] + sy_narg:0; + sy_call:nil; + sy_name:'sys_getppid' + ), + (//[40] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[41] + sy_narg:1; + sy_call:nil; + sy_name:'sys_dup' + ), + (//[42] + sy_narg:0; + sy_call:nil; + sy_name:'sys_pipe' + ), + (//[43] + sy_narg:0; + sy_call:nil; + sy_name:'sys_getegid' + ), + (//[44] + sy_narg:4; + sy_call:nil; + sy_name:'sys_profil' + ), + (//[45] + sy_narg:4; + sy_call:nil; + sy_name:'sys_ktrace' + ), + (//[46] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[47] + sy_narg:0; + sy_call:nil; + sy_name:'sys_getgid' + ), + (//[48] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[49] + sy_narg:2; + sy_call:nil; + sy_name:'sys_getlogin' + ), + (//[50] + sy_narg:1; + sy_call:nil; + sy_name:'sys_setlogin' + ), + (//[51] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[52] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[53] + sy_narg:2; + sy_call:nil; + sy_name:'sys_sigaltstack' + ), + (//[54] + sy_narg:3; + sy_call:nil; + sy_name:'sys_ioctl' + ), + (//[55] + sy_narg:1; + sy_call:nil; + sy_name:'sys_reboot' + ), + (//[56] + sy_narg:1; + sy_call:nil; + sy_name:'sys_revoke' + ), + (//[57] + sy_narg:2; + sy_call:nil; + sy_name:'sys_symlink' + ), + (//[58] + sy_narg:3; + sy_call:nil; + sy_name:'sys_readlink' + ), + (//[59] + sy_narg:3; + sy_call:nil; + sy_name:'sys_execve' + ), + (//[60] + sy_narg:1; + sy_call:nil; + sy_name:'sys_umask' + ), + (//[61] + sy_narg:1; + sy_call:nil; + sy_name:'sys_chroot' + ), + (//[62] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[63] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[64] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[65] + sy_narg:3; + sy_call:nil; + sy_name:'sys_msync' + ), + (//[66] + sy_narg:0; + sy_call:nil; + sy_name:'sys_vfork' + ), + (//[67] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[68] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[69] + sy_narg:1; + sy_call:@nosup; + sy_name:'sys_sbrk' + ), + (//[70] + sy_narg:1; + sy_call:@nosup; + sy_name:'sys_sstk' + ), + (//[71] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[72] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[73] + sy_narg:2; + sy_call:nil; + sy_name:'sys_munmap' + ), + (//[74] + sy_narg:3; + sy_call:nil; + sy_name:'sys_mprotect' + ), + (//[75] + sy_narg:3; + sy_call:nil; + sy_name:'sys_madvise' + ), + (//[76] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[77] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[78] + sy_narg:3; + sy_call:nil; + sy_name:'sys_mincore' + ), + (//[79] + sy_narg:2; + sy_call:nil; + sy_name:'sys_getgroups' + ), + (//[80] + sy_narg:2; + sy_call:nil; + sy_name:'sys_setgroups' + ), + (//[81] + sy_narg:0; + sy_call:nil; + sy_name:'sys_getpgrp' + ), + (//[82] + sy_narg:2; + sy_call:nil; + sy_name:'sys_setpgid' + ), + (//[83] + sy_narg:3; + sy_call:nil; + sy_name:'sys_setitimer' + ), + (//[84] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[85] + sy_narg:1; + sy_call:nil; + sy_name:'sys_swapon' + ), + (//[86] + sy_narg:2; + sy_call:nil; + sy_name:'sys_getitimer' + ), + (//[87] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[88] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[89] + sy_narg:0; + sy_call:nil; + sy_name:'sys_getdtablesize' + ), + (//[90] + sy_narg:2; + sy_call:nil; + sy_name:'sys_dup2' + ), + (//[91] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[92] + sy_narg:3; + sy_call:nil; + sy_name:'sys_fcntl' + ), + (//[93] + sy_narg:5; + sy_call:nil; + sy_name:'sys_select' + ), + (//[94] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[95] + sy_narg:1; + sy_call:nil; + sy_name:'sys_fsync' + ), + (//[96] + sy_narg:3; + sy_call:nil; + sy_name:'sys_setpriority' + ), + (//[97] + sy_narg:3; + sy_call:nil; + sy_name:'sys_socket' + ), + (//[98] + sy_narg:3; + sy_call:nil; + sy_name:'sys_connect' + ), + (//[99] + sy_narg:4; + sy_call:nil; + sy_name:'sys_netcontrol' + ), + (//[100] + sy_narg:2; + sy_call:nil; + sy_name:'sys_getpriority' + ), + (//[101] + sy_narg:2; + sy_call:nil; + sy_name:'sys_netabort' + ), + (//[102] + sy_narg:4; + sy_call:nil; + sy_name:'sys_netgetsockinfo' + ), + (//[103] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[104] + sy_narg:3; + sy_call:nil; + sy_name:'sys_bind' + ), + (//[105] + sy_narg:5; + sy_call:nil; + sy_name:'sys_setsockopt' + ), + (//[106] + sy_narg:2; + sy_call:nil; + sy_name:'sys_listen' + ), + (//[107] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[108] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[109] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[110] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[111] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[112] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[113] + sy_narg:4; + sy_call:nil; + sy_name:'sys_socketex' + ), + (//[114] + sy_narg:1; + sy_call:nil; + sy_name:'sys_socketclose' + ), + (//[115] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[116] + sy_narg:2; + sy_call:nil; + sy_name:'sys_gettimeofday' + ), + (//[117] + sy_narg:2; + sy_call:nil; + sy_name:'sys_getrusage' + ), + (//[118] + sy_narg:5; + sy_call:nil; + sy_name:'sys_getsockopt' + ), + (//[119] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[120] + sy_narg:3; + sy_call:nil; + sy_name:'sys_readv' + ), + (//[121] + sy_narg:3; + sy_call:nil; + sy_name:'sys_writev' + ), + (//[122] + sy_narg:2; + sy_call:nil; + sy_name:'sys_settimeofday' + ), + (//[123] + sy_narg:3; + sy_call:nil; + sy_name:'sys_fchown' + ), + (//[124] + sy_narg:2; + sy_call:nil; + sy_name:'sys_fchmod' + ), + (//[125] + sy_narg:3; + sy_call:nil; + sy_name:'sys_netgetiflist' + ), + (//[126] + sy_narg:2; + sy_call:nil; + sy_name:'sys_setreuid' + ), + (//[127] + sy_narg:2; + sy_call:nil; + sy_name:'sys_setregid' + ), + (//[128] + sy_narg:2; + sy_call:nil; + sy_name:'sys_rename' + ), + (//[129] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[130] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[131] + sy_narg:2; + sy_call:nil; + sy_name:'sys_flock' + ), + (//[132] + sy_narg:2; + sy_call:nil; + sy_name:'sys_mkfifo' + ), + (//[133] + sy_narg:6; + sy_call:nil; + sy_name:'sys_sendto' + ), + (//[134] + sy_narg:2; + sy_call:nil; + sy_name:'sys_shutdown' + ), + (//[135] + sy_narg:4; + sy_call:nil; + sy_name:'sys_socketpair' + ), + (//[136] + sy_narg:2; + sy_call:nil; + sy_name:'sys_mkdir' + ), + (//[137] + sy_narg:1; + sy_call:nil; + sy_name:'sys_rmdir' + ), + (//[138] + sy_narg:2; + sy_call:nil; + sy_name:'sys_utimes' + ), + (//[139] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[140] + sy_narg:2; + sy_call:nil; + sy_name:'sys_adjtime' + ), + (//[141] + sy_narg:1; + sy_call:nil; + sy_name:'sys_kqueueex' + ), + (//[142] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[143] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[144] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[145] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[146] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[147] + sy_narg:0; + sy_call:nil; + sy_name:'sys_setsid' + ), + (//[148] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[149] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[150] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[151] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[152] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[153] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[154] + sy_narg:4; + sy_call:@nosys; + sy_name:'lkmressys' + ), + (//[155] + sy_narg:2; + sy_call:@nosys; + sy_name:'lkmressys' + ), + (//[156] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[157] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[158] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[159] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[160] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[161] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[162] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[163] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[164] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[165] + sy_narg:2; + sy_call:nil; + sy_name:'sys_sysarch' + ), + (//[166] + sy_narg:3; + sy_call:nil; + sy_name:'sys_rtprio' + ), + (//[167] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[168] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[169] + sy_narg:5; + sy_call:@nosys; + sy_name:'lkmressys' + ), + (//[170] + sy_narg:6; + sy_call:@nosys; + sy_name:'lkmressys' + ), + (//[171] + sy_narg:4; + sy_call:@nosys; + sy_name:'lkmressys' + ), + (//[172] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[173] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[174] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[175] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[176] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[177] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[178] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[179] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[180] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[181] + sy_narg:1; + sy_call:nil; + sy_name:'sys_setgid' + ), + (//[182] + sy_narg:1; + sy_call:nil; + sy_name:'sys_setegid' + ), + (//[183] + sy_narg:1; + sy_call:nil; + sy_name:'sys_seteuid' + ), + (//[184] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[185] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[186] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[187] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[188] + sy_narg:2; + sy_call:nil; + sy_name:'sys_stat' + ), + (//[189] + sy_narg:2; + sy_call:nil; + sy_name:'sys_fstat' + ), + (//[190] + sy_narg:2; + sy_call:nil; + sy_name:'sys_lstat' + ), + (//[191] + sy_narg:2; + sy_call:nil; + sy_name:'sys_pathconf' + ), + (//[192] + sy_narg:2; + sy_call:nil; + sy_name:'sys_fpathconf' + ), + (//[193] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[194] + sy_narg:2; + sy_call:nil; + sy_name:'sys_getrlimit' + ), + (//[195] + sy_narg:2; + sy_call:nil; + sy_name:'sys_setrlimit' + ), + (//[196] + sy_narg:4; + sy_call:nil; + sy_name:'sys_getdirentries' + ), + (//[197] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[198] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[199] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[200] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[201] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[202] + sy_narg:6; + sy_call:nil; + sy_name:'sys___sysctl' + ), + (//[203] + sy_narg:2; + sy_call:nil; + sy_name:'sys_mlock' + ), + (//[204] + sy_narg:2; + sy_call:nil; + sy_name:'sys_munlock' + ), + (//[205] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[206] + sy_narg:2; + sy_call:nil; + sy_name:'sys_futimes' + ), + (//[207] + sy_narg:1; + sy_call:nil; + sy_name:'sys_getpgid' + ), + (//[208] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[209] + sy_narg:3; + sy_call:nil; + sy_name:'sys_poll' + ), + (//[210] + sy_narg:1; + sy_call:@nosys; + sy_name:'lkmnosys' + ), + (//[211] + sy_narg:1; + sy_call:@nosys; + sy_name:'lkmnosys' + ), + (//[212] + sy_narg:1; + sy_call:@nosys; + sy_name:'lkmnosys' + ), + (//[213] + sy_narg:1; + sy_call:@nosys; + sy_name:'lkmnosys' + ), + (//[214] + sy_narg:1; + sy_call:@nosys; + sy_name:'lkmnosys' + ), + (//[215] + sy_narg:1; + sy_call:@nosys; + sy_name:'lkmnosys' + ), + (//[216] + sy_narg:1; + sy_call:@nosys; + sy_name:'lkmnosys' + ), + (//[217] + sy_narg:1; + sy_call:@nosys; + sy_name:'lkmnosys' + ), + (//[218] + sy_narg:1; + sy_call:@nosys; + sy_name:'lkmnosys' + ), + (//[219] + sy_narg:1; + sy_call:@nosys; + sy_name:'lkmnosys' + ), + (//[220] + sy_narg:0; + sy_call:@nosys; + sy_name:'lkmressys' + ), + (//[221] + sy_narg:3; + sy_call:@nosys; + sy_name:'lkmressys' + ), + (//[222] + sy_narg:3; + sy_call:@nosys; + sy_name:'lkmressys' + ), + (//[223] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[224] + sy_narg:0; + sy_call:@nosys; + sy_name:'lkmressys' + ), + (//[225] + sy_narg:2; + sy_call:@nosys; + sy_name:'lkmressys' + ), + (//[226] + sy_narg:4; + sy_call:@nosys; + sy_name:'lkmressys' + ), + (//[227] + sy_narg:5; + sy_call:@nosys; + sy_name:'lkmressys' + ), + (//[228] + sy_narg:3; + sy_call:@nosys; + sy_name:'lkmressys' + ), + (//[229] + sy_narg:0; + sy_call:@nosys; + sy_name:'lkmressys' + ), + (//[230] + sy_narg:1; + sy_call:@nosys; + sy_name:'lkmressys' + ), + (//[231] + sy_narg:3; + sy_call:@nosys; + sy_name:'lkmressys' + ), + (//[232] + sy_narg:2; + sy_call:nil; + sy_name:'sys_clock_gettime' + ), + (//[233] + sy_narg:2; + sy_call:nil; + sy_name:'sys_clock_settime' + ), + (//[234] + sy_narg:2; + sy_call:nil; + sy_name:'sys_clock_getres' + ), + (//[235] + sy_narg:3; + sy_call:nil; + sy_name:'sys_ktimer_create' + ), + (//[236] + sy_narg:1; + sy_call:nil; + sy_name:'sys_ktimer_delete' + ), + (//[237] + sy_narg:4; + sy_call:nil; + sy_name:'sys_ktimer_settime' + ), + (//[238] + sy_narg:2; + sy_call:nil; + sy_name:'sys_ktimer_gettime' + ), + (//[239] + sy_narg:1; + sy_call:nil; + sy_name:'sys_ktimer_getoverrun' + ), + (//[240] + sy_narg:2; + sy_call:nil; + sy_name:'sys_nanosleep' + ), + (//[241] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[242] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[243] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[244] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[245] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[246] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[247] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[248] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[249] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[250] + sy_narg:3; + sy_call:nil; + sy_name:'sys_minherit' + ), + (//[251] + sy_narg:1; + sy_call:nil; + sy_name:'sys_rfork' + ), + (//[252] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[253] + sy_narg:0; + sy_call:nil; + sy_name:'sys_issetugid' + ), + (//[254] + sy_narg:3; + sy_call:nil; + sy_name:'sys_lchown' + ), + (//[255] + sy_narg:1; + sy_call:nil; + sy_name:'sys_aio_read' + ), + (//[256] + sy_narg:1; + sy_call:nil; + sy_name:'sys_aio_write' + ), + (//[257] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[258] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[259] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[260] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[261] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[262] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[263] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[264] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[265] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[266] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[267] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[268] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[269] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[270] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[271] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[272] + sy_narg:3; + sy_call:nil; + sy_name:'sys_getdents' + ), + (//[273] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[274] + sy_narg:2; + sy_call:nil; + sy_name:'sys_lchmod' + ), + (//[275] + sy_narg:3; + sy_call:nil; + sy_name:'sys_lchown' + ), + (//[276] + sy_narg:2; + sy_call:nil; + sy_name:'sys_lutimes' + ), + (//[277] + sy_narg:3; + sy_call:nil; + sy_name:'sys_msync' + ), + (//[278] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[279] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[280] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[281] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[282] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[283] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[284] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[285] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[286] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[287] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[288] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[289] + sy_narg:4; + sy_call:nil; + sy_name:'sys_preadv' + ), + (//[290] + sy_narg:4; + sy_call:nil; + sy_name:'sys_pwritev' + ), + (//[291] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[292] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[293] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[294] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[295] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[296] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[297] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[298] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[299] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[300] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[301] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[302] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[303] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[304] + sy_narg:1; + sy_call:@nosys; + sy_name:'sys_kldload' + ), + (//[305] + sy_narg:1; + sy_call:@nosys; + sy_name:'sys_kldunload' + ), + (//[306] + sy_narg:1; + sy_call:@nosys; + sy_name:'sys_kldfind' + ), + (//[307] + sy_narg:1; + sy_call:@nosys; + sy_name:'sys_kldnext' + ), + (//[308] + sy_narg:2; + sy_call:@nosys; + sy_name:'sys_kldstat' + ), + (//[309] + sy_narg:1; + sy_call:@nosys; + sy_name:'sys_kldfirstmod' + ), + (//[310] + sy_narg:1; + sy_call:nil; + sy_name:'sys_getsid' + ), + (//[311] + sy_narg:3; + sy_call:nil; + sy_name:'sys_setresuid' + ), + (//[312] + sy_narg:3; + sy_call:nil; + sy_name:'sys_setresgid' + ), + (//[313] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[314] + sy_narg:1; + sy_call:nil; + sy_name:'sys_aio_return' + ), + (//[315] + sy_narg:3; + sy_call:nil; + sy_name:'sys_aio_suspend' + ), + (//[316] + sy_narg:2; + sy_call:nil; + sy_name:'sys_aio_cancel' + ), + (//[317] + sy_narg:1; + sy_call:nil; + sy_name:'sys_aio_error' + ), + (//[318] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[319] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[320] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[321] + sy_narg:0; + sy_call:nil; + sy_name:'sys_yield' + ), + (//[322] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[323] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[324] + sy_narg:1; + sy_call:nil; + sy_name:'sys_mlockall' + ), + (//[325] + sy_narg:0; + sy_call:nil; + sy_name:'sys_munlockall' + ), + (//[326] + sy_narg:2; + sy_call:nil; + sy_name:'sys___getcwd' + ), + (//[327] + sy_narg:2; + sy_call:nil; + sy_name:'sys_sched_setparam' + ), + (//[328] + sy_narg:2; + sy_call:nil; + sy_name:'sys_sched_getparam' + ), + (//[329] + sy_narg:3; + sy_call:nil; + sy_name:'sys_sched_setscheduler' + ), + (//[330] + sy_narg:1; + sy_call:nil; + sy_name:'sys_sched_getscheduler' + ), + (//[331] + sy_narg:0; + sy_call:nil; + sy_name:'sys_sched_yield' + ), + (//[332] + sy_narg:1; + sy_call:nil; + sy_name:'sys_sched_get_priority_max' + ), + (//[333] + sy_narg:1; + sy_call:nil; + sy_name:'sys_sched_get_priority_min' + ), + (//[334] + sy_narg:2; + sy_call:nil; + sy_name:'sys_sched_rr_get_interval' + ), + (//[335] + sy_narg:2; + sy_call:nil; + sy_name:'sys_utrace' + ), + (//[336] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[337] + sy_narg:3; + sy_call:@nosys; + sy_name:'sys_kldsym' + ), + (//[338] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[339] + sy_narg:5; + sy_call:@nosys; + sy_name:'lkmressys' + ), + (//[340] + sy_narg:3; + sy_call:nil; + sy_name:'sys_sigprocmask' + ), + (//[341] + sy_narg:1; + sy_call:nil; + sy_name:'sys_sigsuspend' + ), + (//[342] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[343] + sy_narg:1; + sy_call:nil; + sy_name:'sys_sigpending' + ), + (//[344] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[345] + sy_narg:3; + sy_call:nil; + sy_name:'sys_sigtimedwait' + ), + (//[346] + sy_narg:2; + sy_call:nil; + sy_name:'sys_sigwaitinfo' + ), + (//[347] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[348] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[349] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[350] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[351] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[352] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[353] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[354] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[355] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[356] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[357] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[358] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[359] + sy_narg:2; + sy_call:nil; + sy_name:'sys_aio_waitcomplete' + ), + (//[360] + sy_narg:3; + sy_call:nil; + sy_name:'sys_getresuid' + ), + (//[361] + sy_narg:3; + sy_call:nil; + sy_name:'sys_getresgid' + ), + (//[362] + sy_narg:0; + sy_call:nil; + sy_name:'sys_kqueue' + ), + (//[363] + sy_narg:6; + sy_call:nil; + sy_name:'sys_kevent' + ), + (//[364] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[365] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[366] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[367] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[368] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[369] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[370] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[371] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[372] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[373] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[374] + sy_narg:1; + sy_call:@nosys; + sy_name:'sys___setugid' + ), + (//[375] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[376] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[377] + sy_narg:7; + sy_call:@nosys; + sy_name:'lkmressys' + ), + (//[378] + sy_narg:3; + sy_call:nil; + sy_name:'sys_nmount' + ), + (//[379] + sy_narg:4; + sy_call:nil; + sy_name:'sys_mtypeprotect' + ), + (//[380] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[381] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[382] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[383] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[384] + sy_narg:1; + sy_call:@nosys; + sy_name:'sys___mac_get_proc' + ), + (//[385] + sy_narg:1; + sy_call:@nosys; + sy_name:'sys___mac_set_proc' + ), + (//[386] + sy_narg:2; + sy_call:@nosys; + sy_name:'sys___mac_get_fd' + ), + (//[387] + sy_narg:2; + sy_call:@nosys; + sy_name:'sys___mac_get_file' + ), + (//[388] + sy_narg:2; + sy_call:@nosys; + sy_name:'sys___mac_set_fd' + ), + (//[389] + sy_narg:2; + sy_call:@nosys; + sy_name:'sys___mac_set_file' + ), + (//[390] + sy_narg:4; + sy_call:nil; + sy_name:'sys_kenv' + ), + (//[391] + sy_narg:2; + sy_call:nil; + sy_name:'sys_lchflags' + ), + (//[392] + sy_narg:2; + sy_call:nil; + sy_name:'sys_uuidgen' + ), + (//[393] + sy_narg:7; + sy_call:nil; + sy_name:'sys_sendfile' + ), + (//[394] + sy_narg:3; + sy_call:@nosys; + sy_name:'sys_mac_syscall' + ), + (//[395] + sy_narg:3; + sy_call:nil; + sy_name:'sys_getfsstat' + ), + (//[396] + sy_narg:2; + sy_call:nil; + sy_name:'sys_statfs' + ), + (//[397] + sy_narg:2; + sy_call:nil; + sy_name:'sys_fstatfs' + ), + (//[398] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[399] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[400] + sy_narg:1; + sy_call:nil; + sy_name:'sys_ksem_close' + ), + (//[401] + sy_narg:1; + sy_call:nil; + sy_name:'sys_ksem_post' + ), + (//[402] + sy_narg:1; + sy_call:nil; + sy_name:'sys_ksem_wait' + ), + (//[403] + sy_narg:1; + sy_call:nil; + sy_name:'sys_ksem_trywait' + ), + (//[404] + sy_narg:2; + sy_call:nil; + sy_name:'sys_ksem_init' + ), + (//[405] + sy_narg:5; + sy_call:nil; + sy_name:'sys_ksem_open' + ), + (//[406] + sy_narg:1; + sy_call:nil; + sy_name:'sys_ksem_unlink' + ), + (//[407] + sy_narg:2; + sy_call:nil; + sy_name:'sys_ksem_getvalue' + ), + (//[408] + sy_narg:1; + sy_call:nil; + sy_name:'sys_ksem_destroy' + ), + (//[409] + sy_narg:2; + sy_call:@nosys; + sy_name:'sys___mac_get_pid' + ), + (//[410] + sy_narg:2; + sy_call:@nosys; + sy_name:'sys___mac_get_link' + ), + (//[411] + sy_narg:2; + sy_call:@nosys; + sy_name:'sys___mac_set_link' + ), + (//[412] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[413] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[414] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[415] + sy_narg:4; + sy_call:@nosys; + sy_name:'sys___mac_execve' + ), + (//[416] + sy_narg:3; + sy_call:nil; + sy_name:'sys_sigaction' + ), + (//[417] + sy_narg:1; + sy_call:nil; + sy_name:'sys_sigreturn' + ), + (//[418] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[419] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[420] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[421] + sy_narg:1; + sy_call:nil; + sy_name:'sys_getcontext' + ), + (//[422] + sy_narg:1; + sy_call:nil; + sy_name:'sys_setcontext' + ), + (//[423] + sy_narg:2; + sy_call:nil; + sy_name:'sys_swapcontext' + ), + (//[424] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[425] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[426] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[427] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[428] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[429] + sy_narg:2; + sy_call:nil; + sy_name:'sys_sigwait' + ), + (//[430] + sy_narg:3; + sy_call:nil; + sy_name:'sys_thr_create' + ), + (//[431] + sy_narg:1; + sy_call:nil; + sy_name:'sys_thr_exit' + ), + (//[432] + sy_narg:1; + sy_call:nil; + sy_name:'sys_thr_self' + ), + (//[433] + sy_narg:2; + sy_call:nil; + sy_name:'sys_thr_kill' + ), + (//[434] + sy_narg:1; + sy_call:nil; + sy_name:'sys__umtx_lock' + ), + (//[435] + sy_narg:1; + sy_call:nil; + sy_name:'sys__umtx_unlock' + ), + (//[436] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[437] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[438] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[439] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[440] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[441] + sy_narg:2; + sy_call:nil; + sy_name:'sys_ksem_timedwait' + ), + (//[442] + sy_narg:1; + sy_call:nil; + sy_name:'sys_thr_suspend' + ), + (//[443] + sy_narg:1; + sy_call:nil; + sy_name:'sys_thr_wake' + ), + (//[444] + sy_narg:2; + sy_call:@nosys; + sy_name:'sys_kldunloadf' + ), + (//[445] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[446] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[447] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[448] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[449] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[450] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[451] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[452] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[453] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[454] + sy_narg:5; + sy_call:nil; + sy_name:'sys__umtx_op' + ), + (//[455] + sy_narg:2; + sy_call:nil; + sy_name:'sys_thr_new' + ), + (//[456] + sy_narg:3; + sy_call:nil; + sy_name:'sys_sigqueue' + ), + (//[457] + sy_narg:4; + sy_call:@nosys; + sy_name:'lkmressys' + ), + (//[458] + sy_narg:3; + sy_call:@nosys; + sy_name:'lkmressys' + ), + (//[459] + sy_narg:5; + sy_call:@nosys; + sy_name:'lkmressys' + ), + (//[460] + sy_narg:5; + sy_call:@nosys; + sy_name:'lkmressys' + ), + (//[461] + sy_narg:2; + sy_call:@nosys; + sy_name:'lkmressys' + ), + (//[462] + sy_narg:1; + sy_call:@nosys; + sy_name:'lkmressys' + ), + (//[463] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[464] + sy_narg:2; + sy_call:nil; + sy_name:'sys_thr_set_name' + ), + (//[465] + sy_narg:2; + sy_call:nil; + sy_name:'sys_aio_fsync' + ), + (//[466] + sy_narg:3; + sy_call:nil; + sy_name:'sys_rtprio_thread' + ), + (//[467] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[468] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[469] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[470] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[471] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[472] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[473] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[474] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[475] + sy_narg:4; + sy_call:nil; + sy_name:'sys_pread' + ), + (//[476] + sy_narg:4; + sy_call:nil; + sy_name:'sys_pwrite' + ), + (//[477] + sy_narg:6; + sy_call:nil; + sy_name:'sys_mmap' + ), + (//[478] + sy_narg:3; + sy_call:nil; + sy_name:'sys_lseek' + ), + (//[479] + sy_narg:2; + sy_call:nil; + sy_name:'sys_truncate' + ), + (//[480] + sy_narg:2; + sy_call:nil; + sy_name:'sys_ftruncate' + ), + (//[481] + sy_narg:3; + sy_call:nil; + sy_name:'sys_thr_kill2' + ), + (//[482] + sy_narg:3; + sy_call:nil; + sy_name:'sys_shm_open' + ), + (//[483] + sy_narg:1; + sy_call:nil; + sy_name:'sys_shm_unlink' + ), + (//[484] + sy_narg:1; + sy_call:nil; + sy_name:'sys_cpuset' + ), + (//[485] + sy_narg:3; + sy_call:nil; + sy_name:'sys_cpuset_setid' + ), + (//[486] + sy_narg:4; + sy_call:nil; + sy_name:'sys_cpuset_getid' + ), + (//[487] + sy_narg:5; + sy_call:nil; + sy_name:'sys_cpuset_getaffinity' + ), + (//[488] + sy_narg:5; + sy_call:nil; + sy_name:'sys_cpuset_setaffinity' + ), + (//[489] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[490] + sy_narg:4; + sy_call:nil; + sy_name:'sys_fchmodat' + ), + (//[491] + sy_narg:5; + sy_call:nil; + sy_name:'sys_fchownat' + ), + (//[492] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[493] + sy_narg:4; + sy_call:nil; + sy_name:'sys_fstatat' + ), + (//[494] + sy_narg:3; + sy_call:nil; + sy_name:'sys_futimesat' + ), + (//[495] + sy_narg:5; + sy_call:nil; + sy_name:'sys_linkat' + ), + (//[496] + sy_narg:3; + sy_call:nil; + sy_name:'sys_mkdirat' + ), + (//[497] + sy_narg:3; + sy_call:nil; + sy_name:'sys_mkfifoat' + ), + (//[498] + sy_narg:4; + sy_call:nil; + sy_name:'sys_mknodat' + ), + (//[499] + sy_narg:4; + sy_call:nil; + sy_name:'sys_openat' + ), + (//[500] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[501] + sy_narg:4; + sy_call:nil; + sy_name:'sys_renameat' + ), + (//[502] + sy_narg:3; + sy_call:nil; + sy_name:'sys_symlinkat' + ), + (//[503] + sy_narg:3; + sy_call:nil; + sy_name:'sys_unlinkat' + ), + (//[504] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[505] + sy_narg:1; + sy_call:@nosys; + sy_name:'lkmressys' + ), + (//[506] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[507] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[508] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[509] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[510] + sy_narg:4; + sy_call:@nosys; + sy_name:'lkmressys' + ), + (//[511] + sy_narg:3; + sy_call:@nosys; + sy_name:'lkmressys' + ), + (//[512] + sy_narg:3; + sy_call:@nosys; + sy_name:'lkmressys' + ), + (//[513] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[514] + sy_narg:2; + sy_call:@nosys; + sy_name:'sys_cap_new' + ), + (//[515] + sy_narg:2; + sy_call:@nosys; + sy_name:'sys_cap_getrights' + ), + (//[516] + sy_narg:0; + sy_call:@nosys; + sy_name:'sys_cap_enter' + ), + (//[517] + sy_narg:1; + sy_call:@nosys; + sy_name:'sys_cap_getmode' + ), + (//[518] + sy_narg:2; + sy_call:@nosys; + sy_name:'sys_pdfork' + ), + (//[519] + sy_narg:2; + sy_call:@nosys; + sy_name:'sys_pdkill' + ), + (//[520] + sy_narg:2; + sy_call:@nosys; + sy_name:'sys_pdgetpid' + ), + (//[521] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[522] + sy_narg:6; + sy_call:nil; + sy_name:'sys_pselect' + ), + (//[523] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[524] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[525] + sy_narg:4; + sy_call:@nosys; + sy_name:'sys_rctl_get_racct' + ), + (//[526] + sy_narg:4; + sy_call:@nosys; + sy_name:'sys_rctl_get_rules' + ), + (//[527] + sy_narg:4; + sy_call:@nosys; + sy_name:'sys_rctl_get_limits' + ), + (//[528] + sy_narg:4; + sy_call:@nosys; + sy_name:'sys_rctl_add_rule' + ), + (//[529] + sy_narg:4; + sy_call:@nosys; + sy_name:'sys_rctl_remove_rule' + ), + (//[530] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[531] + sy_narg:0; + sy_call:@nosys; + sy_name:'nosys' + ), + (//[532] + sy_narg:5; + sy_call:nil; + sy_name:'sys_regmgr_call' + ), + (//[533] + sy_narg:3; + sy_call:nil; + sy_name:'sys_jitshm_create' + ), + (//[534] + sy_narg:2; + sy_call:nil; + sy_name:'sys_jitshm_alias' + ), + (//[535] + sy_narg:4; + sy_call:nil; + sy_name:'sys_dl_get_list' + ), + (//[536] + sy_narg:3; + sy_call:nil; + sy_name:'sys_dl_get_info' + ), + (//[537] + sy_narg:1; + sy_call:@nosys; + sy_name:'sys_dl_notify_event' + ), + (//[538] + sy_narg:3; + sy_call:nil; + sy_name:'sys_evf_create' + ), + (//[539] + sy_narg:1; + sy_call:nil; + sy_name:'sys_evf_delete' + ), + (//[540] + sy_narg:1; + sy_call:nil; + sy_name:'sys_evf_open' + ), + (//[541] + sy_narg:1; + sy_call:nil; + sy_name:'sys_evf_close' + ), + (//[542] + sy_narg:5; + sy_call:nil; + sy_name:'sys_evf_wait' + ), + (//[543] + sy_narg:4; + sy_call:nil; + sy_name:'sys_evf_trywait' + ), + (//[544] + sy_narg:2; + sy_call:nil; + sy_name:'sys_evf_set' + ), + (//[545] + sy_narg:2; + sy_call:nil; + sy_name:'sys_evf_clear' + ), + (//[546] + sy_narg:3; + sy_call:nil; + sy_name:'sys_evf_cancel' + ), + (//[547] + sy_narg:2; + sy_call:nil; + sy_name:'sys_query_memory_protection' + ), + (//[548] + sy_narg:5; + sy_call:nil; + sy_name:'sys_batch_map' + ), + (//[549] + sy_narg:4; + sy_call:nil; + sy_name:'sys_osem_create' + ), + (//[550] + sy_narg:1; + sy_call:nil; + sy_name:'sys_osem_delete' + ), + (//[551] + sy_narg:1; + sy_call:nil; + sy_name:'sys_osem_open' + ), + (//[552] + sy_narg:1; + sy_call:nil; + sy_name:'sys_osem_close' + ), + (//[553] + sy_narg:3; + sy_call:nil; + sy_name:'sys_osem_wait' + ), + (//[554] + sy_narg:2; + sy_call:nil; + sy_name:'sys_osem_trywait' + ), + (//[555] + sy_narg:2; + sy_call:nil; + sy_name:'sys_osem_post' + ), + (//[556] + sy_narg:3; + sy_call:nil; + sy_name:'sys_osem_cancel' + ), + (//[557] + sy_narg:3; + sy_call:nil; + sy_name:'sys_namedobj_create' + ), + (//[558] + sy_narg:2; + sy_call:nil; + sy_name:'sys_namedobj_delete' + ), + (//[559] + sy_narg:1; + sy_call:nil; + sy_name:'sys_set_vm_container' + ), + (//[560] + sy_narg:1; + sy_call:nil; + sy_name:'sys_debug_init' + ), + (//[561] + sy_narg:1; + sy_call:nil; + sy_name:'sys_suspend_process' + ), + (//[562] + sy_narg:1; + sy_call:nil; + sy_name:'sys_resume_process' + ), + (//[563] + sy_narg:1; + sy_call:nil; + sy_name:'sys_opmc_enable' + ), + (//[564] + sy_narg:1; + sy_call:nil; + sy_name:'sys_opmc_disable' + ), + (//[565] + sy_narg:3; + sy_call:nil; + sy_name:'sys_opmc_set_ctl' + ), + (//[566] + sy_narg:3; + sy_call:nil; + sy_name:'sys_opmc_set_ctr' + ), + (//[567] + sy_narg:3; + sy_call:nil; + sy_name:'sys_opmc_get_ctr' + ), + (//[568] + sy_narg:5; + sy_call:nil; + sy_name:'sys_budget_create' + ), + (//[569] + sy_narg:1; + sy_call:nil; + sy_name:'sys_budget_delete' + ), + (//[570] + sy_narg:3; + sy_call:nil; + sy_name:'sys_budget_get' + ), + (//[571] + sy_narg:1; + sy_call:nil; + sy_name:'sys_budget_set' + ), + (//[572] + sy_narg:4; + sy_call:nil; + sy_name:'sys_virtual_query' + ), + (//[573] + sy_narg:3; + sy_call:nil; + sy_name:'sys_mdbg_call' + ), + (//[574] + sy_narg:2; + sy_call:@nosys; + sy_name:'sys_sblock_create' + ), + (//[575] + sy_narg:1; + sy_call:@nosys; + sy_name:'sys_sblock_delete' + ), + (//[576] + sy_narg:1; + sy_call:@nosys; + sy_name:'sys_sblock_enter' + ), + (//[577] + sy_narg:1; + sy_call:@nosys; + sy_name:'sys_sblock_exit' + ), + (//[578] + sy_narg:1; + sy_call:@nosys; + sy_name:'sys_sblock_xenter' + ), + (//[579] + sy_narg:1; + sy_call:@nosys; + sy_name:'sys_sblock_xexit' + ), + (//[580] + sy_narg:2; + sy_call:@nosys; + sy_name:'sys_eport_create' + ), + (//[581] + sy_narg:1; + sy_call:@nosys; + sy_name:'sys_eport_delete' + ), + (//[582] + sy_narg:2; + sy_call:@nosys; + sy_name:'sys_eport_trigger' + ), + (//[583] + sy_narg:1; + sy_call:@nosys; + sy_name:'sys_eport_open' + ), + (//[584] + sy_narg:1; + sy_call:@nosys; + sy_name:'sys_eport_close' + ), + (//[585] + sy_narg:0; + sy_call:nil; + sy_name:'sys_is_in_sandbox' + ), + (//[586] + sy_narg:1; + sy_call:nil; + sy_name:'sys_dmem_container' + ), + (//[587] + sy_narg:2; + sy_call:nil; + sy_name:'sys_get_authinfo' + ), + (//[588] + sy_narg:3; + sy_call:nil; + sy_name:'sys_mname' + ), + (//[589] + sy_narg:6; + sy_call:@nosys; + sy_name:'sys_dynlib_dlopen' + ), + (//[590] + sy_narg:1; + sy_call:@nosys; + sy_name:'sys_dynlib_dlclose' + ), + (//[591] + sy_narg:3; + sy_call:nil; + sy_name:'sys_dynlib_dlsym' + ), + (//[592] + sy_narg:3; + sy_call:nil; + sy_name:'sys_dynlib_get_list' + ), + (//[593] + sy_narg:2; + sy_call:nil; + sy_name:'sys_dynlib_get_info' + ), + (//[594] + sy_narg:4; + sy_call:nil; + sy_name:'sys_dynlib_load_prx' + ), + (//[595] + sy_narg:3; + sy_call:nil; + sy_name:'sys_dynlib_unload_prx' + ), + (//[596] + sy_narg:0; + sy_call:nil; + sy_name:'sys_dynlib_do_copy_relocations' + ), + (//[597] + sy_narg:3; + sy_call:@nosys; + sy_name:'sys_dynlib_prepare_dlclose' + ), + (//[598] + sy_narg:2; + sy_call:nil; + sy_name:'sys_dynlib_get_proc_param' + ), + (//[599] + sy_narg:0; + sy_call:nil; + sy_name:'sys_dynlib_process_needed_and_relocate' + ), + (//[600] + sy_narg:1; + sy_call:nil; + sy_name:'sys_sandbox_path' + ), + (//[601] + sy_narg:3; + sy_call:nil; + sy_name:'sys_mdbg_service' + ), + (//[602] + sy_narg:3; + sy_call:nil; + sy_name:'sys_randomized_path' + ), + (//[603] + sy_narg:2; + sy_call:nil; + sy_name:'sys_rdup' + ), + (//[604] + sy_narg:5; + sy_call:nil; + sy_name:'sys_dl_get_metadata' + ), + (//[605] + sy_narg:1; + sy_call:nil; + sy_name:'sys_workaround8849' + ), + (//[606] + sy_narg:0; + sy_call:nil; + sy_name:'sys_is_development_mode' + ), + (//[607] + sy_narg:2; + sy_call:nil; + sy_name:'sys_get_self_auth_info' + ), + (//[608] + sy_narg:3; + sy_call:nil; + sy_name:'sys_dynlib_get_info_ex' + ), + (//[609] + sy_narg:0; + sy_call:nil; + sy_name:'sys_budget_getid' + ), + (//[610] + sy_narg:1; + sy_call:nil; + sy_name:'sys_budget_get_ptype' + ), + (//[611] + sy_narg:3; + sy_call:nil; + sy_name:'sys_get_paging_stats_of_all_threads' + ), + (//[612] + sy_narg:1; + sy_call:nil; + sy_name:'sys_get_proc_type_info' + ), + (//[613] + sy_narg:3; + sy_call:nil; + sy_name:'sys_get_resident_count' + ), + (//[614] + sy_narg:1; + sy_call:nil; + sy_name:'sys_prepare_to_suspend_process' + ), + (//[615] + sy_narg:3; + sy_call:nil; + sy_name:'sys_get_resident_fmem_count' + ), + (//[616] + sy_narg:2; + sy_call:nil; + sy_name:'sys_thr_get_name' + ), + (//[617] + sy_narg:1; + sy_call:nil; + sy_name:'sys_set_gpo' + ), + (//[618] + sy_narg:3; + sy_call:nil; + sy_name:'sys_get_paging_stats_of_all_objects' + ), + (//[619] + sy_narg:5; + sy_call:@nosys; + sy_name:'sys_test_debug_rwmem' + ), + (//[620] + sy_narg:0; + sy_call:nil; + sy_name:'sys_free_stack' + ), + (//[621] + sy_narg:1; + sy_call:nil; + sy_name:'sys_suspend_system' + ), + (//[622] + sy_narg:6; + sy_call:nil; + sy_name:'sys_ipmimgr_call' + ), + (//[623] + sy_narg:1; + sy_call:nil; + sy_name:'sys_get_gpo' + ), + (//[624] + sy_narg:0; + sy_call:nil; + sy_name:'sys_get_vm_map_timestamp' + ), + (//[625] + sy_narg:4; + sy_call:nil; + sy_name:'sys_opmc_set_hw' + ), + (//[626] + sy_narg:5; + sy_call:nil; + sy_name:'sys_opmc_get_hw' + ), + (//[627] + sy_narg:2; + sy_call:nil; + sy_name:'sys_get_cpu_usage_all' + ), + (//[628] + sy_narg:6; + sy_call:nil; + sy_name:'sys_mmap_dmem' + ), + (//[629] + sy_narg:4; + sy_call:nil; + sy_name:'sys_physhm_open' + ), + (//[630] + sy_narg:1; + sy_call:nil; + sy_name:'sys_physhm_unlink' + ), + (//[631] + sy_narg:0; + sy_call:nil; + sy_name:'sys_resume_internal_hdd' + ), + (//[632] + sy_narg:1; + sy_call:nil; + sy_name:'sys_thr_suspend_ucontext' + ), + (//[633] + sy_narg:1; + sy_call:nil; + sy_name:'sys_thr_resume_ucontext' + ), + (//[634] + sy_narg:2; + sy_call:nil; + sy_name:'sys_thr_get_ucontext' + ), + (//[635] + sy_narg:2; + sy_call:@nosys; + sy_name:'sys_thr_set_ucontext' + ), + (//[636] + sy_narg:2; + sy_call:nil; + sy_name:'sys_set_timezone_info' + ), + (//[637] + sy_narg:2; + sy_call:nil; + sy_name:'sys_set_phys_fmem_limit' + ), + (//[638] + sy_narg:4; + sy_call:nil; + sy_name:'sys_utc_to_localtime' + ), + (//[639] + sy_narg:5; + sy_call:nil; + sy_name:'sys_localtime_to_utc' + ), + (//[640] + sy_narg:8; + sy_call:@nzero; + sy_name:'sys_set_uevt' + ), + (//[641] + sy_narg:2; + sy_call:nil; + sy_name:'sys_get_cpu_usage_proc' + ), + (//[642] + sy_narg:4; + sy_call:nil; + sy_name:'sys_get_map_statistics' + ), + (//[643] + sy_narg:1; + sy_call:nil; + sy_name:'sys_set_chicken_switches' + ), + (//[644] + sy_narg:0; + sy_call:@nosys; + sy_name:'sys_extend_page_table_pool' + ), + (//[645] + sy_narg:0; + sy_call:@nosys; + sy_name:'sys_extend_page_table_pool2' + ), + (//[646] + sy_narg:1; + sy_call:nil; + sy_name:'sys_get_kernel_mem_statistics' + ), + (//[647] + sy_narg:1; + sy_call:nil; + sy_name:'sys_get_sdk_compiled_version' + ), + (//[648] + sy_narg:1; + sy_call:nil; + sy_name:'sys_app_state_change' + ), + (//[649] + sy_narg:3; + sy_call:nil; + sy_name:'sys_dynlib_get_obj_member' + ), + (//[650] + sy_narg:1; + sy_call:nil; + sy_name:'sys_budget_get_ptype_of_budget' + ), + (//[651] + sy_narg:1; + sy_call:nil; + sy_name:'sys_prepare_to_resume_process' + ), + (//[652] + sy_narg:2; + sy_call:nil; + sy_name:'sys_process_terminate' + ), + (//[653] + sy_narg:1; + sy_call:nil; + sy_name:'sys_blockpool_open' + ), + (//[654] + sy_narg:5; + sy_call:nil; + sy_name:'sys_blockpool_map' + ), + (//[655] + sy_narg:3; + sy_call:nil; + sy_name:'sys_blockpool_unmap' + ), + (//[656] + sy_narg:2; + sy_call:nil; + sy_name:'sys_dynlib_get_info_for_libdbg' + ), + (//[657] + sy_narg:4; + sy_call:nil; + sy_name:'sys_blockpool_batch' + ), + (//[658] + sy_narg:1; + sy_call:nil; + sy_name:'sys_fdatasync' + ), + (//[659] + sy_narg:3; + sy_call:nil; + sy_name:'sys_dynlib_get_list2' + ), + (//[660] + sy_narg:2; + sy_call:nil; + sy_name:'sys_dynlib_get_info2' + ), + (//[661] + sy_narg:4; + sy_call:@nosys; + sy_name:'sys_aio_submit' + ), + (//[662] + sy_narg:3; + sy_call:nil; + sy_name:'sys_aio_multi_delete' + ), + (//[663] + sy_narg:5; + sy_call:nil; + sy_name:'sys_aio_multi_wait' + ), + (//[664] + sy_narg:3; + sy_call:nil; + sy_name:'sys_aio_multi_poll' + ), + (//[665] + sy_narg:2; + sy_call:@nosys; + sy_name:'sys_aio_get_data' + ), + (//[666] + sy_narg:3; + sy_call:nil; + sy_name:'sys_aio_multi_cancel' + ), + (//[667] + sy_narg:2; + sy_call:nil; + sy_name:'sys_get_bio_usage_all' + ), + (//[668] + sy_narg:2; + sy_call:@nosys; + sy_name:'sys_aio_create' + ), + (//[669] + sy_narg:5; + sy_call:nil; + sy_name:'sys_aio_submit_cmd' + ), + (//[670] + sy_narg:4; + sy_call:nil; + sy_name:'sys_aio_init' + ), + (//[671] + sy_narg:4; + sy_call:nil; + sy_name:'sys_get_page_table_stats' + ), + (//[672] + sy_narg:3; + sy_call:nil; + sy_name:'sys_dynlib_get_list_for_libdbg' + ), + (//[673] + sy_narg:4; + sy_call:nil; + sy_name:'sys_blockpool_move' + ), + (//[674] + sy_narg:5; + sy_call:nil; + sy_name:'sys_virtual_query_all' + ), + (//[675] + sy_narg:2; + sy_call:nil; + sy_name:'sys_reserve_2mb_page' + ), + (//[676] + sy_narg:0; + sy_call:nil; + sy_name:'sys_cpumode_yield' + ), + (//[677] + sy_narg:2; + sy_call:nil; + sy_name:'sys_get_phys_page_size' + ) + ); + +implementation + +const + ENOSYS =78; + ENOTSUP=45; + +function nosys:Integer; +begin + Result:=ENOSYS; +end; + +function nosup:Integer; +begin + Result:=ENOTSUP; +end; + +function nzero:Integer; +begin + Result:=0; +end; + +end. + diff --git a/tools/syscalls_gen/syscalls_gen.lpi b/tools/syscalls_gen/syscalls_gen.lpi new file mode 100644 index 00000000..53d0e7a9 --- /dev/null +++ b/tools/syscalls_gen/syscalls_gen.lpi @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + <UseAppBundle Value="False"/> + <ResourceType Value="res"/> + </General> + <BuildModes> + <Item Name="Default" Default="True"/> + </BuildModes> + <PublishOptions> + <Version Value="2"/> + <UseFileFilters Value="True"/> + </PublishOptions> + <RunParams> + <FormatVersion Value="2"/> + </RunParams> + <Units> + <Unit> + <Filename Value="syscalls_gen.lpr"/> + <IsPartOfProject Value="True"/> + </Unit> + </Units> + </ProjectOptions> + <CompilerOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <Target> + <Filename Value="syscalls_gen"/> + </Target> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)"/> + <OtherUnitFiles Value="$(LazarusDir)\components\mpaslex"/> + <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Linking> + <Debugging> + <DebugInfoType Value="dsDwarf3"/> + </Debugging> + </Linking> + </CompilerOptions> + <Debugging> + <Exceptions> + <Item> + <Name Value="EAbort"/> + </Item> + <Item> + <Name Value="ECodetoolError"/> + </Item> + <Item> + <Name Value="EFOpenError"/> + </Item> + </Exceptions> + </Debugging> +</CONFIG> diff --git a/tools/syscalls_gen/syscalls_gen.lpr b/tools/syscalls_gen/syscalls_gen.lpr new file mode 100644 index 00000000..b61694f1 --- /dev/null +++ b/tools/syscalls_gen/syscalls_gen.lpr @@ -0,0 +1,398 @@ + + +uses + Classes, + SysUtils, + gset, + mpaslex, + _sysent; + +type + TRawStrCompare=class + class function c(var a,b:RawByteString):boolean; static; + end; + TRawStrSet=specialize TSet<RawByteString,TRawStrCompare>; + +class function TRawStrCompare.c(var a,b:RawByteString):boolean; +var + count1,count2:SizeInt; +begin + Count1:=Length(a); + Count2:=Length(b); + Result:=(Count1<Count2) or ( + (Count1=Count2) and (CompareMemRange(PChar(a),PChar(b),Count1)<0) + ); +end; + +var + Exclude:TRawStrSet; + Sysentu:TRawStrSet; + FileList:TStringList; + +Procedure AddExclude(const s:RawByteString); +begin + Exclude.Insert(lowercase(Trim(s))); +end; + +Function IsExclude(const s:RawByteString):Boolean; +begin + Result:=(Exclude.NFind(lowercase(Trim(s)))<>nil); +end; + +type + TState=(sNone,sNameFunc,sBeforeParam,sParamName,sParamType,sAfterParam,sReturn,sEndFunc,sError); + +type + TFuncDecl=class(TStringList) + public + funit:RawByteString; + fhead:RawByteString; + fname:RawByteString; + fretv:RawByteString; + end; + +var + sysent_maxlen:Integer=0; + sysent_func:array[0..high(sysent_table)] of TFuncDecl; + +procedure AddSysFunc(f:TFuncDecl); +var + i:Integer; + s:Boolean; +begin + s:=False; + For i:=0 to high(sysent_table) do + begin + if (lowercase(sysent_table[i].sy_name)=lowercase(f.fname)) then + begin + if (sysent_func[i]<>nil) then + begin + Writeln('Collision[',i:3,']:',f.fname,' prev unit:',sysent_func[i].funit,' new unit:',f.funit); + end else + begin + Writeln('Found[',i:3,']:',f.fname:sysent_maxlen,' in unit:',f.funit); + sysent_func[i]:=f; + s:=True; + end; + end; + end; + if not s then + begin + FreeAndNil(f); + end; +end; + +Procedure load_pas(const fname:RawByteString); +var + F:THandle; + size:Int64; + buf:PChar; + + state:TState; + + i:Integer; + + token:RawByteString; + + FuncDecl:TFuncDecl; + + procedure add_to_param(S:RawByteString); + begin + S:=Trim(S); + if (S='') then S:=' '; + token:=Trim(token)+S; + end; + +begin + if (fname='') then Exit; + + F:=FileOpen(fname,fmOpenRead or fmShareDenyNone); + if (F=feInvalidHandle) then + begin + Writeln('Error open file:',fname); + Exit; + end; + + size:=FileSeek(F,0,fsFromEnd); + FileSeek(F,0,fsFromBeginning); + + buf:=AllocMem(size+1); + + FileRead(F,buf^,size); + + mwPasLex.Origin:=buf; + + FuncDecl:=nil; + state:=sNone; + + while (mwPasLex.RunPos<size) do + begin + mwPasLex.Next; + Case mwPasLex.TokenID of + tkInterface:Break; + else; + end; + end; + + while (mwPasLex.RunPos<size) do + begin + + case state of + sParamName, + sParamType, + sReturn :mwPasLex.Next; + else + mwPasLex.NextNoJunk; + end; + + Case mwPasLex.TokenID of + tkImplementation:Break; + else; + end; + + case state of + sNone: + begin + Case mwPasLex.TokenID of + tkProcedure, + tkFunction : + begin + FuncDecl:=TFuncDecl.Create; + FuncDecl.NameValueSeparator:=':'; + + FuncDecl.funit:=ChangeFileExt(ExtractFileName(fname),''); + FuncDecl.fhead:=mwPasLex.Token; + + state:=sNameFunc; + end; + else; + end; + end; + sNameFunc: + begin + //Writeln(mwPasLex.TokenID); + Case mwPasLex.TokenID of + tkIdentifier : + begin + token:=mwPasLex.Token; + if (LowerCase(Copy(token,1,4))='sys_') then + begin + FuncDecl.fname:=token; + token:=''; + state:=sBeforeParam; + end else + begin + state:=sError; + end; + end + else + state:=sError; + end; + end; + sBeforeParam: + begin + Case mwPasLex.TokenID of + tkRoundOpen:state:=sParamName; + tkColon : + begin + token:=''; + state:=sReturn; + end; + tkSemiColon:state:=sEndFunc; + else; + state:=sError; + end; + end; + sParamName: + begin + //Writeln(mwPasLex.TokenID,':*',mwPasLex.Token,'*'); + Case mwPasLex.TokenID of + tkColon : + begin + state:=sParamType; + add_to_param(mwPasLex.Token); + end; + tkRoundClose:state:=sAfterParam; + else + add_to_param(mwPasLex.Token); + end; + end; + sParamType: + begin + //Writeln(mwPasLex.TokenID,':*',mwPasLex.Token,'*'); + Case mwPasLex.TokenID of + tkSemiColon : + begin + FuncDecl.Add(token); + token:=''; + state:=sParamName; + end; + tkRoundClose: + begin + FuncDecl.Add(token); + token:=''; + state:=sAfterParam; + end; + else + add_to_param(mwPasLex.Token); + end; + end; + sAfterParam: + begin + Case mwPasLex.TokenID of + tkColon: + begin + token:=''; + state:=sReturn; + end; + tkSemiColon:state:=sEndFunc; + else; + state:=sError; + end; + end; + sReturn: + begin + Case mwPasLex.TokenID of + tkSemiColon: + begin + FuncDecl.fretv:=token; + token:=''; + state:=sEndFunc; + end; + else + add_to_param(mwPasLex.Token); + end; + end; + else; + end; + + case state of + sError: + begin + state:=sNone; + FreeAndNil(FuncDecl); + end; + sEndFunc: + begin + state:=sNone; + + if (Sysentu.NFind(lowercase(FuncDecl.fname))<>nil) then + begin + AddSysFunc(FuncDecl); + FuncDecl:=nil; + { + Write(FuncDecl.fhead,' ',FuncDecl.fname,'('); + if (FuncDecl.Count<>0) then + For i:=0 to FuncDecl.Count-1 do + begin + Write(FuncDecl.Strings[i]); + if (i<>FuncDecl.Count-1) then + begin + Write(';'); + end; + end; + Write(')'); + + if (FuncDecl.fretv<>'') then + begin + Write(':',FuncDecl.fretv); + end; + Writeln(';'); + } + end; + + end; + else; + end; + + end; + + FreeMem(buf); + FileClose(F); +end; + +procedure LoadRecrusive(const basep,reltv:RawByteString); +Var + Info:TSearchRec; + f:RawByteString; +begin + f:=IncludeTrailingPathDelimiter(IncludeTrailingPathDelimiter(basep)+reltv); + If FindFirst(f+'*',faDirectory,Info)=0 then + begin + Repeat + Case Info.Name of + '.','..':; + else + if not IsExclude(Info.Name) then + begin + If ((Info.Attr and faDirectory)<>0) then + begin + LoadRecrusive(basep,IncludeTrailingPathDelimiter(reltv)+Info.Name); + end else + if (lowercase(ExtractFileExt(Info.Name))='.pas') then + begin + FileList.Add(IncludeTrailingPathDelimiter(reltv)+Info.Name); + //Writeln(IncludeTrailingPathDelimiter(reltv)+Info.Name); + load_pas(basep+IncludeTrailingPathDelimiter(reltv)+Info.Name); + end; + end; + end; + Until FindNext(info)<>0; + FindClose(Info); + end; +end; + +procedure LoadSysent; +var + i:Integer; +begin + For i:=0 to high(sysent_table) do + begin + if (sysent_table[i].sy_call=nil) then + begin + if Length(sysent_table[i].sy_name)>sysent_maxlen then sysent_maxlen:=Length(sysent_table[i].sy_name); + Sysentu.Insert(lowercase(sysent_table[i].sy_name)); + end; + end; +end; + +procedure LoadStats; +var + i:Integer; + f,n:Integer; +begin + f:=0; + n:=0; + For i:=0 to high(sysent_table) do + begin + if (sysent_table[i].sy_call=nil) then + begin + if (sysent_func[i]<>nil) then + begin + Inc(f); + end else + begin + Writeln('Not found[',i:3,']:',sysent_table[i].sy_name:sysent_maxlen); + Inc(n); + end; + end; + end; + Writeln('syscalls status:',f,'/',f+n,':%',(f/(f+n))*100:0:2); +end; + +begin + mwPasLex:=TmwPasLex.Create; + Exclude:=TRawStrSet.Create; + Sysentu:=TRawStrSet.Create; + FileList:=TStringList.Create; + + AddExclude('backup'); + + LoadSysent; + LoadRecrusive('..\..\sys',''); + + LoadStats; + + readln; +end. +