From 9667a4859d6768030c1bb635afb88a153d5793de Mon Sep 17 00:00:00 2001 From: NicJA Date: Wed, 16 Jan 2013 21:03:14 +0000 Subject: [PATCH] poor r0 was neglected when caching the current tasks registers... fix the swi handler getting lost by clearing fp before entering the c function (todo: correctly store the necessary framepointer data on the stack for gcc to use) git-svn-id: https://svn.aros.org/svn/aros/trunk/AROS@46304 fb15a70f-31f2-0310-bbcc-cdcc74a49acc --- arch/arm-raspi/kernel/syscall.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/arch/arm-raspi/kernel/syscall.c b/arch/arm-raspi/kernel/syscall.c index 2405bf5d74..b0548eb59d 100644 --- a/arch/arm-raspi/kernel/syscall.c +++ b/arch/arm-raspi/kernel/syscall.c @@ -42,13 +42,14 @@ asm (".globl __intrhand_swi\n\t" " str r1, [sp, #13*4] \n" " ldr r1, [sp, #1*4] \n" // restore r1 .. " ldr r2, [sp, #2*4] \n" // .. and r2 .. + " mov fp, #0 \n" // clear fp(??) " bl handle_syscall \n" " ldr lr, [sp, #14*4] \n" // restore lr " ldr r2, [sp, #15*4] \n" // restore spsr " msr spsr_c, r2 \n" " ldmfd sp!, {r0-r12} \n" // restore registers " add sp, sp, #12 \n" // correct the stack pointer .. - " mov pc, lr \n" // ..and return + " movs pc, lr \n" // ..and return ); void core_Cause(unsigned char n, unsigned int mask) @@ -99,7 +100,7 @@ void handle_syscall(void *regs) int i; D(bug(", ExceptionContext @ 0x%p\n", ctx)); - for (i = 1; i < 12; i++) + for (i = 0; i < 12; i++) { ctx->r[i] = ((uint32_t *)regs)[i]; D(bug("[KRN] r%02d: 0x%08x\n", i, ctx->r[i])); -- 2.11.4.GIT