Explorar o código

* fixed setjump
* fixed syscalls

florian %!s(int64=21) %!d(string=hai) anos
pai
achega
1883a09ddd
Modificáronse 3 ficheiros con 42 adicións e 8 borrados
  1. 10 2
      rtl/arm/arm.inc
  2. 7 3
      rtl/arm/setjump.inc
  3. 25 3
      rtl/linux/arm/syscall.inc

+ 10 - 2
rtl/arm/arm.inc

@@ -18,6 +18,10 @@
 
 {$asmmode gas}
 
+procedure fpc_cpuinit;
+begin
+end;
+
 {****************************************************************************
                        stack frame related stuff
 ****************************************************************************}
@@ -119,7 +123,11 @@ end;
 
 {
   $Log$
-  Revision 1.3  2003-11-21 00:40:06  florian
+  Revision 1.4  2004-01-20 21:01:57  florian
+    * fixed setjump
+    * fixed syscalls
+
+  Revision 1.3  2003/11/21 00:40:06  florian
     * some arm issues fixed
 
   Revision 1.2  2003/09/03 14:09:37  florian
@@ -130,4 +138,4 @@ end;
   Revision 1.1  2003/08/21 16:41:54  florian
     * empty dummy files
     + [long|set]jmp implemented
-}
+}

+ 7 - 3
rtl/arm/setjump.inc

@@ -18,7 +18,7 @@
 function setjmp(var S : jmp_buf) : longint;assembler;[Public, alias : 'FPC_SETJMP'];
   asm
      stmia   r0,{v1-v6, sl, fp, sp, lr}
-     (*!!!! fix me ?*)
+     mov     r0,#0
   end;
 
 procedure longjmp(var S : jmp_buf;value : longint);assembler;[Public, alias : 'FPC_LONGJMP'];
@@ -32,7 +32,11 @@ procedure longjmp(var S : jmp_buf;value : longint);assembler;[Public, alias : 'F
 
 {
   $Log$
-  Revision 1.2  2003-09-03 14:09:37  florian
+  Revision 1.3  2004-01-20 21:01:57  florian
+    * fixed setjump
+    * fixed syscalls
+
+  Revision 1.2  2003/09/03 14:09:37  florian
     * arm fixes to the common rtl code
     * some generic math code fixed
     * ...
@@ -40,4 +44,4 @@ procedure longjmp(var S : jmp_buf;value : longint);assembler;[Public, alias : 'F
   Revision 1.1  2003/08/21 16:41:54  florian
     * empty dummy files
     + [long|set]jmp implemented
-}
+}

+ 25 - 3
rtl/linux/arm/syscall.inc

@@ -177,12 +177,31 @@ end;
 
 // Old style syscall:
 // Better use ktrace/strace/gdb for debugging.
-Procedure FpSysCall( callnr:longint;var regs : SysCallregs );assembler;
+Procedure FpSysCall(callnr:longint;var regs : SysCallregs);assembler;
 {
   This function puts the registers in place, does the call, and then
   copies back the registers as they are after the SysCall.
 }
 asm
+  stmfd r13!,{r4-r6}
+  ldr  r2,[r1,#4]
+  ldr  r3,[r1,#8]
+  ldr  r4,[r1,#12]
+  ldr  r5,[r1,#16]
+  ldr  r6,[r1,#20]
+  ldr  r1,[r1]
+  swi  #0x900071
+  cmn  r0,#126
+  bls  .LDone
+  ldr  r1,.LErrno
+  rsb  r0,r0,#0
+  str  r0,[r1]
+  mvn  r0,#0
+  b    .LDone
+.LErrno:
+  .word Errno
+.LDone:
+  ldmfd r13!,{r4-r6}
 end;
 
 {$IFDEF SYSCALL_DEBUG}
@@ -241,7 +260,11 @@ end;
 
 {
   $Log$
-  Revision 1.3  2003-12-29 19:24:12  florian
+  Revision 1.4  2004-01-20 21:01:57  florian
+    * fixed setjump
+    * fixed syscalls
+
+  Revision 1.3  2003/12/29 19:24:12  florian
     + introduced PtrInt and PtrUInt
     * made strscan 64 bit safe
 
@@ -251,4 +274,3 @@ end;
   Revision 1.1  2003/08/28 00:08:29  florian
     * syscall skeleton
 }
-