Explorar o código

* replaced the "quick exit" instruction sequences from the syscall variants
lacking "nostackframe" with branches to an exit label, because in that
case the compiler-generated exit code must be executed to balance the
stack (only done for EABI; should probably also be done for OABI, but
I can't test that)

git-svn-id: trunk@16073 -

Jonas Maebe %!s(int64=15) %!d(string=hai) anos
pai
achega
eda7a8d672
Modificáronse 1 ficheiros con 6 adicións e 9 borrados
  1. 6 9
      rtl/linux/arm/syscall.inc

+ 6 - 9
rtl/linux/arm/syscall.inc

@@ -119,12 +119,11 @@ asm
   swi   #0x0
   swi   #0x0
   cmn   r0,#126
   cmn   r0,#126
   ldr   r7,[sp],#4
   ldr   r7,[sp],#4
-  movls pc,lr
-  stmfd sp!,{lr}
+  bls   .LExit
   rsb   r0,r0,#0
   rsb   r0,r0,#0
   bl    seterrno
   bl    seterrno
   mvn   r0,#0
   mvn   r0,#0
-  ldmfd sp!,{pc}
+.LExit:
 end;
 end;
 
 
 
 
@@ -143,12 +142,11 @@ asm
   swi   #0x0
   swi   #0x0
   cmn   r0,#126
   cmn   r0,#126
   ldmfd sp!,{r4,r7}
   ldmfd sp!,{r4,r7}
-  movls pc,lr
-  stmfd sp!,{lr}
+  bls   .LExit
   rsb   r0,r0,#0
   rsb   r0,r0,#0
   bl    seterrno
   bl    seterrno
   mvn   r0,#0
   mvn   r0,#0
-  ldmfd sp!,{pc}
+.LExit:
 end;
 end;
 
 
 
 
@@ -168,12 +166,11 @@ asm
   swi   #0x0
   swi   #0x0
   cmn   r0,#126
   cmn   r0,#126
   ldmfd sp!,{r4,r5,r7}
   ldmfd sp!,{r4,r5,r7}
-  movls pc,lr
-  stmfd sp!,{lr}
+  bls   .LExit
   rsb   r0,r0,#0
   rsb   r0,r0,#0
   bl    seterrno
   bl    seterrno
   mvn   r0,#0
   mvn   r0,#0
-  ldmfd sp!,{pc}
+.LExit:
 end;
 end;
 
 
 {$else FPC_ABI_EABI}
 {$else FPC_ABI_EABI}