Index: rtl/arm/arm.inc
===================================================================
--- rtl/arm/arm.inc    (Revision 10376)
+++ rtl/arm/arm.inc    (Arbeitskopie)
@@ -589,7 +589,7 @@
   cpu_has_edsp:=true;
   in_edsp_test:=true;
   asm
-    pld [r0]
+     clz r0, r1
   end;
   in_edsp_test:=false;
   if cpu_has_edsp then
@@ -601,4 +601,3 @@

 {include hand-optimized assembler division code}
 {$i divide.inc}
-
Index: rtl/linux/arm/sighnd.inc
===================================================================
--- rtl/linux/arm/sighnd.inc    (Revision 10376)
+++ rtl/linux/arm/sighnd.inc    (Arbeitskopie)
@@ -20,6 +20,7 @@

 var
   res,fpustate : word;
+  dwReturn: dword;
 begin
   res:=0;
   case sig of
@@ -33,6 +34,16 @@
           begin
             res:=0;
             cpu_has_edsp:=false;
+            {
+               adjust return address to point behind the instruction which
+               caused the forced SIGILL.
+            }
+            dwReturn:= uContext^.uc_mcontext.arm_pc;
+            asm
+               ldr r0, dwReturn
+               add r0, r0, #4
+               str r0, [r11, #-0x4]
+            end;
           end
         else
           res:=216;
@@ -47,4 +58,3 @@
     HandleErrorAddrFrame(res,pointer(uContext^.uc_mcontext.arm_ip),pointer(uContext^.uc_mcontext.arm_fp));
 end;
