Browse Source

* fix parameter handling in FPC_SYSCALL4 to FPC_SYSCALL6

git-svn-id: trunk@24193 -
florian 12 năm trước cách đây
mục cha
commit
308fb42f4b
1 tập tin đã thay đổi với 22 bổ sung13 xóa
  1. 22 13
      rtl/linux/arm/syscall.inc

+ 22 - 13
rtl/linux/arm/syscall.inc

@@ -132,33 +132,36 @@ asm
 end;
 
 
-function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult; assembler; [public,alias:'FPC_SYSCALL4'];
+function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult; assembler; nostackframe; [public,alias:'FPC_SYSCALL4'];
 {
   Perform syscall and set errno variable if needed.
 }
 asm
-  push  {r6,r7}
+  push  {r7}
   push  {r0}
   mov   r0,r1
   mov   r1,r2
   mov   r2,r3
-  ldr   r3,param4
+  ldr   r3,[r13 ,#8]
   pop   {r7}
   // svc   #0x0
   // GNU 2.22 does not like svc #0x0
   .byte 0,0xdf
   mov   r1,#126
   cmn   r0,r1
-  pop   {r6,r7}
+  pop   {r7}
   bls   .LExit
+  push   {lr}
   neg   r0,r0
   bl    seterrno
   mov   r0,#0
   mvn   r0,r0
+  pop   {pc}
 .LExit:
+  mov   pc,lr
 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; nostackframe; [public,alias:'FPC_SYSCALL5'];
 {
   Perform syscall and set errno variable if needed.
 }
@@ -168,8 +171,8 @@ asm
   mov   r0,r1
   mov   r1,r2
   mov   r2,r3
-  ldr   r3,param4
-  ldr   r4,param5
+  ldr   r3,[r13 ,#12]
+  ldr   r4,[r13 ,#16]
   pop   {r7}
   // svc   #0x0
   // GNU 2.22 does not like svc #0x0
@@ -178,40 +181,46 @@ asm
   cmn   r0,r1
   pop   {r4,r7}
   bls   .LExit
+  push   {lr}
   neg   r0,r0
   bl    seterrno
   mov   r0,#0
   mvn   r0,r0
+  pop   {pc}
 .LExit:
+  mov   pc,lr
 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; nostackframe; [public,alias:'FPC_SYSCALL6'];
 {
   Perform syscall and set errno variable if needed.
 }
 asm
-  push  {r4,r5,r6,r7}
+  push  {r4,r5,r7}
   push  {r0}
   mov   r0,r1
   mov   r1,r2
   mov   r2,r3
-  ldr   r3,param4
-  ldr   r4,param5
-  ldr   r4,param6
+  ldr   r3,[r13 ,#16]
+  ldr   r4,[r13 ,#20]
+  ldr   r5,[r13 ,#24]
   pop   {r7}
   // svc   #0x0
   // GNU 2.22 does not like svc #0x0
   .byte 0,0xdf
   mov   r1,#126
   cmn   r0,r1
-  pop   {r4,r5,r6,r7}
+  pop   {r4,r5,r7}
   bls   .LExit
+  push   {lr}
   neg   r0,r0
   bl    seterrno
   mov   r0,#0
   mvn   r0,r0
+  pop   {pc}
 .LExit:
+  mov   pc,lr
 end;