mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-18 01:29:21 +02:00
* fix parameter handling in FPC_SYSCALL4 to FPC_SYSCALL6
git-svn-id: trunk@24193 -
This commit is contained in:
parent
52070e26e1
commit
308fb42f4b
@ -132,33 +132,36 @@ asm
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult; assembler; [public,alias:'FPC_SYSCALL4'];
|
function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult; assembler; nostackframe; [public,alias:'FPC_SYSCALL4'];
|
||||||
{
|
{
|
||||||
Perform syscall and set errno variable if needed.
|
Perform syscall and set errno variable if needed.
|
||||||
}
|
}
|
||||||
asm
|
asm
|
||||||
push {r6,r7}
|
push {r7}
|
||||||
push {r0}
|
push {r0}
|
||||||
mov r0,r1
|
mov r0,r1
|
||||||
mov r1,r2
|
mov r1,r2
|
||||||
mov r2,r3
|
mov r2,r3
|
||||||
ldr r3,param4
|
ldr r3,[r13 ,#8]
|
||||||
pop {r7}
|
pop {r7}
|
||||||
// svc #0x0
|
// svc #0x0
|
||||||
// GNU 2.22 does not like svc #0x0
|
// GNU 2.22 does not like svc #0x0
|
||||||
.byte 0,0xdf
|
.byte 0,0xdf
|
||||||
mov r1,#126
|
mov r1,#126
|
||||||
cmn r0,r1
|
cmn r0,r1
|
||||||
pop {r6,r7}
|
pop {r7}
|
||||||
bls .LExit
|
bls .LExit
|
||||||
|
push {lr}
|
||||||
neg r0,r0
|
neg r0,r0
|
||||||
bl seterrno
|
bl seterrno
|
||||||
mov r0,#0
|
mov r0,#0
|
||||||
mvn r0,r0
|
mvn r0,r0
|
||||||
|
pop {pc}
|
||||||
.LExit:
|
.LExit:
|
||||||
|
mov pc,lr
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function FpSysCall(sysnr,param1,param2,param3,param4,param5:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL5'];
|
function FpSysCall(sysnr,param1,param2,param3,param4,param5:TSysParam):TSysResult; assembler; nostackframe; [public,alias:'FPC_SYSCALL5'];
|
||||||
{
|
{
|
||||||
Perform syscall and set errno variable if needed.
|
Perform syscall and set errno variable if needed.
|
||||||
}
|
}
|
||||||
@ -168,8 +171,8 @@ asm
|
|||||||
mov r0,r1
|
mov r0,r1
|
||||||
mov r1,r2
|
mov r1,r2
|
||||||
mov r2,r3
|
mov r2,r3
|
||||||
ldr r3,param4
|
ldr r3,[r13 ,#12]
|
||||||
ldr r4,param5
|
ldr r4,[r13 ,#16]
|
||||||
pop {r7}
|
pop {r7}
|
||||||
// svc #0x0
|
// svc #0x0
|
||||||
// GNU 2.22 does not like svc #0x0
|
// GNU 2.22 does not like svc #0x0
|
||||||
@ -178,40 +181,46 @@ asm
|
|||||||
cmn r0,r1
|
cmn r0,r1
|
||||||
pop {r4,r7}
|
pop {r4,r7}
|
||||||
bls .LExit
|
bls .LExit
|
||||||
|
push {lr}
|
||||||
neg r0,r0
|
neg r0,r0
|
||||||
bl seterrno
|
bl seterrno
|
||||||
mov r0,#0
|
mov r0,#0
|
||||||
mvn r0,r0
|
mvn r0,r0
|
||||||
|
pop {pc}
|
||||||
.LExit:
|
.LExit:
|
||||||
|
mov pc,lr
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL6'];
|
function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6:TSysParam):TSysResult; assembler; nostackframe; [public,alias:'FPC_SYSCALL6'];
|
||||||
{
|
{
|
||||||
Perform syscall and set errno variable if needed.
|
Perform syscall and set errno variable if needed.
|
||||||
}
|
}
|
||||||
asm
|
asm
|
||||||
push {r4,r5,r6,r7}
|
push {r4,r5,r7}
|
||||||
push {r0}
|
push {r0}
|
||||||
mov r0,r1
|
mov r0,r1
|
||||||
mov r1,r2
|
mov r1,r2
|
||||||
mov r2,r3
|
mov r2,r3
|
||||||
ldr r3,param4
|
ldr r3,[r13 ,#16]
|
||||||
ldr r4,param5
|
ldr r4,[r13 ,#20]
|
||||||
ldr r4,param6
|
ldr r5,[r13 ,#24]
|
||||||
pop {r7}
|
pop {r7}
|
||||||
// svc #0x0
|
// svc #0x0
|
||||||
// GNU 2.22 does not like svc #0x0
|
// GNU 2.22 does not like svc #0x0
|
||||||
.byte 0,0xdf
|
.byte 0,0xdf
|
||||||
mov r1,#126
|
mov r1,#126
|
||||||
cmn r0,r1
|
cmn r0,r1
|
||||||
pop {r4,r5,r6,r7}
|
pop {r4,r5,r7}
|
||||||
bls .LExit
|
bls .LExit
|
||||||
|
push {lr}
|
||||||
neg r0,r0
|
neg r0,r0
|
||||||
bl seterrno
|
bl seterrno
|
||||||
mov r0,#0
|
mov r0,#0
|
||||||
mvn r0,r0
|
mvn r0,r0
|
||||||
|
pop {pc}
|
||||||
.LExit:
|
.LExit:
|
||||||
|
mov pc,lr
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user