From 1883a09ddd3ece33ff506d1e65f95e15173a1582 Mon Sep 17 00:00:00 2001 From: florian Date: Tue, 20 Jan 2004 21:01:57 +0000 Subject: [PATCH] * fixed setjump * fixed syscalls --- rtl/arm/arm.inc | 12 ++++++++++-- rtl/arm/setjump.inc | 10 +++++++--- rtl/linux/arm/syscall.inc | 28 +++++++++++++++++++++++++--- 3 files changed, 42 insertions(+), 8 deletions(-) diff --git a/rtl/arm/arm.inc b/rtl/arm/arm.inc index 5901d565e2..0b8c1b0576 100644 --- a/rtl/arm/arm.inc +++ b/rtl/arm/arm.inc @@ -18,6 +18,10 @@ {$asmmode gas} +procedure fpc_cpuinit; +begin +end; + {**************************************************************************** stack frame related stuff ****************************************************************************} @@ -119,7 +123,11 @@ end; { $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 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 * empty dummy files + [long|set]jmp implemented -} +} \ No newline at end of file diff --git a/rtl/arm/setjump.inc b/rtl/arm/setjump.inc index 13f8f709da..130bf80ce6 100644 --- a/rtl/arm/setjump.inc +++ b/rtl/arm/setjump.inc @@ -18,7 +18,7 @@ function setjmp(var S : jmp_buf) : longint;assembler;[Public, alias : 'FPC_SETJMP']; asm stmia r0,{v1-v6, sl, fp, sp, lr} - (*!!!! fix me ?*) + mov r0,#0 end; 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$ - 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 * 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 * empty dummy files + [long|set]jmp implemented -} +} \ No newline at end of file diff --git a/rtl/linux/arm/syscall.inc b/rtl/linux/arm/syscall.inc index 988ece9519..cece080f3f 100644 --- a/rtl/linux/arm/syscall.inc +++ b/rtl/linux/arm/syscall.inc @@ -177,12 +177,31 @@ end; // Old style syscall: // 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 copies back the registers as they are after the SysCall. } 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; {$IFDEF SYSCALL_DEBUG} @@ -241,7 +260,11 @@ end; { $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 * made strscan 64 bit safe @@ -251,4 +274,3 @@ end; Revision 1.1 2003/08/28 00:08:29 florian * syscall skeleton } -