浏览代码

* fixed setjump
* fixed syscalls

florian 21 年之前
父节点
当前提交
1883a09ddd
共有 3 个文件被更改,包括 42 次插入8 次删除
  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}
 {$asmmode gas}
 
 
+procedure fpc_cpuinit;
+begin
+end;
+
 {****************************************************************************
 {****************************************************************************
                        stack frame related stuff
                        stack frame related stuff
 ****************************************************************************}
 ****************************************************************************}
@@ -119,7 +123,11 @@ end;
 
 
 {
 {
   $Log$
   $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
     * some arm issues fixed
 
 
   Revision 1.2  2003/09/03 14:09:37  florian
   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
   Revision 1.1  2003/08/21 16:41:54  florian
     * empty dummy files
     * empty dummy files
     + [long|set]jmp implemented
     + [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'];
 function setjmp(var S : jmp_buf) : longint;assembler;[Public, alias : 'FPC_SETJMP'];
   asm
   asm
      stmia   r0,{v1-v6, sl, fp, sp, lr}
      stmia   r0,{v1-v6, sl, fp, sp, lr}
-     (*!!!! fix me ?*)
+     mov     r0,#0
   end;
   end;
 
 
 procedure longjmp(var S : jmp_buf;value : longint);assembler;[Public, alias : 'FPC_LONGJMP'];
 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$
   $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
     * arm fixes to the common rtl code
     * some generic math code fixed
     * 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
   Revision 1.1  2003/08/21 16:41:54  florian
     * empty dummy files
     * empty dummy files
     + [long|set]jmp implemented
     + [long|set]jmp implemented
-}
+}

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

@@ -177,12 +177,31 @@ end;
 
 
 // Old style syscall:
 // Old style syscall:
 // Better use ktrace/strace/gdb for debugging.
 // 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
   This function puts the registers in place, does the call, and then
   copies back the registers as they are after the SysCall.
   copies back the registers as they are after the SysCall.
 }
 }
 asm
 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;
 end;
 
 
 {$IFDEF SYSCALL_DEBUG}
 {$IFDEF SYSCALL_DEBUG}
@@ -241,7 +260,11 @@ end;
 
 
 {
 {
   $Log$
   $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
     + introduced PtrInt and PtrUInt
     * made strscan 64 bit safe
     * made strscan 64 bit safe
 
 
@@ -251,4 +274,3 @@ end;
   Revision 1.1  2003/08/28 00:08:29  florian
   Revision 1.1  2003/08/28 00:08:29  florian
     * syscall skeleton
     * syscall skeleton
 }
 }
-