|
@@ -28,16 +28,75 @@ function FpSysCall(sysnr:TSysParam):TSysResult; assembler; nostackframe; [public
|
|
Perform syscall and set errno variable if needed.
|
|
Perform syscall and set errno variable if needed.
|
|
}
|
|
}
|
|
asm
|
|
asm
|
|
- // for now we are lazy
|
|
|
|
|
|
+ str r7,[sp,#-4]!
|
|
|
|
+ mov r7,r0
|
|
|
|
+ swi #0x0
|
|
|
|
+ ldr r7,[sp],#4
|
|
|
|
+ cmn r0,#126
|
|
|
|
+ ldr r7,[sp],#4
|
|
|
|
+ movls pc,lr
|
|
|
|
+ stmfd sp!,{lr}
|
|
|
|
+ rsb r0,r0,#0
|
|
|
|
+ bl seterrno
|
|
|
|
+ mvn r0,#0
|
|
|
|
+ ldmfd sp!,{pc}
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+function FpSysCall(sysnr,param1:TSysParam):TSysResult; assembler; nostackframe; [public,alias:'FPC_SYSCALL1'];
|
|
|
|
+{
|
|
|
|
+ Jump to FPC_SYSCALL0 because code for FPC_SYSCALL0-FPC_SYSCALL3 is the same.
|
|
|
|
+}
|
|
|
|
+asm
|
|
|
|
+ str r7,[sp,#-4]!
|
|
|
|
+ mov r7,r0
|
|
|
|
+ mov r0,r1
|
|
|
|
+ swi #0x0
|
|
|
|
+ cmn r0,#126
|
|
|
|
+ ldr r7,[sp],#4
|
|
|
|
+ movls pc,lr
|
|
|
|
+ stmfd sp!,{lr}
|
|
|
|
+ rsb r0,r0,#0
|
|
|
|
+ bl seterrno
|
|
|
|
+ mvn r0,#0
|
|
|
|
+ ldmfd sp!,{pc}
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+function FpSysCall(sysnr,param1,param2:TSysParam):TSysResult; assembler; nostackframe; [public,alias:'FPC_SYSCALL2'];
|
|
|
|
+{
|
|
|
|
+ Jump to FPC_SYSCALL0 because code for FPC_SYSCALL0-FPC_SYSCALL3 is the same.
|
|
|
|
+}
|
|
|
|
+asm
|
|
|
|
+ str r7,[sp,#-4]!
|
|
|
|
+ mov r7,r0
|
|
|
|
+ mov r0,r1
|
|
|
|
+ mov r1,r2
|
|
|
|
+ swi #0x0
|
|
|
|
+ cmn r0,#126
|
|
|
|
+ ldr r7,[sp],#4
|
|
|
|
+ movls pc,lr
|
|
|
|
+ stmfd sp!,{lr}
|
|
|
|
+ rsb r0,r0,#0
|
|
|
|
+ bl seterrno
|
|
|
|
+ mvn r0,#0
|
|
|
|
+ ldmfd sp!,{pc}
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+function FpSysCall(sysnr,param1,param2,param3:TSysParam):TSysResult; assembler; nostackframe; [public,alias:'FPC_SYSCALL3'];
|
|
|
|
+{
|
|
|
|
+ Jump to FPC_SYSCALL0 because code for FPC_SYSCALL0-FPC_SYSCALL3 is the same.
|
|
|
|
+}
|
|
|
|
+asm
|
|
|
|
+ str r7,[sp,#-4]!
|
|
mov r7,r0
|
|
mov r7,r0
|
|
mov r0,r1
|
|
mov r0,r1
|
|
mov r1,r2
|
|
mov r1,r2
|
|
mov r2,r3
|
|
mov r2,r3
|
|
- mov r3,r4
|
|
|
|
- mov r4,r5
|
|
|
|
- mov r5,r6
|
|
|
|
swi #0x0
|
|
swi #0x0
|
|
cmn r0,#126
|
|
cmn r0,#126
|
|
|
|
+ ldr r7,[sp],#4
|
|
movls pc,lr
|
|
movls pc,lr
|
|
stmfd sp!,{lr}
|
|
stmfd sp!,{lr}
|
|
rsb r0,r0,#0
|
|
rsb r0,r0,#0
|
|
@@ -45,7 +104,81 @@ asm
|
|
mvn r0,#0
|
|
mvn r0,#0
|
|
ldmfd sp!,{pc}
|
|
ldmfd sp!,{pc}
|
|
end;
|
|
end;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult; assembler; [public,alias:'FPC_SYSCALL4'];
|
|
|
|
+{
|
|
|
|
+ This function loads some parameters from stack and calls FPC_SYSCALL0.
|
|
|
|
+}
|
|
|
|
+asm
|
|
|
|
+ str r7,[sp,#-4]!
|
|
|
|
+ mov r7,r0
|
|
|
|
+ mov r0,r1
|
|
|
|
+ mov r1,r2
|
|
|
|
+ mov r2,r3
|
|
|
|
+ ldr r3,param4
|
|
|
|
+ swi #0x0
|
|
|
|
+ cmn r0,#126
|
|
|
|
+ ldr r7,[sp],#4
|
|
|
|
+ movls pc,lr
|
|
|
|
+ stmfd sp!,{lr}
|
|
|
|
+ rsb r0,r0,#0
|
|
|
|
+ bl seterrno
|
|
|
|
+ mvn r0,#0
|
|
|
|
+ ldmfd sp!,{pc}
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+function FpSysCall(sysnr,param1,param2,param3,param4,param5:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL5'];
|
|
|
|
+{
|
|
|
|
+ This function loads some parameters from stack and calls FPC_SYSCALL0.
|
|
|
|
+}
|
|
|
|
+asm
|
|
|
|
+ stmfd sp!,{r4,r7}
|
|
|
|
+ mov r7,r0
|
|
|
|
+ mov r0,r1
|
|
|
|
+ mov r1,r2
|
|
|
|
+ mov r2,r3
|
|
|
|
+ ldr r3,param4
|
|
|
|
+ ldr r4,param5
|
|
|
|
+ swi #0x0
|
|
|
|
+ cmn r0,#126
|
|
|
|
+ ldmfd sp!,{r4,r7}
|
|
|
|
+ movls pc,lr
|
|
|
|
+ stmfd sp!,{lr}
|
|
|
|
+ rsb r0,r0,#0
|
|
|
|
+ bl seterrno
|
|
|
|
+ mvn r0,#0
|
|
|
|
+ ldmfd sp!,{pc}
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL6'];
|
|
|
|
+{
|
|
|
|
+ This function loads some parameters from stack and calls FPC_SYSCALL0.
|
|
|
|
+}
|
|
|
|
+asm
|
|
|
|
+ stmfd sp!,{r4,r5,r7}
|
|
|
|
+ mov r7,r0
|
|
|
|
+ mov r0,r1
|
|
|
|
+ mov r1,r2
|
|
|
|
+ mov r2,r3
|
|
|
|
+ ldr r3,param4
|
|
|
|
+ ldr r4,param5
|
|
|
|
+ ldr r5,param6
|
|
|
|
+ swi #0x0
|
|
|
|
+ cmn r0,#126
|
|
|
|
+ ldmfd sp!,{r4,r5,r7}
|
|
|
|
+ movls pc,lr
|
|
|
|
+ stmfd sp!,{lr}
|
|
|
|
+ rsb r0,r0,#0
|
|
|
|
+ bl seterrno
|
|
|
|
+ mvn r0,#0
|
|
|
|
+ ldmfd sp!,{pc}
|
|
|
|
+end;
|
|
|
|
+
|
|
{$else FPC_ABI_EABI}
|
|
{$else FPC_ABI_EABI}
|
|
|
|
+
|
|
function FpSysCall(sysnr:TSysParam):TSysResult; assembler; nostackframe; [public,alias:'FPC_SYSCALL0'];
|
|
function FpSysCall(sysnr:TSysParam):TSysResult; assembler; nostackframe; [public,alias:'FPC_SYSCALL0'];
|
|
{
|
|
{
|
|
Perform syscall and set errno variable if needed.
|
|
Perform syscall and set errno variable if needed.
|
|
@@ -60,8 +193,6 @@ asm
|
|
mvn r0,#0
|
|
mvn r0,#0
|
|
ldmfd sp!,{pc}
|
|
ldmfd sp!,{pc}
|
|
end;
|
|
end;
|
|
-{$endif FPC_ABI_EABI}
|
|
|
|
-
|
|
|
|
|
|
|
|
procedure FPC_SYSCALL; external name 'FPC_SYSCALL0';
|
|
procedure FPC_SYSCALL; external name 'FPC_SYSCALL0';
|
|
|
|
|
|
@@ -129,3 +260,4 @@ asm
|
|
bl FPC_SYSCALL
|
|
bl FPC_SYSCALL
|
|
ldmfd sp!,{r4,r5,r6}
|
|
ldmfd sp!,{r4,r5,r6}
|
|
end;
|
|
end;
|
|
|
|
+{$endif FPC_ABI_EABI}
|