diff options
author | karoly <karoly@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2017-07-23 23:02:44 +0000 |
---|---|---|
committer | karoly <karoly@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2017-07-23 23:02:44 +0000 |
commit | d3d93f940a33e06ad7ab97a1dab9569f66b59806 (patch) | |
tree | af2b73e517f0c8a05af9b87334b180d8df45fb4e /rtl/bsd | |
parent | c175fbd8012d94eb213625011c9409c6a2c35eb2 (diff) | |
download | fpc-d3d93f940a33e06ad7ab97a1dab9569f66b59806.tar.gz |
bsd: add support for syscalls on m68k, based on NetBSD/elf
git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@36780 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'rtl/bsd')
-rw-r--r-- | rtl/bsd/m68k/syscall.inc | 161 | ||||
-rw-r--r-- | rtl/bsd/m68k/syscallh.inc | 29 |
2 files changed, 190 insertions, 0 deletions
diff --git a/rtl/bsd/m68k/syscall.inc b/rtl/bsd/m68k/syscall.inc new file mode 100644 index 0000000000..8f4f0b934e --- /dev/null +++ b/rtl/bsd/m68k/syscall.inc @@ -0,0 +1,161 @@ +{ + This file is part of the Free Pascal run time library. + Copyright (c) 2017 by Karoly Balogh, + member of the Free Pascal development team. + + Syscalls for *BSD/m68k + + Tested with NetBSD/m68k (ELF) + + 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. + + **********************************************************************} + + +function FpSysCall(sysnr:TSysParam):TSysResult; assembler; stdcall; [public,alias:'FPC_SYSCALL0']; +asm + move.l sysnr,d0 + move.l #0,-(sp) + trap #0 + bcc @noerror + jsr seterrno + moveq.l #-1,d0 +@noerror: +end; + + +function FpSysCall(sysnr,param1:TSysParam):TSysResult; assembler; stdcall; [public,alias:'FPC_SYSCALL1']; +asm + move.l sysnr,d0 + move.l param1,-(sp) + move.l #0,-(sp) + trap #0 + bcc @noerror + jsr seterrno + moveq.l #-1,d0 +@noerror: +end; + + +function FpSysCall(sysnr,param1,param2:TSysParam):TSysResult; assembler; stdcall; [public,alias:'FPC_SYSCALL2']; +asm + move.l sysnr,d0 + move.l param2,-(sp) + move.l param1,-(sp) + move.l #0,-(sp) + trap #0 + bcc @noerror + jsr seterrno + moveq.l #-1,d0 +@noerror: +end; + + +function FpSysCall(sysnr,param1,param2,param3:TSysParam):TSysResult; assembler; stdcall; [public,alias:'FPC_SYSCALL3']; +asm + move.l sysnr,d0 + move.l param3,-(sp) + move.l param2,-(sp) + move.l param1,-(sp) + move.l #0,-(sp) + trap #0 + bcc @noerror + jsr seterrno + moveq.l #-1,d0 +@noerror: +end; + + +function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult; assembler; stdcall; [public,alias:'FPC_SYSCALL4']; +asm + move.l sysnr,d0 + move.l param4,-(sp) + move.l param3,-(sp) + move.l param2,-(sp) + move.l param1,-(sp) + move.l #0,-(sp) + trap #0 + bcc @noerror + jsr seterrno + moveq.l #-1,d0 +@noerror: +end; + + +function FpSysCall(sysnr,param1,param2,param3,param4,param5:TSysParam):TSysResult; assembler; stdcall; [public,alias:'FPC_SYSCALL5']; +asm + move.l sysnr,d0 + move.l param5,-(sp) + move.l param4,-(sp) + move.l param3,-(sp) + move.l param2,-(sp) + move.l param1,-(sp) + move.l #0,-(sp) + trap #0 + bcc @noerror + jsr seterrno + moveq.l #-1,d0 +@noerror: +end; + + +function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6:TSysParam):TSysResult; assembler; stdcall; [public,alias:'FPC_SYSCALL6']; +asm + move.l sysnr,d0 + move.l param6,-(sp) + move.l param5,-(sp) + move.l param4,-(sp) + move.l param3,-(sp) + move.l param2,-(sp) + move.l param1,-(sp) + move.l #0,-(sp) + trap #0 + bcc @noerror + jsr seterrno + moveq.l #-1,d0 +@noerror: +end; + + +function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6,param7:TSysParam):TSysResult; assembler; stdcall; [public,alias:'FPC_SYSCALL7']; +asm + move.l sysnr,d0 + move.l param7,-(sp) + move.l param6,-(sp) + move.l param5,-(sp) + move.l param4,-(sp) + move.l param3,-(sp) + move.l param2,-(sp) + move.l param1,-(sp) + move.l #0,-(sp) + trap #0 + bcc @noerror + jsr seterrno + moveq.l #-1,d0 +@noerror: +end; + + +function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6,param7,param8:TSysParam):TSysResult; assembler; stdcall; [public,alias:'FPC_SYSCALL8']; +asm + move.l sysnr,d0 + move.l param8,-(sp) + move.l param7,-(sp) + move.l param6,-(sp) + move.l param5,-(sp) + move.l param4,-(sp) + move.l param3,-(sp) + move.l param2,-(sp) + move.l param1,-(sp) + move.l #0,-(sp) + trap #0 + bcc @noerror + jsr seterrno + moveq.l #-1,d0 +@noerror: +end; diff --git a/rtl/bsd/m68k/syscallh.inc b/rtl/bsd/m68k/syscallh.inc new file mode 100644 index 0000000000..b005eec9a4 --- /dev/null +++ b/rtl/bsd/m68k/syscallh.inc @@ -0,0 +1,29 @@ +{ + Copyright (c) 2017 by Karoly Balogh + + Header for syscalls in System unit for m68k BSD + + 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 + + TSysResult = longint; + TSysParam = Longint; + +function Do_SysCall(sysnr:TSysParam):TSysResult; stdcall; external name 'FPC_SYSCALL0'; +function Do_SysCall(sysnr,param1:TSysParam):TSysResult; stdcall; external name 'FPC_SYSCALL1'; +function Do_SysCall(sysnr,param1,param2:TSysParam):TSysResult; stdcall; external name 'FPC_SYSCALL2'; +function Do_SysCall(sysnr,param1,param2,param3:TSysParam):TSysResult; stdcall; external name 'FPC_SYSCALL3'; +function Do_SysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult; stdcall; external name 'FPC_SYSCALL4'; +function Do_SysCall(sysnr,param1,param2,param3,param4,param5:TSysParam):TSysResult; stdcall; external name 'FPC_SYSCALL5'; +function Do_SysCall(sysnr,param1,param2,param3,param4,param5,param6:TSysParam):TSysResult; stdcall; external name 'FPC_SYSCALL6'; +function Do_SysCall(sysnr,param1,param2,param3,param4,param5,param6,param7:TSysParam):TSysResult; stdcall; external name 'FPC_SYSCALL7'; +function Do_SysCall(sysnr,param1,param2,param3,param4,param5,param6,param7,param8:TSysParam):TSysResult; stdcall; external name 'FPC_SYSCALL8'; |