|
@@ -33,57 +33,21 @@ function FpSysCall(sysnr:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYS
|
|
|
copies back the registers as they are after the SysCall.
|
|
|
}
|
|
|
var
|
|
|
- temp : qword;
|
|
|
+ { workaround for incomplete linkage area reservation by FPC 3.0.0 and earlier,
|
|
|
+ remove after 3.0.2 is the minimum bootstrap version }
|
|
|
+ dummy: array[1..4] of ptruint;
|
|
|
retaddress: ptruint;
|
|
|
asm
|
|
|
mr r0, r3
|
|
|
sc
|
|
|
bns .LDone
|
|
|
- lis r10, (fpc_threadvar_relocate_proc)@highesta
|
|
|
- ori r10, r10, (fpc_threadvar_relocate_proc)@highera
|
|
|
- sldi r10, r10, 32
|
|
|
- oris r10, r10, (fpc_threadvar_relocate_proc)@ha
|
|
|
- ld r10, (fpc_threadvar_relocate_proc)@l(r10)
|
|
|
-
|
|
|
- cmpdi r10, 0
|
|
|
- bne .LThreaded
|
|
|
- lis r4, (Errno+8)@highesta
|
|
|
- ori r4, r4, (Errno+8)@highera
|
|
|
- sldi r4, r4, 32
|
|
|
- oris r4, r4, (Errno+8)@ha
|
|
|
- stw r3, (Errno+8)@l(r4)
|
|
|
- b .LFailed
|
|
|
-.LThreaded:
|
|
|
- std r3, temp
|
|
|
- mflr r3
|
|
|
- std r3, retaddress
|
|
|
-
|
|
|
- // load actual function entry into r9
|
|
|
- ld r9, 0(r10)
|
|
|
- // save old TOC value
|
|
|
- std r2, 40(r1)
|
|
|
- // move function entry into ctr
|
|
|
- mtctr r9
|
|
|
- // load new TOC value
|
|
|
- ld r2, 8(r10)
|
|
|
- // load environment pointer from TOC
|
|
|
- ld r11, 16(r10)
|
|
|
- // load parameters
|
|
|
- lis r4, (errno)@highesta
|
|
|
- ori r4, r4, (errno)@highera
|
|
|
- sldi r4, r4, 32
|
|
|
- oris r4, r4, (errno)@ha
|
|
|
- lwz r3, (errno)@l(r4)
|
|
|
- bctrl
|
|
|
- // restore old TOC value
|
|
|
- ld r2, 40(r1)
|
|
|
-
|
|
|
- ld r4, temp
|
|
|
- ld r5, retaddress
|
|
|
- std r4, 0(r3)
|
|
|
- mtlr r5
|
|
|
-.LFailed:
|
|
|
+ mflr r4
|
|
|
+ std r4, retaddress
|
|
|
+ bl seterrno
|
|
|
+ nop
|
|
|
+ ld r4, retaddress
|
|
|
li r3, -1
|
|
|
+ mtlr r4
|
|
|
.LDone:
|
|
|
end;
|
|
|
|
|
@@ -93,58 +57,22 @@ function FpSysCall(sysnr,param1:TSysParam):TSysResult; assembler;[public,alias:'
|
|
|
copies back the registers as they are after the SysCall.
|
|
|
}
|
|
|
var
|
|
|
- temp : qword;
|
|
|
+ { workaround for incomplete linkage area reservation by FPC 3.0.0 and earlier,
|
|
|
+ remove after 3.0.2 is the minimum bootstrap version }
|
|
|
+ dummy: array[1..4] of ptruint;
|
|
|
retaddress: ptruint;
|
|
|
asm
|
|
|
mr r0, r3
|
|
|
mr r3, r4
|
|
|
sc
|
|
|
bns .LDone
|
|
|
- lis r10, (fpc_threadvar_relocate_proc)@highesta
|
|
|
- ori r10, r10, (fpc_threadvar_relocate_proc)@highera
|
|
|
- sldi r10, r10, 32
|
|
|
- oris r10, r10, (fpc_threadvar_relocate_proc)@ha
|
|
|
- ld r10, (fpc_threadvar_relocate_proc)@l(r10)
|
|
|
-
|
|
|
- cmpdi r10, 0
|
|
|
- bne .LThreaded
|
|
|
- lis r4, (Errno+8)@highesta
|
|
|
- ori r4, r4, (Errno+8)@highera
|
|
|
- sldi r4, r4, 32
|
|
|
- oris r4, r4, (Errno+8)@ha
|
|
|
- stw r3, (Errno+8)@l(r4)
|
|
|
- b .LFailed
|
|
|
-.LThreaded:
|
|
|
- std r3, temp
|
|
|
- mflr r3
|
|
|
-
|
|
|
- // load actual function entry into r9
|
|
|
- ld r9, 0(r10)
|
|
|
- // save old TOC value
|
|
|
- std r2, 40(r1)
|
|
|
- // move function entry into ctr
|
|
|
- mtctr r9
|
|
|
- // load new TOC value
|
|
|
- ld r2, 8(r10)
|
|
|
- // load environment pointer from TOC
|
|
|
- ld r11, 16(r10)
|
|
|
- // load parameters
|
|
|
- lis r4, (errno)@highesta
|
|
|
- ori r4, r4, (errno)@highera
|
|
|
- sldi r4, r4, 32
|
|
|
- oris r4, r4, (errno)@ha
|
|
|
- std r3, retaddress
|
|
|
- lwz r3, (errno)@l(r4)
|
|
|
- bctrl
|
|
|
- // restore old TOC value
|
|
|
- ld r2, 40(r1)
|
|
|
-
|
|
|
- ld r4, temp
|
|
|
- ld r5, retaddress
|
|
|
- std r4, 0(r3)
|
|
|
- mtlr r5
|
|
|
-.LFailed:
|
|
|
+ mflr r4
|
|
|
+ std r4, retaddress
|
|
|
+ bl seterrno
|
|
|
+ nop
|
|
|
+ ld r4, retaddress
|
|
|
li r3, -1
|
|
|
+ mtlr r4
|
|
|
.LDone:
|
|
|
end;
|
|
|
|
|
@@ -154,7 +82,9 @@ function FpSysCall(sysnr,param1,param2:TSysParam):TSysResult; assembler;[public,
|
|
|
copies back the registers as they are after the SysCall.
|
|
|
}
|
|
|
var
|
|
|
- temp : qword;
|
|
|
+ { workaround for incomplete linkage area reservation by FPC 3.0.0 and earlier,
|
|
|
+ remove after 3.0.2 is the minimum bootstrap version }
|
|
|
+ dummy: array[1..4] of ptruint;
|
|
|
retaddress: ptruint;
|
|
|
asm
|
|
|
mr r0, r3
|
|
@@ -162,50 +92,13 @@ asm
|
|
|
mr r4, r5
|
|
|
sc
|
|
|
bns .LDone
|
|
|
- lis r10, (fpc_threadvar_relocate_proc)@highesta
|
|
|
- ori r10, r10, (fpc_threadvar_relocate_proc)@highera
|
|
|
- sldi r10, r10, 32
|
|
|
- oris r10, r10, (fpc_threadvar_relocate_proc)@ha
|
|
|
- ld r10, (fpc_threadvar_relocate_proc)@l(r10)
|
|
|
-
|
|
|
- cmpdi r10, 0
|
|
|
- bne .LThreaded
|
|
|
- lis r4, (Errno+8)@highesta
|
|
|
- ori r4, r4, (Errno+8)@highera
|
|
|
- sldi r4, r4, 32
|
|
|
- oris r4, r4, (Errno+8)@ha
|
|
|
- stw r3, (Errno+8)@l(r4)
|
|
|
- b .LFailed
|
|
|
-.LThreaded:
|
|
|
- std r3, temp
|
|
|
- mflr r3
|
|
|
- // load actual function entry into r9
|
|
|
- ld r9, 0(r10)
|
|
|
- // save old TOC value
|
|
|
- std r2, 40(r1)
|
|
|
- // move function entry into ctr
|
|
|
- mtctr r9
|
|
|
- // load new TOC value
|
|
|
- ld r2, 8(r10)
|
|
|
- // load environment pointer from TOC
|
|
|
- ld r11, 16(r10)
|
|
|
- // load parameters
|
|
|
- lis r4, (errno)@highesta
|
|
|
- ori r4, r4, (errno)@highera
|
|
|
- sldi r4, r4, 32
|
|
|
- oris r4, r4, (errno)@ha
|
|
|
- std r3, retaddress
|
|
|
- lwz r3, (errno)@l(r4)
|
|
|
- bctrl
|
|
|
- // restore old TOC value
|
|
|
- ld r2, 40(r1)
|
|
|
-
|
|
|
- ld r4, temp
|
|
|
- ld r5, retaddress
|
|
|
- std r4, 0(r3)
|
|
|
- mtlr r5
|
|
|
-.LFailed:
|
|
|
+ mflr r4
|
|
|
+ std r4, retaddress
|
|
|
+ bl seterrno
|
|
|
+ nop
|
|
|
+ ld r4, retaddress
|
|
|
li r3, -1
|
|
|
+ mtlr r4
|
|
|
.LDone:
|
|
|
end;
|
|
|
|
|
@@ -216,7 +109,9 @@ function FpSysCall(sysnr,param1,param2,param3:TSysParam):TSysResult; assembler;[
|
|
|
copies back the registers as they are after the SysCall.
|
|
|
}
|
|
|
var
|
|
|
- temp : qword;
|
|
|
+ { workaround for incomplete linkage area reservation by FPC 3.0.0 and earlier,
|
|
|
+ remove after 3.0.2 is the minimum bootstrap version }
|
|
|
+ dummy: array[1..4] of ptruint;
|
|
|
retaddress: ptruint;
|
|
|
asm
|
|
|
mr r0, r3
|
|
@@ -225,51 +120,13 @@ asm
|
|
|
mr r5, r6
|
|
|
sc
|
|
|
bns .LDone
|
|
|
- lis r10, (fpc_threadvar_relocate_proc)@highesta
|
|
|
- ori r10, r10, (fpc_threadvar_relocate_proc)@highera
|
|
|
- sldi r10, r10, 32
|
|
|
- oris r10, r10, (fpc_threadvar_relocate_proc)@ha
|
|
|
- ld r10, (fpc_threadvar_relocate_proc)@l(r10)
|
|
|
-
|
|
|
- cmpdi r10, 0
|
|
|
- bne .LThreaded
|
|
|
- lis r4, (Errno+8)@highesta
|
|
|
- ori r4, r4, (Errno+8)@highera
|
|
|
- sldi r4, r4, 32
|
|
|
- oris r4, r4, (Errno+8)@ha
|
|
|
- stw r3, (Errno+8)@l(r4)
|
|
|
- b .LFailed
|
|
|
-.LThreaded:
|
|
|
- std r3, temp
|
|
|
- mflr r3
|
|
|
-
|
|
|
- // load actual function entry into r9
|
|
|
- ld r9, 0(r10)
|
|
|
- // save old TOC value
|
|
|
- std r2, 40(r1)
|
|
|
- // move function entry into ctr
|
|
|
- mtctr r9
|
|
|
- // load new TOC value
|
|
|
- ld r2, 8(r10)
|
|
|
- // load environment pointer from TOC
|
|
|
- ld r11, 16(r10)
|
|
|
- // load parameters
|
|
|
- lis r4, (errno)@highesta
|
|
|
- ori r4, r4, (errno)@highera
|
|
|
- sldi r4, r4, 32
|
|
|
- oris r4, r4, (errno)@ha
|
|
|
- std r3, retaddress
|
|
|
- lwz r3, (errno)@l(r4)
|
|
|
- bctrl
|
|
|
-
|
|
|
- // restore old TOC value
|
|
|
- ld r2, 40(r1)
|
|
|
- ld r4, temp
|
|
|
- ld r5, retaddress
|
|
|
- std r4, 0(r3)
|
|
|
- mtlr r5
|
|
|
-.LFailed:
|
|
|
+ mflr r4
|
|
|
+ std r4, retaddress
|
|
|
+ bl seterrno
|
|
|
+ nop
|
|
|
+ ld r4, retaddress
|
|
|
li r3, -1
|
|
|
+ mtlr r4
|
|
|
.LDone:
|
|
|
end;
|
|
|
|
|
@@ -280,7 +137,9 @@ function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult; asse
|
|
|
copies back the registers as they are after the SysCall.
|
|
|
}
|
|
|
var
|
|
|
- temp : qword;
|
|
|
+ { workaround for incomplete linkage area reservation by FPC 3.0.0 and earlier,
|
|
|
+ remove after 3.0.2 is the minimum bootstrap version }
|
|
|
+ dummy: array[1..4] of ptruint;
|
|
|
retaddress: ptruint;
|
|
|
asm
|
|
|
mr r0, r3
|
|
@@ -290,51 +149,13 @@ asm
|
|
|
mr r6, r7
|
|
|
sc
|
|
|
bns .LDone
|
|
|
- lis r10, (fpc_threadvar_relocate_proc)@highesta
|
|
|
- ori r10, r10, (fpc_threadvar_relocate_proc)@highera
|
|
|
- sldi r10, r10, 32
|
|
|
- oris r10, r10, (fpc_threadvar_relocate_proc)@ha
|
|
|
- ld r10, (fpc_threadvar_relocate_proc)@l(r10)
|
|
|
-
|
|
|
- cmpdi r10, 0
|
|
|
- bne .LThreaded
|
|
|
- lis r4, (Errno+8)@highesta
|
|
|
- ori r4, r4, (Errno+8)@highera
|
|
|
- sldi r4, r4, 32
|
|
|
- oris r4, r4, (Errno+8)@ha
|
|
|
- stw r3, (Errno+8)@l(r4)
|
|
|
- b .LFailed
|
|
|
-.LThreaded:
|
|
|
- std r3, temp
|
|
|
- mflr r3
|
|
|
-
|
|
|
- // load actual function entry into r9
|
|
|
- ld r9, 0(r10)
|
|
|
- // save old TOC value
|
|
|
- std r2, 40(r1)
|
|
|
- // move function entry into ctr
|
|
|
- mtctr r9
|
|
|
- // load new TOC value
|
|
|
- ld r2, 8(r10)
|
|
|
- // load environment pointer from TOC
|
|
|
- ld r11, 16(r10)
|
|
|
- // load parameters
|
|
|
- lis r4, (errno)@highesta
|
|
|
- ori r4, r4, (errno)@highera
|
|
|
- sldi r4, r4, 32
|
|
|
- oris r4, r4, (errno)@ha
|
|
|
- std r3, retaddress
|
|
|
- lwz r3, (errno)@l(r4)
|
|
|
- bctrl
|
|
|
-
|
|
|
- // restore old TOC value
|
|
|
- ld r2, 40(r1)
|
|
|
- ld r4, temp
|
|
|
- ld r5, retaddress
|
|
|
- std r4, 0(r3)
|
|
|
- mtlr r5
|
|
|
-.LFailed:
|
|
|
+ mflr r4
|
|
|
+ std r4, retaddress
|
|
|
+ bl seterrno
|
|
|
+ nop
|
|
|
+ ld r4, retaddress
|
|
|
li r3, -1
|
|
|
+ mtlr r4
|
|
|
.LDone:
|
|
|
end;
|
|
|
|
|
@@ -345,7 +166,9 @@ function FpSysCall(sysnr,param1,param2,param3,param4,param5:TSysParam):TSysResul
|
|
|
copies back the registers as they are after the SysCall.
|
|
|
}
|
|
|
var
|
|
|
- temp : qword;
|
|
|
+ { workaround for incomplete linkage area reservation by FPC 3.0.0 and earlier,
|
|
|
+ remove after 3.0.2 is the minimum bootstrap version }
|
|
|
+ dummy: array[1..4] of ptruint;
|
|
|
retaddress: ptruint;
|
|
|
asm
|
|
|
mr r0, r3
|
|
@@ -356,51 +179,13 @@ asm
|
|
|
mr r7, r8
|
|
|
sc
|
|
|
bns .LDone
|
|
|
- lis r10, (fpc_threadvar_relocate_proc)@highesta
|
|
|
- ori r10, r10, (fpc_threadvar_relocate_proc)@highera
|
|
|
- sldi r10, r10, 32
|
|
|
- oris r10, r10, (fpc_threadvar_relocate_proc)@ha
|
|
|
- ld r10, (fpc_threadvar_relocate_proc)@l(r10)
|
|
|
-
|
|
|
- cmpdi r10, 0
|
|
|
- bne .LThreaded
|
|
|
- lis r4, (Errno+8)@highesta
|
|
|
- ori r4, r4, (Errno+8)@highera
|
|
|
- sldi r4, r4, 32
|
|
|
- oris r4, r4, (Errno+8)@ha
|
|
|
- stw r3, (Errno+8)@l(r4)
|
|
|
- b .LFailed
|
|
|
-.LThreaded:
|
|
|
- std r3, temp
|
|
|
- mflr r3
|
|
|
-
|
|
|
- // load actual function entry into r9
|
|
|
- ld r9, 0(r10)
|
|
|
- // save old TOC value
|
|
|
- std r2, 40(r1)
|
|
|
- // move function entry into ctr
|
|
|
- mtctr r9
|
|
|
- // load new TOC value
|
|
|
- ld r2, 8(r10)
|
|
|
- // load environment pointer from TOC
|
|
|
- ld r11, 16(r10)
|
|
|
- // load parameters
|
|
|
- lis r4, (errno)@highesta
|
|
|
- ori r4, r4, (errno)@highera
|
|
|
- sldi r4, r4, 32
|
|
|
- oris r4, r4, (errno)@ha
|
|
|
- std r3, retaddress
|
|
|
- lwz r3, (errno)@l(r4)
|
|
|
- bctrl
|
|
|
- // restore old TOC value
|
|
|
- ld r2, 40(r1)
|
|
|
-
|
|
|
- ld r4, temp
|
|
|
- ld r5, retaddress
|
|
|
- std r4, 0(r3)
|
|
|
- mtlr r5
|
|
|
-.LFailed:
|
|
|
+ mflr r4
|
|
|
+ std r4, retaddress
|
|
|
+ bl seterrno
|
|
|
+ nop
|
|
|
+ ld r4, retaddress
|
|
|
li r3, -1
|
|
|
+ mtlr r4
|
|
|
.LDone:
|
|
|
end;
|
|
|
|
|
@@ -411,7 +196,9 @@ function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6:TSysParam):TS
|
|
|
copies back the registers as they are after the SysCall.
|
|
|
}
|
|
|
var
|
|
|
- temp : qword;
|
|
|
+ { workaround for incomplete linkage area reservation by FPC 3.0.0 and earlier,
|
|
|
+ remove after 3.0.2 is the minimum bootstrap version }
|
|
|
+ dummy: array[1..4] of ptruint;
|
|
|
retaddress: ptruint;
|
|
|
asm
|
|
|
mr r0, r3
|
|
@@ -423,50 +210,12 @@ asm
|
|
|
mr r8, r9
|
|
|
sc
|
|
|
bns .LDone
|
|
|
- lis r10, (fpc_threadvar_relocate_proc)@highesta
|
|
|
- ori r10, r10, (fpc_threadvar_relocate_proc)@highera
|
|
|
- sldi r10, r10, 32
|
|
|
- oris r10, r10, (fpc_threadvar_relocate_proc)@ha
|
|
|
- ld r10, (fpc_threadvar_relocate_proc)@l(r10)
|
|
|
-
|
|
|
- cmpdi r10, 0
|
|
|
- bne .LThreaded
|
|
|
- lis r4, (Errno+8)@highesta
|
|
|
- ori r4, r4, (Errno+8)@highera
|
|
|
- sldi r4, r4, 32
|
|
|
- oris r4, r4, (Errno+8)@ha
|
|
|
- stw r3, (Errno+8)@l(r4)
|
|
|
- b .LFailed
|
|
|
-.LThreaded:
|
|
|
- std r3, temp
|
|
|
- mflr r3
|
|
|
-
|
|
|
- // load actual function entry into r9
|
|
|
- ld r9, 0(r10)
|
|
|
- // save old TOC value
|
|
|
- std r2, 40(r1)
|
|
|
- // move function entry into ctr
|
|
|
- mtctr r9
|
|
|
- // load new TOC value
|
|
|
- ld r2, 8(r10)
|
|
|
- // load environment pointer from TOC
|
|
|
- ld r11, 16(r10)
|
|
|
- // load parameters
|
|
|
- lis r4, (errno)@highesta
|
|
|
- ori r4, r4, (errno)@highera
|
|
|
- sldi r4, r4, 32
|
|
|
- oris r4, r4, (errno)@ha
|
|
|
- std r3, retaddress
|
|
|
- lwz r3, (errno)@l(r4)
|
|
|
- bctrl
|
|
|
- // restore old TOC value
|
|
|
- ld r2, 40(r1)
|
|
|
-
|
|
|
- ld r4, temp
|
|
|
- ld r5, retaddress
|
|
|
- std r4, 0(r3)
|
|
|
- mtlr r5
|
|
|
-.LFailed:
|
|
|
+ mflr r4
|
|
|
+ std r4, retaddress
|
|
|
+ bl seterrno
|
|
|
+ nop
|
|
|
+ ld r4, retaddress
|
|
|
li r3, -1
|
|
|
+ mtlr r4
|
|
|
.LDone:
|
|
|
end;
|