* fixed setjump

* fixed syscalls
This commit is contained in:
florian 2004-01-20 21:01:57 +00:00
parent c244b8b527
commit 1883a09ddd
3 changed files with 42 additions and 8 deletions

View File

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

View File

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

View File

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