Browse Source

* 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 15 years ago
parent
commit
eda7a8d672
1 changed files with 6 additions and 9 deletions
  1. 6 9
      rtl/linux/arm/syscall.inc

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

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