Browse Source

+ introduced PtrInt and PtrUInt
* made strscan 64 bit safe

florian 21 years ago
parent
commit
021652683a
3 changed files with 75 additions and 13 deletions
  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;
     function strpos(str1,str2 : pchar) : pchar;
-
       var
       var
          p : pchar;
          p : pchar;
-         lstr2 : longint;
-
+         lstr2 : SizeInt;
       begin
       begin
          strpos:=nil;
          strpos:=nil;
          p:=strscan(str1,str2^);
          p:=strscan(str1,str2^);
@@ -61,14 +59,18 @@
                    strpos:=p;
                    strpos:=p;
                    exit;
                    exit;
                 end;
                 end;
-              inc(longint(p));
+              inc(p);
               p:=strscan(p,str2^);
               p:=strscan(p,str2^);
            end;
            end;
       end;
       end;
 
 
 {
 {
   $Log$
   $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
     * old logs removed and tabs fixed
 
 
-}
+}

+ 13 - 5
rtl/inc/systemh.inc

@@ -177,12 +177,16 @@ Type
   StrLenInt = Int64;
   StrLenInt = Int64;
   SizeInt = Int64;
   SizeInt = Int64;
   SizeUInt = QWord;
   SizeUInt = QWord;
+  PtrInt = Int64;
+  PtrUInt = QWord;
 {$endif CPU64}
 {$endif CPU64}
 
 
 {$ifdef CPU32}
 {$ifdef CPU32}
   StrLenInt = Longint;
   StrLenInt = Longint;
   SizeInt = Longint;
   SizeInt = Longint;
   SizeUInt = DWord;
   SizeUInt = DWord;
+  PtrInt = Longint;
+  PtrUInt = DWord;
 {$endif CPU32}
 {$endif CPU32}
 
 
 { Zero - terminated strings }
 { Zero - terminated strings }
@@ -531,12 +535,12 @@ procedure WideCharToStrVar(S : PWideChar;var Dest : AnsiString);
 Type
 Type
   TWide2AnsiMove=procedure(source:pwidechar;dest:pchar;len:longint);
   TWide2AnsiMove=procedure(source:pwidechar;dest:pchar;len:longint);
   TAnsi2WideMove=procedure(source:pchar;dest:pwidechar;len:longint);
   TAnsi2WideMove=procedure(source:pchar;dest:pwidechar;len:longint);
-    
-  TWideStringManager = record   
+
+  TWideStringManager = record
     Wide2AnsiMove : TWide2AnsiMove;
     Wide2AnsiMove : TWide2AnsiMove;
     Ansi2WideMove : TAnsi2WideMove;
     Ansi2WideMove : TAnsi2WideMove;
   end;
   end;
-  
+
 Procedure GetWideStringManager (Var Manager : TWideStringManager);
 Procedure GetWideStringManager (Var Manager : TWideStringManager);
 Procedure SetWideStringManager (Const New : TWideStringManager);
 Procedure SetWideStringManager (Const New : TWideStringManager);
 Procedure SetWideStringManager (Const New : TWideStringManager; Var Old: TWideStringManager);
 Procedure SetWideStringManager (Const New : TWideStringManager; Var Old: TWideStringManager);
@@ -713,7 +717,11 @@ const
 
 
 {
 {
   $Log$
   $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
   + Added overloaded version of SetWideStringManager without old parameter
 
 
   Revision 1.79  2003/11/28 20:36:13  michael
   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
       instead of direct comparisons of low/high values of orddefs because
       qword is a special case
       qword is a special case
 
 
-}
+}

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

@@ -42,6 +42,7 @@ asm
 .LDone:
 .LDone:
 end;
 end;
 
 
+
 function FpSysCall(sysnr,param1:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL1'];
 function FpSysCall(sysnr,param1:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL1'];
 {
 {
   This function puts the registers in place, does the call, and then
   This function puts the registers in place, does the call, and then
@@ -81,6 +82,7 @@ asm
 .LDone:
 .LDone:
 end;
 end;
 
 
+
 function FpSysCall(sysnr,param1,param2,param3:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL3'];
 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
   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.
   copies back the registers as they are after the SysCall.
 }
 }
 asm
 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;
 end;
 
 
+
 function FpSysCall(sysnr,param1,param2,param3,param4,param5:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL5'];
 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
   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-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;
 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.
   copies back the registers as they are after the SysCall.
 }
 }
 asm
 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;
 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
@@ -193,7 +241,11 @@ end;
 
 
 {
 {
   $Log$
   $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
     + started to implement arm syscalls
 
 
   Revision 1.1  2003/08/28 00:08:29  florian
   Revision 1.1  2003/08/28 00:08:29  florian