* fixed error handling of system calls

This commit is contained in:
florian 2005-01-04 14:13:58 +00:00
parent 5974694623
commit b55c225f9b

View File

@ -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