瀏覽代碼

+ introduced PtrInt and PtrUInt
* made strscan 64 bit safe

florian 21 年之前
父節點
當前提交
021652683a
共有 3 個文件被更改,包括 75 次插入13 次删除
  1. 8 6
      rtl/inc/stringsi.inc
  2. 13 5
      rtl/inc/systemh.inc
  3. 54 2
      rtl/linux/arm/syscall.inc

+ 8 - 6
rtl/inc/stringsi.inc

@@ -43,11 +43,9 @@
 
 
     function strpos(str1,str2 : pchar) : pchar;
-
       var
          p : pchar;
-         lstr2 : longint;
-
+         lstr2 : SizeInt;
       begin
          strpos:=nil;
          p:=strscan(str1,str2^);
@@ -61,14 +59,18 @@
                    strpos:=p;
                    exit;
                 end;
-              inc(longint(p));
+              inc(p);
               p:=strscan(p,str2^);
            end;
       end;
 
 {
   $Log$
-  Revision 1.3  2002-09-07 15:07:46  peter
+  Revision 1.4  2003-12-29 19:24:12  florian
+    + introduced PtrInt and PtrUInt
+    * made strscan 64 bit safe
+
+  Revision 1.3  2002/09/07 15:07:46  peter
     * old logs removed and tabs fixed
 
-}
+}

+ 13 - 5
rtl/inc/systemh.inc

@@ -177,12 +177,16 @@ Type
   StrLenInt = Int64;
   SizeInt = Int64;
   SizeUInt = QWord;
+  PtrInt = Int64;
+  PtrUInt = QWord;
 {$endif CPU64}
 
 {$ifdef CPU32}
   StrLenInt = Longint;
   SizeInt = Longint;
   SizeUInt = DWord;
+  PtrInt = Longint;
+  PtrUInt = DWord;
 {$endif CPU32}
 
 { Zero - terminated strings }
@@ -531,12 +535,12 @@ procedure WideCharToStrVar(S : PWideChar;var Dest : AnsiString);
 Type
   TWide2AnsiMove=procedure(source:pwidechar;dest:pchar;len:longint);
   TAnsi2WideMove=procedure(source:pchar;dest:pwidechar;len:longint);
-    
-  TWideStringManager = record   
+
+  TWideStringManager = record
     Wide2AnsiMove : TWide2AnsiMove;
     Ansi2WideMove : TAnsi2WideMove;
   end;
-  
+
 Procedure GetWideStringManager (Var Manager : TWideStringManager);
 Procedure SetWideStringManager (Const New : TWideStringManager);
 Procedure SetWideStringManager (Const New : TWideStringManager; Var Old: TWideStringManager);
@@ -713,7 +717,11 @@ const
 
 {
   $Log$
-  Revision 1.80  2003-11-29 17:27:05  michael
+  Revision 1.81  2003-12-29 19:24:12  florian
+    + introduced PtrInt and PtrUInt
+    * made strscan 64 bit safe
+
+  Revision 1.80  2003/11/29 17:27:05  michael
   + Added overloaded version of SetWideStringManager without old parameter
 
   Revision 1.79  2003/11/28 20:36:13  michael
@@ -858,4 +866,4 @@ const
       instead of direct comparisons of low/high values of orddefs because
       qword is a special case
 
-}
+}

+ 54 - 2
rtl/linux/arm/syscall.inc

@@ -42,6 +42,7 @@ asm
 .LDone:
 end;
 
+
 function FpSysCall(sysnr,param1:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL1'];
 {
   This function puts the registers in place, does the call, and then
@@ -81,6 +82,7 @@ asm
 .LDone:
 end;
 
+
 function FpSysCall(sysnr,param1,param2,param3:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL3'];
 {
   This function puts the registers in place, does the call, and then
@@ -107,14 +109,44 @@ function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult; asse
   copies back the registers as they are after the SysCall.
 }
 asm
+  stmfd r13!,{r4}
+  ldr  r4,param4
+  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}
 end;
 
+
 function FpSysCall(sysnr,param1,param2,param3,param4,param5:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL5'];
 {
   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-r5}
+  ldr  r5,param5
+  ldr  r4,param4
+  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-r5}
 end;
 
 
@@ -124,11 +156,27 @@ function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6:TSysParam):TS
   copies back the registers as they are after the SysCall.
 }
 asm
+  stmfd r13!,{r4-r6}
+  ldr  r6,param6
+  ldr  r5,param5
+  ldr  r4,param4
+  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;
 
+
 // Old style syscall:
 // Better use ktrace/strace/gdb for debugging.
-
 Procedure FpSysCall( callnr:longint;var regs : SysCallregs );assembler;
 {
   This function puts the registers in place, does the call, and then
@@ -193,7 +241,11 @@ end;
 
 {
   $Log$
-  Revision 1.2  2003-12-03 17:34:12  florian
+  Revision 1.3  2003-12-29 19:24:12  florian
+    + introduced PtrInt and PtrUInt
+    * made strscan 64 bit safe
+
+  Revision 1.2  2003/12/03 17:34:12  florian
     + started to implement arm syscalls
 
   Revision 1.1  2003/08/28 00:08:29  florian