Browse Source

bsd: add support for syscalls on m68k, based on NetBSD/elf

git-svn-id: trunk@36780 -
Károly Balogh 8 years ago
parent
commit
90ed130750
3 changed files with 192 additions and 0 deletions
  1. 2 0
      .gitattributes
  2. 161 0
      rtl/bsd/m68k/syscall.inc
  3. 29 0
      rtl/bsd/m68k/syscallh.inc

+ 2 - 0
.gitattributes

@@ -8588,6 +8588,8 @@ rtl/bsd/bunxfunch.inc svneol=native#text/plain
 rtl/bsd/bunxsysc.inc svneol=native#text/plain
 rtl/bsd/bunxsysc.inc svneol=native#text/plain
 rtl/bsd/i386/syscall.inc svneol=native#text/plain
 rtl/bsd/i386/syscall.inc svneol=native#text/plain
 rtl/bsd/i386/syscallh.inc svneol=native#text/plain
 rtl/bsd/i386/syscallh.inc svneol=native#text/plain
+rtl/bsd/m68k/syscall.inc svneol=native#text/plain
+rtl/bsd/m68k/syscallh.inc svneol=native#text/plain
 rtl/bsd/osdefs.inc svneol=native#text/plain
 rtl/bsd/osdefs.inc svneol=native#text/plain
 rtl/bsd/osmacro.inc svneol=native#text/plain
 rtl/bsd/osmacro.inc svneol=native#text/plain
 rtl/bsd/osmain.inc svneol=native#text/plain
 rtl/bsd/osmain.inc svneol=native#text/plain

+ 161 - 0
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;

+ 29 - 0
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';