summaryrefslogtreecommitdiff
path: root/rtl/bsd
diff options
context:
space:
mode:
authorkaroly <karoly@3ad0048d-3df7-0310-abae-a5850022a9f2>2017-07-23 23:02:44 +0000
committerkaroly <karoly@3ad0048d-3df7-0310-abae-a5850022a9f2>2017-07-23 23:02:44 +0000
commitd3d93f940a33e06ad7ab97a1dab9569f66b59806 (patch)
treeaf2b73e517f0c8a05af9b87334b180d8df45fb4e /rtl/bsd
parentc175fbd8012d94eb213625011c9409c6a2c35eb2 (diff)
downloadfpc-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.inc161
-rw-r--r--rtl/bsd/m68k/syscallh.inc29
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';