123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- {
- $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.
- **********************************************************************}
- { Include syscall itself }
- {i syscallo.inc}
- Function Sys_mmap(adr,len,prot,flags,fdes,off:longint):longint; // moved from sysunix.inc, used in sbrk
- begin
- fpmmap(pointer(adr),size_t(len),cint(prot),cint(flags),cint(fdes),off_t(off));
- end;
- Function Sys_munmap(adr,len:longint):longint; // moved from sysunix.inc, used in sbrk
- begin
- fpmunmap(pointer(adr),cint(len));
- end;
- function Clone(func:TCloneFunc;sp:pointer;flags:longint;args:pointer):longint;
- begin
- if (pointer(func)=nil) or (sp=nil) then
- exit(-1); // give an error result
- {$ifdef cpui386}
- {$ASMMODE ATT}
- asm
- { Insert the argument onto the new stack. }
- movl sp,%ecx
- subl $8,%ecx
- movl args,%eax
- movl %eax,4(%ecx)
- { Save the function pointer as the zeroth argument.
- It will be popped off in the child in the ebx frobbing below. }
- movl func,%eax
- movl %eax,0(%ecx)
- { Do the system call }
- pushl %ebx
- movl flags,%ebx
- movl SysCall_nr_clone,%eax
- int $0x80
- popl %ebx
- test %eax,%eax
- jnz .Lclone_end
- { We're in the new thread }
- subl %ebp,%ebp { terminate the stack frame }
- call *%ebx
- { exit process }
- movl %eax,%ebx
- movl $1,%eax
- int $0x80
- .Lclone_end:
- movl %eax,__RESULT
- end;
- {$endif cpui386}
- {$ifdef cpum68k}
- { No yet translated, my m68k assembler is too weak for such things PM }
- (*
- asm
- { Insert the argument onto the new stack. }
- movl sp,%ecx
- subl $8,%ecx
- movl args,%eax
- movl %eax,4(%ecx)
- { Save the function pointer as the zeroth argument.
- It will be popped off in the child in the ebx frobbing below. }
- movl func,%eax
- movl %eax,0(%ecx)
- { Do the system call }
- pushl %ebx
- movl flags,%ebx
- movl SysCall_nr_clone,%eax
- int $0x80
- popl %ebx
- test %eax,%eax
- jnz .Lclone_end
- { We're in the new thread }
- subl %ebp,%ebp { terminate the stack frame }
- call *%ebx
- { exit process }
- movl %eax,%ebx
- movl $1,%eax
- int $0x80
- .Lclone_end:
- movl %eax,__RESULT
- end;
- *)
- {$endif cpum68k}
- 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 hardcode in Do_IsDevice
- begin
- sys_ioctl:=fpioctl(handle,ndx,data);
- end;
- {
- $Log$
- Revision 1.2 2003-10-31 08:55:11 mazen
- + assembler mode forced to ATT style for x86 cpu
- Revision 1.1 2003/10/30 16:42:25 marco
- * Killing off old syscall convention anywhere except for oldlinux
- Revision 1.19 2003/10/17 20:56:24 olle
- * Changed m68k to cpum68k, i386 to cpui386
- Revision 1.18 2003/09/14 20:15:01 marco
- * Unix reform stage two. Remove all calls from Unix that exist in Baseunix.
- Revision 1.17 2002/12/18 16:43:26 marco
- * new unix rtl, linux part.....
- Revision 1.16 2002/11/11 21:40:26 marco
- * rename syscall.inc -> syscallo.inc
- Revision 1.15 2002/10/14 19:39:17 peter
- * threads unit added for thread support
- Revision 1.14 2002/09/10 21:32:14 jonas
- + added "nop" after sc instruction, since normally in case of success,
- sc returns to the second instruction after itself
- Revision 1.13 2002/09/07 16:01:19 peter
- * old logs removed and tabs fixed
- Revision 1.12 2002/09/07 13:14:04 florian
- * hopefully final fix for ppc syscall BTW: The regX numbering is somehow messy
- Revision 1.11 2002/09/03 21:37:54 florian
- * hopefully final fix for ppc syscall
- Revision 1.10 2002/09/02 20:42:22 florian
- * another ppc syscall fix
- Revision 1.9 2002/09/02 20:03:20 florian
- * ppc syscall code fixed
- Revision 1.8 2002/08/19 18:24:05 jonas
- + ppc support for do_syscall
- Revision 1.7 2002/07/29 21:28:17 florian
- * several fixes to get further with linux/ppc system unit compilation
- Revision 1.6 2002/07/28 20:43:48 florian
- * several fixes for linux/powerpc
- * several fixes to MT
- }
|