mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-13 09:39:09 +02:00
142 lines
3.0 KiB
PHP
142 lines
3.0 KiB
PHP
{
|
|
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_SYSCALL0'];
|
|
asm
|
|
ori $a7, $a0, 0
|
|
syscall 0
|
|
bge $a0, $zero, .Ldone
|
|
addi.d $sp, $sp, -16
|
|
st.d $ra, $sp, 8
|
|
sub.d $a0, $zero, $a0
|
|
bl seterrno
|
|
addi.d $a0, $zero, -1
|
|
ld.d $ra, $sp, 8
|
|
addi.d $sp, $sp, 16
|
|
.Ldone:
|
|
end;
|
|
|
|
function FpSysCall(sysnr,param1:TSysParam):TSysResult;
|
|
assembler; nostackframe; [public,alias:'FPC_SYSCALL1'];
|
|
asm
|
|
ori $a7, $a0, 0
|
|
ori $a0, $a1, 0
|
|
syscall 0
|
|
bge $a0, $zero, .Ldone
|
|
addi.d $sp, $sp, -16
|
|
st.d $ra, $sp, 8
|
|
sub.d $a0, $zero, $a0
|
|
bl seterrno
|
|
addi.d $a0, $zero, -1
|
|
ld.d $ra, $sp, 8
|
|
addi.d $sp, $sp, 16
|
|
.Ldone:
|
|
end;
|
|
|
|
function FpSysCall(sysnr,param1,param2:TSysParam):TSysResult;
|
|
assembler; nostackframe; [public,alias:'FPC_SYSCALL2'];
|
|
asm
|
|
ori $a7, $a0, 0
|
|
ori $a0, $a1, 0
|
|
ori $a1, $a2, 0
|
|
syscall 0
|
|
bge $a0, $zero, .Ldone
|
|
addi.d $sp, $sp, -16
|
|
st.d $ra, $sp, 8
|
|
sub.d $a0, $zero, $a0
|
|
bl seterrno
|
|
addi.d $a0, $zero, -1
|
|
ld.d $ra, $sp, 8
|
|
addi.d $sp, $sp, 16
|
|
.Ldone:
|
|
end;
|
|
|
|
function FpSysCall(sysnr,param1,param2,param3:TSysParam):TSysResult;
|
|
assembler; nostackframe; [public,alias:'FPC_SYSCALL3'];
|
|
asm
|
|
ori $a7, $a0, 0
|
|
ori $a0, $a1, 0
|
|
ori $a1, $a2, 0
|
|
ori $a2, $a3, 0
|
|
syscall 0
|
|
bge $a0, $zero, .Ldone
|
|
addi.d $sp, $sp, -16
|
|
st.d $ra, $sp, 8
|
|
sub.d $a0, $zero, $a0
|
|
bl seterrno
|
|
addi.d $a0, $zero, -1
|
|
ld.d $ra, $sp, 8
|
|
addi.d $sp, $sp, 16
|
|
.Ldone:
|
|
end;
|
|
|
|
function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult;
|
|
assembler; nostackframe; [public,alias:'FPC_SYSCALL4'];
|
|
asm
|
|
ori $a7, $a0, 0
|
|
ori $a0, $a1, 0
|
|
ori $a1, $a2, 0
|
|
ori $a2, $a3, 0
|
|
ori $a3, $a4, 0
|
|
syscall 0
|
|
bge $a0, $zero, .Ldone
|
|
addi.d $sp, $sp, -16
|
|
st.d $ra, $sp, 8
|
|
sub.d $a0, $zero, $a0
|
|
bl seterrno
|
|
addi.d $a0, $zero, -1
|
|
ld.d $ra, $sp, 8
|
|
addi.d $sp, $sp, 16
|
|
.Ldone:
|
|
end;
|
|
|
|
function FpSysCall(sysnr,param1,param2,param3,param4,param5:TSysParam):TSysResult;
|
|
assembler; nostackframe; [public,alias:'FPC_SYSCALL5'];
|
|
asm
|
|
ori $a7, $a0, 0
|
|
ori $a0, $a1, 0
|
|
ori $a1, $a2, 0
|
|
ori $a2, $a3, 0
|
|
ori $a3, $a4, 0
|
|
ori $a4, $a5, 0
|
|
syscall 0
|
|
bge $a0, $zero, .Ldone
|
|
addi.d $sp, $sp, -16
|
|
st.d $ra, $sp, 8
|
|
sub.d $a0, $zero, $a0
|
|
bl seterrno
|
|
addi.d $a0, $zero, -1
|
|
ld.d $ra, $sp, 8
|
|
addi.d $sp, $sp, 16
|
|
.Ldone:
|
|
end;
|
|
|
|
function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6:TSysParam):TSysResult;
|
|
assembler; nostackframe; [public,alias:'FPC_SYSCALL6'];
|
|
asm
|
|
ori $a7, $a0, 0
|
|
ori $a0, $a1, 0
|
|
ori $a1, $a2, 0
|
|
ori $a2, $a3, 0
|
|
ori $a3, $a4, 0
|
|
ori $a4, $a5, 0
|
|
ori $a5, $a6, 0
|
|
syscall 0
|
|
bge $a0, $zero, .Ldone
|
|
addi.d $sp, $sp, -16
|
|
st.d $ra, $sp, 8
|
|
sub.d $a0, $zero, $a0
|
|
bl seterrno
|
|
addi.d $a0, $zero, -1
|
|
ld.d $ra, $sp, 8
|
|
addi.d $sp, $sp, 16
|
|
.Ldone:
|
|
end;
|