+ introduced PtrInt and PtrUInt

* made strscan 64 bit safe
This commit is contained in:
florian 2003-12-29 19:24:12 +00:00
parent 65cc0f990f
commit 021652683a
3 changed files with 75 additions and 13 deletions

View File

@ -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
}
}

View File

@ -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
}
}

View File

@ -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