mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-10 02:28:22 +02:00
* fixed error handling of system calls
This commit is contained in:
parent
5974694623
commit
b55c225f9b
@ -32,15 +32,26 @@ asm
|
||||
swi #0x900071
|
||||
cmn r0,#126
|
||||
bls .LDone
|
||||
ldr r1,.LErrno
|
||||
rsb r0,r0,#0
|
||||
str r0,[r1]
|
||||
rsb r4,r0,#0
|
||||
ldr r2,.Lthread_var
|
||||
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
|
||||
b .LDone
|
||||
.LErrno:
|
||||
.word Errno
|
||||
.Lthread_var:
|
||||
.word fpc_threadvar_relocate_proc
|
||||
.LDone:
|
||||
end;
|
||||
end ['r4'];
|
||||
|
||||
|
||||
function FpSysCall(sysnr,param1:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL1'];
|
||||
@ -52,15 +63,26 @@ asm
|
||||
swi #0x900071
|
||||
cmn r0,#126
|
||||
bls .LDone
|
||||
ldr r1,.LErrno
|
||||
rsb r0,r0,#0
|
||||
str r0,[r1]
|
||||
rsb r4,r0,#0
|
||||
ldr r2,.Lthread_var
|
||||
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
|
||||
b .LDone
|
||||
.LErrno:
|
||||
.word Errno
|
||||
.Lthread_var:
|
||||
.word fpc_threadvar_relocate_proc
|
||||
.LDone:
|
||||
end;
|
||||
end ['r4'];
|
||||
|
||||
|
||||
function FpSysCall(sysnr,param1,param2:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL2'];
|
||||
@ -72,15 +94,26 @@ asm
|
||||
swi #0x900071
|
||||
cmn r0,#126
|
||||
bls .LDone
|
||||
ldr r1,.LErrno
|
||||
rsb r0,r0,#0
|
||||
str r0,[r1]
|
||||
rsb r4,r0,#0
|
||||
ldr r2,.Lthread_var
|
||||
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
|
||||
b .LDone
|
||||
.LErrno:
|
||||
.word Errno
|
||||
.Lthread_var:
|
||||
.word fpc_threadvar_relocate_proc
|
||||
.LDone:
|
||||
end;
|
||||
end ['r4'];
|
||||
|
||||
|
||||
function FpSysCall(sysnr,param1,param2,param3:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL3'];
|
||||
@ -92,15 +125,26 @@ asm
|
||||
swi #0x900071
|
||||
cmn r0,#126
|
||||
bls .LDone
|
||||
ldr r1,.LErrno
|
||||
rsb r0,r0,#0
|
||||
str r0,[r1]
|
||||
rsb r4,r0,#0
|
||||
ldr r2,.Lthread_var
|
||||
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
|
||||
b .LDone
|
||||
.LErrno:
|
||||
.word Errno
|
||||
.Lthread_var:
|
||||
.word fpc_threadvar_relocate_proc
|
||||
.LDone:
|
||||
end;
|
||||
end ['r4'];
|
||||
|
||||
|
||||
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.
|
||||
}
|
||||
asm
|
||||
stmfd r13!,{r4}
|
||||
ldr r4,param4
|
||||
swi #0x900071
|
||||
cmn r0,#126
|
||||
bls .LDone
|
||||
ldr r1,.LErrno
|
||||
rsb r0,r0,#0
|
||||
str r0,[r1]
|
||||
rsb r4,r0,#0
|
||||
ldr r2,.Lthread_var
|
||||
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
|
||||
b .LDone
|
||||
.LErrno:
|
||||
.word Errno
|
||||
.Lthread_var:
|
||||
.word fpc_threadvar_relocate_proc
|
||||
.LDone:
|
||||
ldmfd r13!,{r4}
|
||||
end;
|
||||
end ['r4'];
|
||||
|
||||
|
||||
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.
|
||||
}
|
||||
asm
|
||||
stmfd r13!,{r4-r5}
|
||||
ldr r5,param5
|
||||
ldr r4,param4
|
||||
swi #0x900071
|
||||
cmn r0,#126
|
||||
bls .LDone
|
||||
ldr r1,.LErrno
|
||||
rsb r0,r0,#0
|
||||
str r0,[r1]
|
||||
rsb r4,r0,#0
|
||||
ldr r2,.Lthread_var
|
||||
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
|
||||
b .LDone
|
||||
.LErrno:
|
||||
.word Errno
|
||||
.Lthread_var:
|
||||
.word fpc_threadvar_relocate_proc
|
||||
.LDone:
|
||||
ldmfd r13!,{r4-r5}
|
||||
end;
|
||||
end ['r4','r5'];
|
||||
|
||||
|
||||
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.
|
||||
}
|
||||
asm
|
||||
stmfd r13!,{r4-r6}
|
||||
ldr r6,param6
|
||||
ldr r5,param5
|
||||
ldr r4,param4
|
||||
swi #0x900071
|
||||
cmn r0,#126
|
||||
bls .LDone
|
||||
ldr r1,.LErrno
|
||||
rsb r0,r0,#0
|
||||
str r0,[r1]
|
||||
rsb r4,r0,#0
|
||||
ldr r2,.Lthread_var
|
||||
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
|
||||
b .LDone
|
||||
.LErrno:
|
||||
.word Errno
|
||||
.Lthread_var:
|
||||
.word fpc_threadvar_relocate_proc
|
||||
.LDone:
|
||||
ldmfd r13!,{r4-r6}
|
||||
end;
|
||||
end ['r4','r5','r6'];
|
||||
|
||||
|
||||
{
|
||||
$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
|
||||
|
||||
Revision 1.4 2004/01/20 21:01:57 florian
|
||||
|
Loading…
Reference in New Issue
Block a user