mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-13 12:49:20 +02:00
* implemented most syscalls, except readdir because the getdents
syscall is declared obsolete in Darwin...
This commit is contained in:
parent
13857b04fb
commit
71a7fb486a
408
rtl/darwin/syscalls.inc
Normal file
408
rtl/darwin/syscalls.inc
Normal file
@ -0,0 +1,408 @@
|
||||
{
|
||||
$Id$
|
||||
This file is part of the Free Pascal run time library.
|
||||
Copyright (c) 1999-2000 by Michael Van Canneyt,
|
||||
member of the Free Pascal development team.
|
||||
|
||||
See the file COPYING.FPC, included in this distribution,
|
||||
for details about the copyright.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
**********************************************************************}
|
||||
|
||||
{Darwin version of the syscalls required to implement SysLinux.}
|
||||
|
||||
{No debugging for syslinux include !}
|
||||
{$IFDEF SYS_LINUX}
|
||||
{$UNDEF SYSCALL_DEBUG}
|
||||
{$ENDIF SYS_LINUX}
|
||||
|
||||
{*****************************************************************************
|
||||
--- Main:The System Call Self ---
|
||||
*****************************************************************************}
|
||||
|
||||
Procedure Do_SysCall( callnr:longint;var regs : SysCallregs );assembler;
|
||||
{
|
||||
This function puts the registers in place, does the call, and then
|
||||
copies back the registers as they are after the SysCall.
|
||||
}
|
||||
{$ifdef powerpc}
|
||||
{$define fpc_syscall_ok}
|
||||
asm
|
||||
{ load the registers... }
|
||||
lwz r5, 12(r4)
|
||||
lwz r6, 16(r4)
|
||||
lwz r7, 20(r4)
|
||||
lwz r8, 24(r4)
|
||||
lwz r9, 28(r4)
|
||||
mr r0, r3
|
||||
lwz r3, 4(r4)
|
||||
stw r4, regs
|
||||
lwz r4, 8(r4)
|
||||
{ Go ! }
|
||||
sc
|
||||
{ Put back the registers... }
|
||||
lwz r8, regs
|
||||
stw r3, 4(r8)
|
||||
stw r4, 8(r8)
|
||||
stw r5, 12(r8)
|
||||
stw r6, 16(r8)
|
||||
stw r7, 20(r8)
|
||||
end;
|
||||
{$endif powerpc}
|
||||
{$ifndef fpc_syscall_ok}
|
||||
{$error Cannot decide which processor you have!}
|
||||
asm
|
||||
end;
|
||||
{$endif not fpc_syscall_ok}
|
||||
|
||||
|
||||
{$IFDEF SYSCALL_DEBUG}
|
||||
Const
|
||||
DoSysCallDebug : Boolean = False;
|
||||
|
||||
var
|
||||
LastCnt,
|
||||
LastR0,
|
||||
LastCall : longint;
|
||||
DebugTxt : string[20];
|
||||
{$ENDIF}
|
||||
Function SysCall( callnr:longint;var regs : SysCallregs ):longint;
|
||||
{
|
||||
This function serves as an interface to do_SysCall.
|
||||
If the SysCall returned a negative number, it returns -1, and puts the
|
||||
SysCall result in errno. Otherwise, it returns the SysCall return value
|
||||
}
|
||||
begin
|
||||
do_SysCall(callnr,regs);
|
||||
if regs.reg1<0 then
|
||||
begin
|
||||
{$IFDEF SYSCALL_DEBUG}
|
||||
If DoSysCallDebug then
|
||||
debugtxt:=' syscall error: ';
|
||||
{$endif}
|
||||
ErrNo:=-regs.reg1;
|
||||
SysCall:=-1;
|
||||
end
|
||||
else
|
||||
begin
|
||||
{$IFDEF SYSCALL_DEBUG}
|
||||
if DoSysCallDebug then
|
||||
debugtxt:=' syscall returned: ';
|
||||
{$endif}
|
||||
SysCall:=regs.reg1;
|
||||
errno:=0
|
||||
end;
|
||||
{$IFDEF SYSCALL_DEBUG}
|
||||
if DoSysCallDebug then
|
||||
begin
|
||||
inc(lastcnt);
|
||||
if (callnr<>lastcall) or (regs.reg1<>lastR0) then
|
||||
begin
|
||||
if lastcnt>1 then
|
||||
writeln(sys_nr_txt[lastcall],debugtxt,lasteax,' (',lastcnt,'x)');
|
||||
lastcall:=callnr;
|
||||
lasteax:=regs.reg1;
|
||||
lastcnt:=0;
|
||||
writeln(sys_nr_txt[lastcall],debugtxt,lasteax);
|
||||
end;
|
||||
end;
|
||||
{$endif}
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Function Sys_Time:longint;
|
||||
|
||||
VAR tv : timeval;
|
||||
tz : timezone;
|
||||
retval : longint;
|
||||
|
||||
begin
|
||||
Retval:=do_syscall(116,longint(@tv),longint(@tz));
|
||||
If retval=-1 then
|
||||
sys_time:=-1
|
||||
else
|
||||
sys_time:=tv.sec;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Function Sys_Time:longint;
|
||||
var
|
||||
tv : timeval;
|
||||
tz : timezone;
|
||||
regs : SysCallregs;
|
||||
retval: longint;
|
||||
begin
|
||||
regs.reg2:=@tv;
|
||||
regs.reg3:=@tz;
|
||||
retval:=SysCall(SYS_gettimeofday,regs);
|
||||
if retval = -1 then
|
||||
Sys_Time := -1
|
||||
else
|
||||
Sys_Time := tv.sec;
|
||||
end;
|
||||
|
||||
{*****************************************************************************
|
||||
--- File:File handling related calls ---
|
||||
*****************************************************************************}
|
||||
|
||||
|
||||
Function Sys_Open(f:pchar;flags:longint;mode:integer):longint;
|
||||
var
|
||||
regs : SysCallregs;
|
||||
Begin
|
||||
regs.reg2:=longint(f);
|
||||
regs.reg3:=flags;
|
||||
regs.reg4:=mode;
|
||||
Sys_Open:=SysCall(SysCall_nr_open,regs);
|
||||
End;
|
||||
|
||||
|
||||
Function Sys_Close(f:longint):longint;
|
||||
var
|
||||
regs : SysCallregs;
|
||||
begin
|
||||
regs.reg2:=f;
|
||||
Sys_Close:=SysCall(SysCall_nr_close,regs);
|
||||
end;
|
||||
|
||||
|
||||
Function Sys_Lseek(F:longint;Off:longint;Whence:longint):longint;
|
||||
var
|
||||
regs : SysCallregs;
|
||||
begin
|
||||
{Lseek's offset is 64-bit, the highword is the 0}
|
||||
regs.reg2:=f;
|
||||
{ strange, even on the PPC, the order of the low/high dword in the }
|
||||
{ registers is in "little endian" here (JM) }
|
||||
regs.reg3:=off;
|
||||
regs.reg4:=0;
|
||||
regs.reg5:=whence
|
||||
Sys_Lseek:=do_syscall(syscall_nr_lseek,regs);
|
||||
end;
|
||||
|
||||
|
||||
Function Sys_Read(f:longint;buffer:pchar;count:longint):longint;
|
||||
var
|
||||
regs : SysCallregs;
|
||||
begin
|
||||
regs.reg2:=f;
|
||||
regs.reg3:=longint(buffer);
|
||||
regs.reg4:=count;
|
||||
Sys_Read:=SysCall(SysCall_nr_read,regs);
|
||||
end;
|
||||
|
||||
|
||||
Function Sys_Write(f:longint;buffer:pchar;count:longint):longint;
|
||||
var
|
||||
regs : SysCallregs;
|
||||
begin
|
||||
regs.reg2:=f;
|
||||
regs.reg3:=longint(buffer);
|
||||
regs.reg4:=count;
|
||||
Sys_Write:=SysCall(SysCall_nr_write,regs);
|
||||
end;
|
||||
|
||||
|
||||
Function Sys_Unlink(Filename:pchar):longint;
|
||||
var
|
||||
regs : SysCallregs;
|
||||
begin
|
||||
regs.reg2:=longint(filename);
|
||||
Sys_Unlink:=SysCall(SysCall_nr_unlink,regs);
|
||||
end;
|
||||
|
||||
|
||||
Function Sys_fstat(fd : longint;var Info:stat):Longint;
|
||||
var
|
||||
regs : SysCallregs;
|
||||
begin
|
||||
regs.reg2:=fd;
|
||||
regs.reg3:=longint(@Info);
|
||||
Sys_fStat:=SysCall(SysCall_nr_fstat,regs);
|
||||
end;
|
||||
|
||||
|
||||
Function Sys_Rename(Oldname,Newname:pchar):longint;
|
||||
var
|
||||
regs : SysCallregs;
|
||||
begin
|
||||
regs.reg2:=longint(oldname);
|
||||
regs.reg3:=longint(newname);
|
||||
Sys_Rename:=SysCall(SysCall_nr_rename,regs);
|
||||
end;
|
||||
|
||||
|
||||
Function Sys_Stat(Filename:pchar;var Buffer: stat):longint;
|
||||
{
|
||||
We need this for getcwd
|
||||
}
|
||||
var
|
||||
regs : SysCallregs;
|
||||
begin
|
||||
regs.reg2:=longint(filename);
|
||||
regs.reg3:=longint(@buffer);
|
||||
Sys_Stat:=SysCall(SysCall_nr_stat,regs);
|
||||
end;
|
||||
|
||||
Function Sys_Symlink(oldname,newname:pchar):longint;
|
||||
{
|
||||
We need this for erase
|
||||
}
|
||||
var
|
||||
regs : SysCallregs;
|
||||
begin
|
||||
regs.reg2:=longint(oldname);
|
||||
regs.reg3:=longint(newname);
|
||||
Sys_symlink:=SysCall(SysCall_nr_symlink,regs);
|
||||
end;
|
||||
|
||||
|
||||
Function Sys_ReadLink(name,linkname:pchar;maxlen:longint):longint;
|
||||
var
|
||||
regs : SysCallRegs;
|
||||
begin
|
||||
regs.reg2:=longint(name);
|
||||
regs.reg3:=longint(linkname);
|
||||
regs.reg4:=maxlen;
|
||||
Sys_ReadLink:=SysCall(Syscall_nr_readlink,regs);
|
||||
end;
|
||||
|
||||
|
||||
{*****************************************************************************
|
||||
--- Directory:Directory related calls ---
|
||||
*****************************************************************************}
|
||||
|
||||
Function Sys_Chdir(Filename:pchar):longint;
|
||||
var
|
||||
regs : SysCallregs;
|
||||
begin
|
||||
regs.reg2:=longint(filename);
|
||||
Sys_ChDir:=SysCall(SysCall_nr_chdir,regs);
|
||||
end;
|
||||
|
||||
|
||||
Function Sys_Mkdir(Filename:pchar;mode:longint):longint;
|
||||
var
|
||||
regs : SysCallregs;
|
||||
begin
|
||||
regs.reg2:=longint(filename);
|
||||
regs.reg3:=mode;
|
||||
Sys_MkDir:=SysCall(SysCall_nr_mkdir,regs);
|
||||
end;
|
||||
|
||||
|
||||
Function Sys_Rmdir(Filename:pchar):longint;
|
||||
var
|
||||
regs : SysCallregs;
|
||||
begin
|
||||
regs.reg2:=longint(filename);
|
||||
Sys_Rmdir:=SysCall(SysCall_nr_rmdir,regs);
|
||||
end;
|
||||
|
||||
{*****************************************************************************
|
||||
--- Process:Process & program handling - related calls ---
|
||||
*****************************************************************************}
|
||||
|
||||
|
||||
Function sys_GetPid:LongInt;
|
||||
{
|
||||
Get Process ID.
|
||||
}
|
||||
var
|
||||
regs : SysCallregs;
|
||||
begin
|
||||
Sys_GetPid:=SysCall(SysCall_nr_getpid,regs);
|
||||
end;
|
||||
|
||||
|
||||
Procedure Sys_Exit(ExitCode:longint);
|
||||
var
|
||||
regs : SysCallregs;
|
||||
begin
|
||||
regs.reg2:=exitcode;
|
||||
SysCall(SysCall_nr_exit,regs)
|
||||
end;
|
||||
|
||||
|
||||
Procedure SigAction(Signum:longint;Act,OldAct:PSigActionRec );
|
||||
{
|
||||
Change action of process upon receipt of a signal.
|
||||
Signum specifies the signal (all except SigKill and SigStop).
|
||||
If Act is non-nil, it is used to specify the new action.
|
||||
If OldAct is non-nil the previous action is saved there.
|
||||
}
|
||||
|
||||
Var
|
||||
sr : Syscallregs;
|
||||
begin
|
||||
sr.reg2:=Signum;
|
||||
sr.reg3:=Longint(act);
|
||||
sr.reg4:=Longint(oldact);
|
||||
SysCall(Syscall_nr_sigaction,sr);
|
||||
{$ifdef linuxunit}
|
||||
LinuxError:=Errno;
|
||||
{$endif}
|
||||
end;
|
||||
|
||||
(*=================== MOVED from syslinux.inc ========================*)
|
||||
|
||||
Function Sys_FTruncate(Handle,Pos:longint):longint; //moved from sysunix.inc Do_Truncate
|
||||
var
|
||||
sr : syscallregs;
|
||||
begin
|
||||
sr.reg2:=Handle;
|
||||
sr.reg3:=Pos;
|
||||
sr.reg4:=0;
|
||||
Sys_FTruncate:=syscall(syscall_nr_ftruncate,sr);
|
||||
end;
|
||||
|
||||
{ getdents is declared obsolete in Darwin! }
|
||||
{$I readdir.inc}
|
||||
|
||||
|
||||
Function Sys_mmap(adr,len,prot,flags,fdes,off:longint):longint; // moved from sysunix.inc, used in sbrk
|
||||
var
|
||||
sr: syscallregs;
|
||||
begin
|
||||
sr.reg2:=adr;
|
||||
sr.reg3:=len;
|
||||
sr.reg4:=prot;
|
||||
sr.reg5:=flags;
|
||||
sr.reg6:=fdes;
|
||||
sr.reg7:=off;
|
||||
sr.reg8:=0;
|
||||
Sys_mmap:=do_syscall(syscall_nr_mmap,sr);
|
||||
end;
|
||||
|
||||
|
||||
|
||||
{
|
||||
Interface to Unix ioctl call.
|
||||
Performs various operations on the filedescriptor Handle.
|
||||
Ndx describes the operation to perform.
|
||||
Data points to data needed for the Ndx function. The structure of this
|
||||
data is function-dependent.
|
||||
}
|
||||
Function Sys_IOCtl(Handle,Ndx: Longint;Data: Pointer):LongInt; // This was missing here, instead hardcoded in Do_IsDevice
|
||||
var
|
||||
sr: SysCallRegs;
|
||||
begin
|
||||
sr.reg2:=Handle;
|
||||
sr.reg3:=Ndx;
|
||||
sr.reg4:=Longint(Data);
|
||||
Sys_IOCtl:=SysCall(Syscall_nr_ioctl,sr);
|
||||
end;
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.1 2002-09-06 18:35:59 jonas
|
||||
* implemented most syscalls, except readdir because the getdents
|
||||
syscall is declared obsolete in Darwin...
|
||||
|
||||
}
|
@ -1,5 +1,3 @@
|
||||
{$PACKRECORDS C}
|
||||
|
||||
{
|
||||
$Id$
|
||||
This file is part of the Free Pascal run time library.
|
||||
@ -34,284 +32,288 @@
|
||||
}
|
||||
|
||||
const
|
||||
SYS_syscall = 0;
|
||||
SYS_exit = 1;
|
||||
SYS_fork = 2;
|
||||
SYS_read = 3;
|
||||
SYS_write = 4;
|
||||
SYS_open = 5;
|
||||
SYS_close = 6;
|
||||
SYS_wait4 = 7;
|
||||
sys_nr_syscall = 0;
|
||||
sys_nr_exit = 1;
|
||||
sys_nr_fork = 2;
|
||||
sys_nr_read = 3;
|
||||
sys_nr_write = 4;
|
||||
sys_nr_open = 5;
|
||||
sys_nr_close = 6;
|
||||
sys_nr_wait4 = 7;
|
||||
{ 8 is old creat }
|
||||
SYS_link = 9;
|
||||
SYS_unlink = 10;
|
||||
sys_nr_link = 9;
|
||||
sys_nr_unlink = 10;
|
||||
{ 11 is obsolete execv }
|
||||
SYS_chdir = 12;
|
||||
SYS_fchdir = 13;
|
||||
SYS_mknod = 14;
|
||||
SYS_chmod = 15;
|
||||
SYS_chown = 16;
|
||||
sys_nr_chdir = 12;
|
||||
sys_nr_fchdir = 13;
|
||||
sys_nr_mknod = 14;
|
||||
sys_nr_chmod = 15;
|
||||
sys_nr_chown = 16;
|
||||
{ 17 is obsolete sbreak }
|
||||
{$if COMPAT_GETFSSTAT}
|
||||
{ 18 is old getfsstat }
|
||||
{$else}
|
||||
|
||||
const
|
||||
SYS_getfsstat = 18;
|
||||
sys_nr_getfsstat = 18;
|
||||
{$endif}
|
||||
{ 19 is old lseek }
|
||||
|
||||
const
|
||||
SYS_getpid = 20;
|
||||
sys_nr_getpid = 20;
|
||||
{ 21 is obsolete mount }
|
||||
{ 22 is obsolete umount }
|
||||
SYS_setuid = 23;
|
||||
SYS_getuid = 24;
|
||||
SYS_geteuid = 25;
|
||||
SYS_ptrace = 26;
|
||||
SYS_recvmsg = 27;
|
||||
SYS_sendmsg = 28;
|
||||
SYS_recvfrom = 29;
|
||||
SYS_accept = 30;
|
||||
SYS_getpeername = 31;
|
||||
SYS_getsockname = 32;
|
||||
SYS_access = 33;
|
||||
SYS_chflags = 34;
|
||||
SYS_fchflags = 35;
|
||||
SYS_sync = 36;
|
||||
SYS_kill = 37;
|
||||
sys_nr_setuid = 23;
|
||||
sys_nr_getuid = 24;
|
||||
sys_nr_geteuid = 25;
|
||||
sys_nr_ptrace = 26;
|
||||
sys_nr_recvmsg = 27;
|
||||
sys_nr_sendmsg = 28;
|
||||
sys_nr_recvfrom = 29;
|
||||
sys_nr_accept = 30;
|
||||
sys_nr_getpeername = 31;
|
||||
sys_nr_getsockname = 32;
|
||||
sys_nr_access = 33;
|
||||
sys_nr_chflags = 34;
|
||||
sys_nr_fchflags = 35;
|
||||
sys_nr_sync = 36;
|
||||
sys_nr_kill = 37;
|
||||
{ 38 is old stat }
|
||||
SYS_getppid = 39;
|
||||
sys_nr_getppid = 39;
|
||||
{ 40 is old lstat }
|
||||
SYS_dup = 41;
|
||||
SYS_pipe = 42;
|
||||
SYS_getegid = 43;
|
||||
SYS_profil = 44;
|
||||
SYS_ktrace = 45;
|
||||
SYS_sigaction = 46;
|
||||
SYS_getgid = 47;
|
||||
SYS_sigprocmask = 48;
|
||||
SYS_getlogin = 49;
|
||||
SYS_setlogin = 50;
|
||||
SYS_acct = 51;
|
||||
SYS_sigpending = 52;
|
||||
SYS_sigaltstack = 53;
|
||||
SYS_ioctl = 54;
|
||||
SYS_reboot = 55;
|
||||
SYS_revoke = 56;
|
||||
SYS_symlink = 57;
|
||||
SYS_readlink = 58;
|
||||
SYS_execve = 59;
|
||||
SYS_umask = 60;
|
||||
SYS_chroot = 61;
|
||||
sys_nr_dup = 41;
|
||||
sys_nr_pipe = 42;
|
||||
sys_nr_getegid = 43;
|
||||
sys_nr_profil = 44;
|
||||
sys_nr_ktrace = 45;
|
||||
sys_nr_sigaction = 46;
|
||||
sys_nr_getgid = 47;
|
||||
sys_nr_sigprocmask = 48;
|
||||
sys_nr_getlogin = 49;
|
||||
sys_nr_setlogin = 50;
|
||||
sys_nr_acct = 51;
|
||||
sys_nr_sigpending = 52;
|
||||
sys_nr_sigaltstack = 53;
|
||||
sys_nr_ioctl = 54;
|
||||
sys_nr_reboot = 55;
|
||||
sys_nr_revoke = 56;
|
||||
sys_nr_symlink = 57;
|
||||
sys_nr_readlink = 58;
|
||||
sys_nr_execve = 59;
|
||||
sys_nr_umask = 60;
|
||||
sys_nr_chroot = 61;
|
||||
{ 62 is old fstat }
|
||||
{ 63 is unused }
|
||||
{ 64 is old getpagesize }
|
||||
SYS_msync = 65;
|
||||
SYS_vfork = 66;
|
||||
sys_nr_msync = 65;
|
||||
sys_nr_vfork = 66;
|
||||
{ 67 is obsolete vread }
|
||||
{ 68 is obsolete vwrite }
|
||||
SYS_sbrk = 69;
|
||||
SYS_sstk = 70;
|
||||
sys_nr_sbrk = 69;
|
||||
sys_nr_sstk = 70;
|
||||
{ 71 is old mmap }
|
||||
{ 72 is obsolete vadvise }
|
||||
SYS_munmap = 73;
|
||||
SYS_mprotect = 74;
|
||||
SYS_madvise = 75;
|
||||
sys_nr_munmap = 73;
|
||||
sys_nr_mprotect = 74;
|
||||
sys_nr_madvise = 75;
|
||||
{ 76 is obsolete vhangup }
|
||||
{ 77 is obsolete vlimit }
|
||||
SYS_mincore = 78;
|
||||
SYS_getgroups = 79;
|
||||
SYS_setgroups = 80;
|
||||
SYS_getpgrp = 81;
|
||||
SYS_setpgid = 82;
|
||||
SYS_setitimer = 83;
|
||||
sys_nr_mincore = 78;
|
||||
sys_nr_getgroups = 79;
|
||||
sys_nr_setgroups = 80;
|
||||
sys_nr_getpgrp = 81;
|
||||
sys_nr_setpgid = 82;
|
||||
sys_nr_setitimer = 83;
|
||||
{ 84 is old wait }
|
||||
SYS_swapon = 85;
|
||||
SYS_getitimer = 86;
|
||||
sys_nr_swapon = 85;
|
||||
sys_nr_getitimer = 86;
|
||||
{ 87 is old gethostname }
|
||||
{ 88 is old sethostname }
|
||||
SYS_getdtablesize = 89;
|
||||
SYS_dup2 = 90;
|
||||
SYS_fcntl = 92;
|
||||
SYS_select = 93;
|
||||
sys_nr_getdtablesize = 89;
|
||||
sys_nr_dup2 = 90;
|
||||
sys_nr_fcntl = 92;
|
||||
sys_nr_select = 93;
|
||||
{ 94 is obsolete setdopt }
|
||||
SYS_fsync = 95;
|
||||
SYS_setpriority = 96;
|
||||
SYS_socket = 97;
|
||||
SYS_connect = 98;
|
||||
sys_nr_fsync = 95;
|
||||
sys_nr_setpriority = 96;
|
||||
sys_nr_socket = 97;
|
||||
sys_nr_connect = 98;
|
||||
{ 99 is old accept }
|
||||
SYS_getpriority = 100;
|
||||
sys_nr_getpriority = 100;
|
||||
{ 101 is old send }
|
||||
{ 102 is old recv }
|
||||
SYS_sigreturn = 103;
|
||||
SYS_bind = 104;
|
||||
SYS_setsockopt = 105;
|
||||
SYS_listen = 106;
|
||||
sys_nr_sigreturn = 103;
|
||||
sys_nr_bind = 104;
|
||||
sys_nr_setsockopt = 105;
|
||||
sys_nr_listen = 106;
|
||||
{ 107 is obsolete vtimes }
|
||||
{ 108 is old sigvec }
|
||||
{ 109 is old sigblock }
|
||||
{ 110 is old sigsetmask }
|
||||
SYS_sigsuspend = 111;
|
||||
sys_nr_sigsuspend = 111;
|
||||
{ 112 is old sigstack }
|
||||
{ 113 is old recvmsg }
|
||||
{ 114 is old sendmsg }
|
||||
{ 115 is obsolete vtrace }
|
||||
SYS_gettimeofday = 116;
|
||||
SYS_getrusage = 117;
|
||||
SYS_getsockopt = 118;
|
||||
sys_nr_gettimeofday = 116;
|
||||
sys_nr_getrusage = 117;
|
||||
sys_nr_getsockopt = 118;
|
||||
{ 119 is obsolete resuba }
|
||||
SYS_readv = 120;
|
||||
SYS_writev = 121;
|
||||
SYS_settimeofday = 122;
|
||||
SYS_fchown = 123;
|
||||
SYS_fchmod = 124;
|
||||
sys_nr_readv = 120;
|
||||
sys_nr_writev = 121;
|
||||
sys_nr_settimeofday = 122;
|
||||
sys_nr_fchown = 123;
|
||||
sys_nr_fchmod = 124;
|
||||
{ 125 is old recvfrom }
|
||||
{ 126 is old setreuid }
|
||||
{ 127 is old setregid }
|
||||
SYS_rename = 128;
|
||||
sys_nr_rename = 128;
|
||||
{ 129 is old truncate }
|
||||
{ 130 is old ftruncate }
|
||||
SYS_flock = 131;
|
||||
SYS_mkfifo = 132;
|
||||
SYS_sendto = 133;
|
||||
SYS_shutdown = 134;
|
||||
SYS_socketpair = 135;
|
||||
SYS_mkdir = 136;
|
||||
SYS_rmdir = 137;
|
||||
SYS_utimes = 138;
|
||||
sys_nr_flock = 131;
|
||||
sys_nr_mkfifo = 132;
|
||||
sys_nr_sendto = 133;
|
||||
sys_nr_shutdown = 134;
|
||||
sys_nr_socketpair = 135;
|
||||
sys_nr_mkdir = 136;
|
||||
sys_nr_rmdir = 137;
|
||||
sys_nr_utimes = 138;
|
||||
{ 139 is unused }
|
||||
SYS_adjtime = 140;
|
||||
sys_nr_adjtime = 140;
|
||||
{ 141 is old getpeername }
|
||||
{ 142 is old gethostid }
|
||||
{ 143 is old sethostid }
|
||||
{ 144 is old getrlimit }
|
||||
{ 145 is old setrlimit }
|
||||
{ 146 is old killpg }
|
||||
SYS_setsid = 147;
|
||||
sys_nr_setsid = 147;
|
||||
{ 148 is obsolete setquota }
|
||||
{ 149 is obsolete quota }
|
||||
{ 150 is old getsockname }
|
||||
{ 151 is reserved }
|
||||
SYS_setprivexec = 152;
|
||||
sys_nr_setprivexec = 152;
|
||||
{ 153 is reserved }
|
||||
{ 154 is reserved }
|
||||
SYS_nfssvc = 155;
|
||||
sys_nr_nfssvc = 155;
|
||||
{ 156 is old getdirentries }
|
||||
SYS_statfs = 157;
|
||||
SYS_fstatfs = 158;
|
||||
SYS_unmount = 159;
|
||||
sys_nr_statfs = 157;
|
||||
sys_nr_fstatfs = 158;
|
||||
sys_nr_unmount = 159;
|
||||
{ 160 is obsolete async_daemon }
|
||||
SYS_getfh = 161;
|
||||
sys_nr_getfh = 161;
|
||||
{ 162 is old getdomainname }
|
||||
{ 163 is old setdomainname }
|
||||
{ 164 is obsolete pcfs_mount }
|
||||
SYS_quotactl = 165;
|
||||
sys_nr_quotactl = 165;
|
||||
{ 166 is obsolete exportfs }
|
||||
SYS_mount = 167;
|
||||
sys_nr_mount = 167;
|
||||
{ 168 is obsolete ustat }
|
||||
{ 169 is unused }
|
||||
SYS_table = 170;
|
||||
sys_nr_table = 170;
|
||||
{ 171 is old wait_3 }
|
||||
{ 172 is obsolete rpause }
|
||||
{ 173 is unused }
|
||||
{ 174 is obsolete getdents }
|
||||
SYS_gc_control = 175;
|
||||
SYS_add_profil = 176;
|
||||
sys_nr_gc_control = 175;
|
||||
sys_nr_add_profil = 176;
|
||||
{ 177 is unused }
|
||||
{ 178 is unused }
|
||||
{ 179 is unused }
|
||||
SYS_kdebug_trace = 180;
|
||||
SYS_setgid = 181;
|
||||
SYS_setegid = 182;
|
||||
SYS_seteuid = 183;
|
||||
SYS_lfs_bmapv = 184;
|
||||
SYS_lfs_markv = 185;
|
||||
SYS_lfs_segclean = 186;
|
||||
SYS_lfs_segwait = 187;
|
||||
SYS_stat = 188;
|
||||
SYS_fstat = 189;
|
||||
SYS_lstat = 190;
|
||||
SYS_pathconf = 191;
|
||||
SYS_fpathconf = 192;
|
||||
sys_nr_kdebug_trace = 180;
|
||||
sys_nr_setgid = 181;
|
||||
sys_nr_setegid = 182;
|
||||
sys_nr_seteuid = 183;
|
||||
sys_nr_lfs_bmapv = 184;
|
||||
sys_nr_lfs_markv = 185;
|
||||
sys_nr_lfs_segclean = 186;
|
||||
sys_nr_lfs_segwait = 187;
|
||||
sys_nr_stat = 188;
|
||||
sys_nr_fstat = 189;
|
||||
sys_nr_lstat = 190;
|
||||
sys_nr_pathconf = 191;
|
||||
sys_nr_fpathconf = 192;
|
||||
{$if COMPAT_GETFSSTAT}
|
||||
|
||||
const
|
||||
SYS_getfsstat = 193;
|
||||
sys_nr_getfsstat = 193;
|
||||
{$endif}
|
||||
|
||||
const
|
||||
SYS_getrlimit = 194;
|
||||
SYS_setrlimit = 195;
|
||||
SYS_getdirentries = 196;
|
||||
SYS_mmap = 197;
|
||||
SYS___syscall = 198;
|
||||
SYS_lseek = 199;
|
||||
SYS_truncate = 200;
|
||||
SYS_ftruncate = 201;
|
||||
SYS___sysctl = 202;
|
||||
SYS_mlock = 203;
|
||||
SYS_munlock = 204;
|
||||
SYS_undelete = 205;
|
||||
SYS_ATsocket = 206;
|
||||
SYS_ATgetmsg = 207;
|
||||
SYS_ATputmsg = 208;
|
||||
SYS_ATPsndreq = 209;
|
||||
SYS_ATPsndrsp = 210;
|
||||
SYS_ATPgetreq = 211;
|
||||
SYS_ATPgetrsp = 212;
|
||||
sys_nr_getrlimit = 194;
|
||||
sys_nr_setrlimit = 195;
|
||||
sys_nr_getdirentries = 196;
|
||||
sys_nr_mmap = 197;
|
||||
sys_nr___syscall = 198;
|
||||
sys_nr_lseek = 199;
|
||||
sys_nr_truncate = 200;
|
||||
sys_nr_ftruncate = 201;
|
||||
sys_nr___sysctl = 202;
|
||||
sys_nr_mlock = 203;
|
||||
sys_nr_munlock = 204;
|
||||
sys_nr_undelete = 205;
|
||||
sys_nr_ATsocket = 206;
|
||||
sys_nr_ATgetmsg = 207;
|
||||
sys_nr_ATputmsg = 208;
|
||||
sys_nr_ATPsndreq = 209;
|
||||
sys_nr_ATPsndrsp = 210;
|
||||
sys_nr_ATPgetreq = 211;
|
||||
sys_nr_ATPgetrsp = 212;
|
||||
{ 213-215 are reserved for AppleTalk }
|
||||
SYS_mkcomplex = 216;
|
||||
SYS_statv = 217;
|
||||
SYS_lstatv = 218;
|
||||
SYS_fstatv = 219;
|
||||
SYS_getattrlist = 220;
|
||||
SYS_setattrlist = 221;
|
||||
SYS_getdirentriesattr = 222;
|
||||
SYS_exchangedata = 223;
|
||||
SYS_checkuseraccess = 224;
|
||||
SYS_searchfs = 225;
|
||||
sys_nr_mkcomplex = 216;
|
||||
sys_nr_statv = 217;
|
||||
sys_nr_lstatv = 218;
|
||||
sys_nr_fstatv = 219;
|
||||
sys_nr_getattrlist = 220;
|
||||
sys_nr_setattrlist = 221;
|
||||
sys_nr_getdirentriesattr = 222;
|
||||
sys_nr_exchangedata = 223;
|
||||
sys_nr_checkuseraccess = 224;
|
||||
sys_nr_searchfs = 225;
|
||||
{ 226 - 230 are reserved for HFS expansion }
|
||||
{ 231 - 249 are reserved }
|
||||
SYS_minherit = 250;
|
||||
SYS_semsys = 251;
|
||||
SYS_msgsys = 252;
|
||||
SYS_shmsys = 253;
|
||||
SYS_semctl = 254;
|
||||
SYS_semget = 255;
|
||||
SYS_semop = 256;
|
||||
SYS_semconfig = 257;
|
||||
SYS_msgctl = 258;
|
||||
SYS_msgget = 259;
|
||||
SYS_msgsnd = 260;
|
||||
SYS_msgrcv = 261;
|
||||
SYS_shmat = 262;
|
||||
SYS_shmctl = 263;
|
||||
SYS_shmdt = 264;
|
||||
SYS_shmget = 265;
|
||||
SYS_shm_open = 266;
|
||||
SYS_shm_unlink = 267;
|
||||
SYS_sem_open = 268;
|
||||
SYS_sem_close = 269;
|
||||
SYS_sem_unlink = 270;
|
||||
SYS_sem_wait = 271;
|
||||
SYS_sem_trywait = 272;
|
||||
SYS_sem_post = 273;
|
||||
SYS_sem_getvalue = 274;
|
||||
SYS_sem_init = 275;
|
||||
SYS_sem_destroy = 276;
|
||||
sys_nr_minherit = 250;
|
||||
sys_nr_semsys = 251;
|
||||
sys_nr_msgsys = 252;
|
||||
sys_nr_shmsys = 253;
|
||||
sys_nr_semctl = 254;
|
||||
sys_nr_semget = 255;
|
||||
sys_nr_semop = 256;
|
||||
sys_nr_semconfig = 257;
|
||||
sys_nr_msgctl = 258;
|
||||
sys_nr_msgget = 259;
|
||||
sys_nr_msgsnd = 260;
|
||||
sys_nr_msgrcv = 261;
|
||||
sys_nr_shmat = 262;
|
||||
sys_nr_shmctl = 263;
|
||||
sys_nr_shmdt = 264;
|
||||
sys_nr_shmget = 265;
|
||||
sys_nr_shm_open = 266;
|
||||
sys_nr_shm_unlink = 267;
|
||||
sys_nr_sem_open = 268;
|
||||
sys_nr_sem_close = 269;
|
||||
sys_nr_sem_unlink = 270;
|
||||
sys_nr_sem_wait = 271;
|
||||
sys_nr_sem_trywait = 272;
|
||||
sys_nr_sem_post = 273;
|
||||
sys_nr_sem_getvalue = 274;
|
||||
sys_nr_sem_init = 275;
|
||||
sys_nr_sem_destroy = 276;
|
||||
{ 277 - 295 are reserved }
|
||||
SYS_load_shared_file = 296;
|
||||
SYS_reset_shared_file = 297;
|
||||
sys_nr_load_shared_file = 296;
|
||||
sys_nr_reset_shared_file = 297;
|
||||
{ 298 - 323 are reserved }
|
||||
SYS_mlockall = 324;
|
||||
SYS_munlockall = 325;
|
||||
v sys_nr_mlockall = 324;
|
||||
sys_nr_munlockall = 325;
|
||||
{ 326 is reserved }
|
||||
SYS_issetugid = 327;
|
||||
sys_nr_issetugid = 327;
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.1 2002-09-06 17:12:55 jonas
|
||||
Revision 1.2 2002-09-06 18:35:59 jonas
|
||||
* implemented most syscalls, except readdir because the getdents
|
||||
syscall is declared obsolete in Darwin...
|
||||
|
||||
Revision 1.1 2002/09/06 17:12:55 jonas
|
||||
+ initial implementation, h2pas of /usr/include/sys/syscall.h on a
|
||||
Mac OS X 10.1.5 machine
|
||||
|
||||
|
132
rtl/darwin/systypes.inc
Normal file
132
rtl/darwin/systypes.inc
Normal file
@ -0,0 +1,132 @@
|
||||
{
|
||||
$Id$
|
||||
This file is part of the Free Pascal run time library.
|
||||
Copyright (c) 1999-2000 by Michael Van Canneyt,
|
||||
member of the Free Pascal development team.
|
||||
|
||||
See the file COPYING.FPC, included in this distribution,
|
||||
for details about the copyright.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
**********************************************************************}
|
||||
type
|
||||
|
||||
{
|
||||
Linux system calls take arguments as follows :
|
||||
|
||||
i386/ppc:
|
||||
|
||||
%eax/%d0 : System call number
|
||||
%ebx/%d1 : first argument
|
||||
%ecx/%d2 : second argument
|
||||
%edx/%d3 : third argumens
|
||||
%esi/%d3 : fourth argument
|
||||
%edi/%d4 : fifth argument
|
||||
|
||||
That is why we define a special type, with only these arguments
|
||||
To make it processor independent, we don't give any system dependent
|
||||
names, but the rather abstract reg1,reg2 etc;
|
||||
}
|
||||
|
||||
SysCallRegs=record
|
||||
reg1,reg2,reg3,reg4,reg5,reg6,reg7,reg8 : longint;
|
||||
end;
|
||||
PSysCallRegs=^SysCallRegs;
|
||||
TSysCallRegs=SysCallRegs;
|
||||
|
||||
dev_t = CARDINAL;
|
||||
|
||||
|
||||
{$packrecords C}
|
||||
Stat =record {BSD version}
|
||||
dev : dev_t; { inode's device }
|
||||
ino : cardinal; { inode's number }
|
||||
mode, { inode protection mode }
|
||||
nlink : word; { number of hard links }
|
||||
uid, { user ID of the file's owner }
|
||||
gid, { group ID of the file's group }
|
||||
dev_t : cardinal; { device type }
|
||||
atime, { time of last access }
|
||||
atime_nsec, { nsec of last access }
|
||||
mtime, { time of last data modification }
|
||||
mtime_nsec, { nsec of last data modification }
|
||||
ctime, { time of last file status change }
|
||||
ctime_nsec : longint; { nsec of last file status change }
|
||||
size, { file size, in bytes }
|
||||
blocks : Int64; { blocks allocated for file }
|
||||
blksze, { optimal blocksize for I/O }
|
||||
flags, { user defined flags for file }
|
||||
filegen : cardinal; { file generation number }
|
||||
lspare : longint;
|
||||
qspare : array[0..1] of int64;
|
||||
end;
|
||||
|
||||
PStat=^Stat;
|
||||
TStat=Stat;
|
||||
|
||||
TStatfs = packed record
|
||||
spare2, { place holder}
|
||||
bsize, { fundamental block size}
|
||||
iosize, { optimal block size }
|
||||
blocks, { total blocks}
|
||||
bfree, { blocks free}
|
||||
bavail, { block available for mortal users}
|
||||
files, { Total file nodes}
|
||||
ffree : longint; { file nodes free}
|
||||
fsid : array[0..1] of longint;
|
||||
fowner : longint; {mounter uid}
|
||||
ftype : longint;
|
||||
fflags : longint; {copy of mount flags}
|
||||
spare : array [0..1] of longint; { For later use }
|
||||
fstypename : array[0..15] of char;
|
||||
mountpoint : array[0..89] of char;
|
||||
mnfromname : array[0..89] of char;
|
||||
end;
|
||||
PStatFS=^TStatFS;
|
||||
|
||||
fdSet=array[0..7] of longint;{=256 bits}
|
||||
pfdset=^fdset;
|
||||
TFDSet=fdset;
|
||||
|
||||
timeval = packed record
|
||||
sec,usec:longint;
|
||||
end;
|
||||
ptimeval=^timeval;
|
||||
TTimeVal=timeval;
|
||||
|
||||
timespec = packed record
|
||||
tv_sec,tv_nsec:{longint or int64 ?}longint;
|
||||
end;
|
||||
|
||||
timezone = packed record
|
||||
minuteswest,dsttime:longint;
|
||||
end;
|
||||
ptimezone =^timezone;
|
||||
TTimeZone = timezone;
|
||||
|
||||
utsname = packed record
|
||||
sysname,
|
||||
nodename,
|
||||
release,
|
||||
version,
|
||||
machine,
|
||||
domainname : Array[0..64] of char;
|
||||
end;
|
||||
PUTSName=^UTSName;
|
||||
TUTSName=UTSName;
|
||||
|
||||
ITimerVal= Record
|
||||
It_Interval,
|
||||
It_Value : TimeVal;
|
||||
end;
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.1 2002-09-06 18:35:59 jonas
|
||||
* implemented most syscalls, except readdir because the getdents
|
||||
syscall is declared obsolete in Darwin...
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user