Changeset View
Changeset View
Standalone View
Standalone View
lang/fpc/files/patch-rtl_bsd_aarch64
diff --git a/rtl/bsd/aarch64/syscall.inc b/rtl/bsd/aarch64/syscall.inc | |||||
new file mode 100644 | |||||
index 00000000..b4af7e66 | |||||
--- /dev/null | |||||
+++ rtl/bsd/aarch64/syscall.inc | |||||
@@ -0,0 +1,140 @@ | |||||
+{ | |||||
+ This file is part of the Free Pascal run time library. | |||||
+ | |||||
+ Perform syscall with 0..6 arguments. | |||||
+ If syscall return value is negative, negate it, set errno, and return -1. | |||||
+ | |||||
+ Written by Edmund Grimley Evans in 2015 and released into the public domain. | |||||
+} | |||||
+ | |||||
+function FpSysCall(sysnr:TSysParam):TSysResult; | |||||
+assembler; nostackframe; [public,alias:'FPC_DOSYS0']; | |||||
+asm | |||||
+ mov w8,w0 | |||||
+ svc #0 | |||||
+ bcc .Ldone | |||||
+ str x30,[sp,#-16]! | |||||
+ bl seterrno | |||||
+ ldr x30,[sp],#16 | |||||
+ mov x0,#-1 | |||||
+.Ldone: | |||||
+end; | |||||
+ | |||||
+function FpSysCall(sysnr,param1:TSysParam):TSysResult; | |||||
+assembler; nostackframe; [public,alias:'FPC_DOSYS1']; | |||||
+asm | |||||
+ mov w8,w0 | |||||
+ mov x0,x1 | |||||
+ svc #0 | |||||
+ bcc .Ldone | |||||
+ str x30,[sp,#-16]! | |||||
+ bl seterrno | |||||
+ ldr x30,[sp],#16 | |||||
+ mov x0,#-1 | |||||
+.Ldone: | |||||
+end; | |||||
+ | |||||
+function FpSysCall(sysnr,param1,param2:TSysParam):TSysResult; | |||||
+assembler; nostackframe; [public,alias:'FPC_DOSYS2']; | |||||
+asm | |||||
+ mov w8,w0 | |||||
+ mov x0,x1 | |||||
+ mov x1,x2 | |||||
+ svc #0 | |||||
+ bcc .Ldone | |||||
+ str x30,[sp,#-16]! | |||||
+ bl seterrno | |||||
+ ldr x30,[sp],#16 | |||||
+ mov x0,#-1 | |||||
+.Ldone: | |||||
+end; | |||||
+ | |||||
+function FpSysCall(sysnr,param1,param2,param3:TSysParam):TSysResult; | |||||
+assembler; nostackframe; [public,alias:'FPC_DOSYS3']; | |||||
+asm | |||||
+ mov w8,w0 | |||||
+ mov x0,x1 | |||||
+ mov x1,x2 | |||||
+ mov x2,x3 | |||||
+ svc #0 | |||||
+ bcc .Ldone | |||||
+ str x30,[sp,#-16]! | |||||
+ bl seterrno | |||||
+ ldr x30,[sp],#16 | |||||
+ mov x0,#-1 | |||||
+.Ldone: | |||||
+end; | |||||
+ | |||||
+function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult; | |||||
+assembler; nostackframe; [public,alias:'FPC_DOSYS4']; | |||||
+asm | |||||
+ mov w8,w0 | |||||
+ mov x0,x1 | |||||
+ mov x1,x2 | |||||
+ mov x2,x3 | |||||
+ mov x3,x4 | |||||
+ svc #0 | |||||
+ bcc .Ldone | |||||
+ str x30,[sp,#-16]! | |||||
+ bl seterrno | |||||
+ ldr x30,[sp],#16 | |||||
+ mov x0,#-1 | |||||
+.Ldone: | |||||
+end; | |||||
+ | |||||
+function FpSysCall(sysnr,param1,param2,param3,param4,param5:TSysParam):TSysResult; | |||||
+assembler; nostackframe; [public,alias:'FPC_DOSYS5']; | |||||
+asm | |||||
+ mov w8,w0 | |||||
+ mov x0,x1 | |||||
+ mov x1,x2 | |||||
+ mov x2,x3 | |||||
+ mov x3,x4 | |||||
+ mov x4,x5 | |||||
+ svc #0 | |||||
+ bcc .Ldone | |||||
+ str x30,[sp,#-16]! | |||||
+ bl seterrno | |||||
+ ldr x30,[sp],#16 | |||||
+ mov x0,#-1 | |||||
+.Ldone: | |||||
+end; | |||||
+ | |||||
+function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6:TSysParam):TSysResult; | |||||
+assembler; nostackframe; [public,alias:'FPC_DOSYS6']; | |||||
+asm | |||||
+ mov w8,w0 | |||||
+ mov x0,x1 | |||||
+ mov x1,x2 | |||||
+ mov x2,x3 | |||||
+ mov x3,x4 | |||||
+ mov x4,x5 | |||||
+ mov x5,x6 | |||||
+ svc #0 | |||||
+ bcc .Ldone | |||||
+ str x30,[sp,#-16]! | |||||
+ bl seterrno | |||||
+ ldr x30,[sp],#16 | |||||
+ mov x0,#-1 | |||||
+.Ldone: | |||||
+end; | |||||
+ | |||||
+function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6,param7:TSysParam):TSysResult; | |||||
+assembler; nostackframe; [public,alias:'FPC_DOSYS7']; | |||||
+asm | |||||
+ mov w8,w0 | |||||
+ mov x0,x1 | |||||
+ mov x1,x2 | |||||
+ mov x2,x3 | |||||
+ mov x3,x4 | |||||
+ mov x4,x5 | |||||
+ mov x5,x6 | |||||
+ mov x6,x7 | |||||
+ svc #0 | |||||
+ bcc .Ldone | |||||
+ str x30,[sp,#-16]! | |||||
+ bl seterrno | |||||
+ ldr x30,[sp],#16 | |||||
+ mov x0,#-1 | |||||
+.Ldone: | |||||
+end; | |||||
diff --git a/rtl/bsd/aarch64/syscallh.inc b/rtl/bsd/aarch64/syscallh.inc | |||||
new file mode 100644 | |||||
index 00000000..de84a02f | |||||
--- /dev/null | |||||
+++ rtl/bsd/aarch64/syscallh.inc | |||||
@@ -0,0 +1,38 @@ | |||||
+{ | |||||
+ This file is part of the Free Pascal run time library. | |||||
+ Copyright (c) 2002 Marco van de Voort | |||||
+ member of the Free Pascal development team. | |||||
+ | |||||
+ aarch64 syscall headers for *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. | |||||
+ | |||||
+ **********************************************************************} | |||||
+ | |||||
+{$ifdef FPC_USE_SYSCALL} | |||||
+ | |||||
+Type | |||||
+ | |||||
+ TSysResult = int64; // all platforms, cint=32-bit. | |||||
+ // On platforms with off_t =64-bit, people should | |||||
+ // use int64, and typecast all calls that don't | |||||
+ // return off_t to cint. | |||||
+ | |||||
+ TSysParam = int64; | |||||
+ | |||||
+function do_sysCall(sysnr:TSysParam):TSysResult; external name 'FPC_DOSYS0'; | |||||
+function do_sysCall(sysnr,param1:TSysParam):TSysResult; external name 'FPC_DOSYS1'; | |||||
+function do_sysCall(sysnr,param1,param2:TSysParam):TSysResult; external name 'FPC_DOSYS2'; | |||||
+function do_sysCall(sysnr,param1,param2,param3:TSysParam):TSysResult; external name 'FPC_DOSYS3'; | |||||
+function do_sysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult; external name 'FPC_DOSYS4'; | |||||
+function do_sysCall(sysnr,param1,param2,param3,param4,param5:TSysParam):TSysResult; external name 'FPC_DOSYS5'; | |||||
+function do_sysCall(sysnr,param1,param2,param3,param4,param5,param6:TSysParam):int64; external name 'FPC_DOSYS6'; | |||||
+function do_sysCall(sysnr,param1,param2,param3,param4,param5,param6,param7:TSysParam):int64; external name 'FPC_DOSYS7'; | |||||
+ | |||||
+{$endif} | |||||
+ |