mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-18 20:29:18 +02:00
* fixed error handling of system calls
This commit is contained in:
parent
5974694623
commit
b55c225f9b
@ -32,15 +32,26 @@ asm
|
|||||||
swi #0x900071
|
swi #0x900071
|
||||||
cmn r0,#126
|
cmn r0,#126
|
||||||
bls .LDone
|
bls .LDone
|
||||||
ldr r1,.LErrno
|
rsb r4,r0,#0
|
||||||
rsb r0,r0,#0
|
ldr r2,.Lthread_var
|
||||||
str r0,[r1]
|
ldr r2,[r2]
|
||||||
|
ldr r0,.LErrno
|
||||||
|
cmp r2,#0
|
||||||
|
bne .LThread
|
||||||
|
str r4,[r0,#4]
|
||||||
|
mvn r0,#0
|
||||||
|
b .LDone
|
||||||
|
.LThread:
|
||||||
|
mov pc,r2
|
||||||
|
str r4,[r0]
|
||||||
mvn r0,#0
|
mvn r0,#0
|
||||||
b .LDone
|
b .LDone
|
||||||
.LErrno:
|
.LErrno:
|
||||||
.word Errno
|
.word Errno
|
||||||
|
.Lthread_var:
|
||||||
|
.word fpc_threadvar_relocate_proc
|
||||||
.LDone:
|
.LDone:
|
||||||
end;
|
end ['r4'];
|
||||||
|
|
||||||
|
|
||||||
function FpSysCall(sysnr,param1:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL1'];
|
function FpSysCall(sysnr,param1:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL1'];
|
||||||
@ -52,15 +63,26 @@ asm
|
|||||||
swi #0x900071
|
swi #0x900071
|
||||||
cmn r0,#126
|
cmn r0,#126
|
||||||
bls .LDone
|
bls .LDone
|
||||||
ldr r1,.LErrno
|
rsb r4,r0,#0
|
||||||
rsb r0,r0,#0
|
ldr r2,.Lthread_var
|
||||||
str r0,[r1]
|
ldr r2,[r2]
|
||||||
|
ldr r0,.LErrno
|
||||||
|
cmp r2,#0
|
||||||
|
bne .LThread
|
||||||
|
str r4,[r0,#4]
|
||||||
|
mvn r0,#0
|
||||||
|
b .LDone
|
||||||
|
.LThread:
|
||||||
|
mov pc,r2
|
||||||
|
str r4,[r0]
|
||||||
mvn r0,#0
|
mvn r0,#0
|
||||||
b .LDone
|
b .LDone
|
||||||
.LErrno:
|
.LErrno:
|
||||||
.word Errno
|
.word Errno
|
||||||
|
.Lthread_var:
|
||||||
|
.word fpc_threadvar_relocate_proc
|
||||||
.LDone:
|
.LDone:
|
||||||
end;
|
end ['r4'];
|
||||||
|
|
||||||
|
|
||||||
function FpSysCall(sysnr,param1,param2:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL2'];
|
function FpSysCall(sysnr,param1,param2:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL2'];
|
||||||
@ -72,15 +94,26 @@ asm
|
|||||||
swi #0x900071
|
swi #0x900071
|
||||||
cmn r0,#126
|
cmn r0,#126
|
||||||
bls .LDone
|
bls .LDone
|
||||||
ldr r1,.LErrno
|
rsb r4,r0,#0
|
||||||
rsb r0,r0,#0
|
ldr r2,.Lthread_var
|
||||||
str r0,[r1]
|
ldr r2,[r2]
|
||||||
|
ldr r0,.LErrno
|
||||||
|
cmp r2,#0
|
||||||
|
bne .LThread
|
||||||
|
str r4,[r0,#4]
|
||||||
|
mvn r0,#0
|
||||||
|
b .LDone
|
||||||
|
.LThread:
|
||||||
|
mov pc,r2
|
||||||
|
str r4,[r0]
|
||||||
mvn r0,#0
|
mvn r0,#0
|
||||||
b .LDone
|
b .LDone
|
||||||
.LErrno:
|
.LErrno:
|
||||||
.word Errno
|
.word Errno
|
||||||
|
.Lthread_var:
|
||||||
|
.word fpc_threadvar_relocate_proc
|
||||||
.LDone:
|
.LDone:
|
||||||
end;
|
end ['r4'];
|
||||||
|
|
||||||
|
|
||||||
function FpSysCall(sysnr,param1,param2,param3:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL3'];
|
function FpSysCall(sysnr,param1,param2,param3:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL3'];
|
||||||
@ -92,15 +125,26 @@ asm
|
|||||||
swi #0x900071
|
swi #0x900071
|
||||||
cmn r0,#126
|
cmn r0,#126
|
||||||
bls .LDone
|
bls .LDone
|
||||||
ldr r1,.LErrno
|
rsb r4,r0,#0
|
||||||
rsb r0,r0,#0
|
ldr r2,.Lthread_var
|
||||||
str r0,[r1]
|
ldr r2,[r2]
|
||||||
|
ldr r0,.LErrno
|
||||||
|
cmp r2,#0
|
||||||
|
bne .LThread
|
||||||
|
str r4,[r0,#4]
|
||||||
|
mvn r0,#0
|
||||||
|
b .LDone
|
||||||
|
.LThread:
|
||||||
|
mov pc,r2
|
||||||
|
str r4,[r0]
|
||||||
mvn r0,#0
|
mvn r0,#0
|
||||||
b .LDone
|
b .LDone
|
||||||
.LErrno:
|
.LErrno:
|
||||||
.word Errno
|
.word Errno
|
||||||
|
.Lthread_var:
|
||||||
|
.word fpc_threadvar_relocate_proc
|
||||||
.LDone:
|
.LDone:
|
||||||
end;
|
end ['r4'];
|
||||||
|
|
||||||
|
|
||||||
function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL4'];
|
function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL4'];
|
||||||
@ -109,21 +153,30 @@ function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult; asse
|
|||||||
copies back the registers as they are after the SysCall.
|
copies back the registers as they are after the SysCall.
|
||||||
}
|
}
|
||||||
asm
|
asm
|
||||||
stmfd r13!,{r4}
|
|
||||||
ldr r4,param4
|
ldr r4,param4
|
||||||
swi #0x900071
|
swi #0x900071
|
||||||
cmn r0,#126
|
cmn r0,#126
|
||||||
bls .LDone
|
bls .LDone
|
||||||
ldr r1,.LErrno
|
rsb r4,r0,#0
|
||||||
rsb r0,r0,#0
|
ldr r2,.Lthread_var
|
||||||
str r0,[r1]
|
ldr r2,[r2]
|
||||||
|
ldr r0,.LErrno
|
||||||
|
cmp r2,#0
|
||||||
|
bne .LThread
|
||||||
|
str r4,[r0,#4]
|
||||||
|
mvn r0,#0
|
||||||
|
b .LDone
|
||||||
|
.LThread:
|
||||||
|
mov pc,r2
|
||||||
|
str r4,[r0]
|
||||||
mvn r0,#0
|
mvn r0,#0
|
||||||
b .LDone
|
b .LDone
|
||||||
.LErrno:
|
.LErrno:
|
||||||
.word Errno
|
.word Errno
|
||||||
|
.Lthread_var:
|
||||||
|
.word fpc_threadvar_relocate_proc
|
||||||
.LDone:
|
.LDone:
|
||||||
ldmfd r13!,{r4}
|
end ['r4'];
|
||||||
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;[public,alias:'FPC_SYSCALL5'];
|
||||||
@ -132,22 +185,31 @@ function FpSysCall(sysnr,param1,param2,param3,param4,param5:TSysParam):TSysResul
|
|||||||
copies back the registers as they are after the SysCall.
|
copies back the registers as they are after the SysCall.
|
||||||
}
|
}
|
||||||
asm
|
asm
|
||||||
stmfd r13!,{r4-r5}
|
|
||||||
ldr r5,param5
|
ldr r5,param5
|
||||||
ldr r4,param4
|
ldr r4,param4
|
||||||
swi #0x900071
|
swi #0x900071
|
||||||
cmn r0,#126
|
cmn r0,#126
|
||||||
bls .LDone
|
bls .LDone
|
||||||
ldr r1,.LErrno
|
rsb r4,r0,#0
|
||||||
rsb r0,r0,#0
|
ldr r2,.Lthread_var
|
||||||
str r0,[r1]
|
ldr r2,[r2]
|
||||||
|
ldr r0,.LErrno
|
||||||
|
cmp r2,#0
|
||||||
|
bne .LThread
|
||||||
|
str r4,[r0,#4]
|
||||||
|
mvn r0,#0
|
||||||
|
b .LDone
|
||||||
|
.LThread:
|
||||||
|
mov pc,r2
|
||||||
|
str r4,[r0]
|
||||||
mvn r0,#0
|
mvn r0,#0
|
||||||
b .LDone
|
b .LDone
|
||||||
.LErrno:
|
.LErrno:
|
||||||
.word Errno
|
.word Errno
|
||||||
|
.Lthread_var:
|
||||||
|
.word fpc_threadvar_relocate_proc
|
||||||
.LDone:
|
.LDone:
|
||||||
ldmfd r13!,{r4-r5}
|
end ['r4','r5'];
|
||||||
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;[public,alias:'FPC_SYSCALL6'];
|
||||||
@ -156,28 +218,40 @@ function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6:TSysParam):TS
|
|||||||
copies back the registers as they are after the SysCall.
|
copies back the registers as they are after the SysCall.
|
||||||
}
|
}
|
||||||
asm
|
asm
|
||||||
stmfd r13!,{r4-r6}
|
|
||||||
ldr r6,param6
|
ldr r6,param6
|
||||||
ldr r5,param5
|
ldr r5,param5
|
||||||
ldr r4,param4
|
ldr r4,param4
|
||||||
swi #0x900071
|
swi #0x900071
|
||||||
cmn r0,#126
|
cmn r0,#126
|
||||||
bls .LDone
|
bls .LDone
|
||||||
ldr r1,.LErrno
|
rsb r4,r0,#0
|
||||||
rsb r0,r0,#0
|
ldr r2,.Lthread_var
|
||||||
str r0,[r1]
|
ldr r2,[r2]
|
||||||
|
ldr r0,.LErrno
|
||||||
|
cmp r2,#0
|
||||||
|
bne .LThread
|
||||||
|
str r4,[r0,#4]
|
||||||
|
mvn r0,#0
|
||||||
|
b .LDone
|
||||||
|
.LThread:
|
||||||
|
mov pc,r2
|
||||||
|
str r4,[r0]
|
||||||
mvn r0,#0
|
mvn r0,#0
|
||||||
b .LDone
|
b .LDone
|
||||||
.LErrno:
|
.LErrno:
|
||||||
.word Errno
|
.word Errno
|
||||||
|
.Lthread_var:
|
||||||
|
.word fpc_threadvar_relocate_proc
|
||||||
.LDone:
|
.LDone:
|
||||||
ldmfd r13!,{r4-r6}
|
end ['r4','r5','r6'];
|
||||||
end;
|
|
||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.5 2004-02-06 23:06:16 florian
|
Revision 1.6 2005-01-04 14:13:58 florian
|
||||||
|
* fixed error handling of system calls
|
||||||
|
|
||||||
|
Revision 1.5 2004/02/06 23:06:16 florian
|
||||||
- killed tsyscallregs
|
- killed tsyscallregs
|
||||||
|
|
||||||
Revision 1.4 2004/01/20 21:01:57 florian
|
Revision 1.4 2004/01/20 21:01:57 florian
|
||||||
|
Loading…
Reference in New Issue
Block a user