Ver código fonte

* don't destroy registers in syscall helpers

git-svn-id: trunk@6342 -
florian 18 anos atrás
pai
commit
9fe04923ad
1 arquivos alterados com 34 adições e 0 exclusões
  1. 34 0
      rtl/linux/arm/syscall.inc

+ 34 - 0
rtl/linux/arm/syscall.inc

@@ -27,7 +27,10 @@ function FpSysCall(sysnr:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYS
   This function puts the registers in place, does the call, and then
   copies back the registers as they are after the SysCall.
 }
+var
+  _r4 : dword;
 asm
+  str  r4,_r4
   swi  #0x900071
   cmn  r0,#126
   bls  .LDone
@@ -50,6 +53,7 @@ asm
 .Lthread_var:
   .word fpc_threadvar_relocate_proc
 .LDone:
+  ldr r4,_r4
 end ['r4'];
 
 
@@ -58,7 +62,10 @@ function FpSysCall(sysnr,param1:TSysParam):TSysResult; assembler;[public,alias:'
   This function puts the registers in place, does the call, and then
   copies back the registers as they are after the SysCall.
 }
+var
+  _r4 : dword;
 asm
+  str  r4,_r4
   swi  #0x900071
   cmn  r0,#126
   bls  .LDone
@@ -81,6 +88,7 @@ asm
 .Lthread_var:
   .word fpc_threadvar_relocate_proc
 .LDone:
+  ldr r4,_r4
 end ['r4'];
 
 
@@ -89,7 +97,10 @@ function FpSysCall(sysnr,param1,param2:TSysParam):TSysResult; assembler;[public,
   This function puts the registers in place, does the call, and then
   copies back the registers as they are after the SysCall.
 }
+var
+  _r4 : dword;
 asm
+  str  r4,_r4
   swi  #0x900071
   cmn  r0,#126
   bls  .LDone
@@ -112,6 +123,7 @@ asm
 .Lthread_var:
   .word fpc_threadvar_relocate_proc
 .LDone:
+  ldr r4,_r4
 end ['r4'];
 
 
@@ -120,7 +132,10 @@ function FpSysCall(sysnr,param1,param2,param3:TSysParam):TSysResult; assembler;[
   This function puts the registers in place, does the call, and then
   copies back the registers as they are after the SysCall.
 }
+var
+  _r4 : dword;
 asm
+  str  r4,_r4
   swi  #0x900071
   cmn  r0,#126
   bls  .LDone
@@ -143,6 +158,7 @@ asm
 .Lthread_var:
   .word fpc_threadvar_relocate_proc
 .LDone:
+  ldr r4,_r4
 end ['r4'];
 
 
@@ -151,7 +167,10 @@ function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult; asse
   This function puts the registers in place, does the call, and then
   copies back the registers as they are after the SysCall.
 }
+var
+  _r4 : dword;
 asm
+  str  r4,_r4
   ldr  r4,param4
   swi  #0x900071
   cmn  r0,#126
@@ -175,6 +194,7 @@ asm
 .Lthread_var:
   .word fpc_threadvar_relocate_proc
 .LDone:
+  ldr r4,_r4
 end ['r4'];
 
 
@@ -183,7 +203,11 @@ function FpSysCall(sysnr,param1,param2,param3,param4,param5:TSysParam):TSysResul
   This function puts the registers in place, does the call, and then
   copies back the registers as they are after the SysCall.
 }
+var
+  _r4,_r5 : dword;
 asm
+  str  r4,_r4
+  str  r5,_r5
   ldr  r5,param5
   ldr  r4,param4
   swi  #0x900071
@@ -208,6 +232,8 @@ asm
 .Lthread_var:
   .word fpc_threadvar_relocate_proc
 .LDone:
+  ldr r4,_r4
+  ldr r5,_r5
 end ['r4','r5'];
 
 
@@ -216,7 +242,12 @@ function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6:TSysParam):TS
   This function puts the registers in place, does the call, and then
   copies back the registers as they are after the SysCall.
 }
+var
+  _r4,_r5,_r6 : dword;
 asm
+  str  r4,_r4
+  str  r5,_r5
+  str  r6,_r6
   ldr  r6,param6
   ldr  r5,param5
   ldr  r4,param4
@@ -242,6 +273,9 @@ asm
 .Lthread_var:
   .word fpc_threadvar_relocate_proc
 .LDone:
+  ldr r4,_r4
+  ldr r5,_r5
+  ldr r6,_r6
 end ['r4','r5','r6'];