From 7ac0a7a4ec40f74756ad01859161d58128823f97 Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Mon, 15 Sep 2014 10:55:10 -0600 Subject: [PATCH] Fix a typo in system call when fetching parameter from the stack: regs[REG_PC]+4 is the address, not regs[REG_PC+4] --- arch/arm/src/armv6-m/up_svcall.c | 2 +- arch/arm/src/armv7-a/arm_syscall.c | 2 +- arch/arm/src/armv7-m/up_svcall.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/arch/arm/src/armv6-m/up_svcall.c b/arch/arm/src/armv6-m/up_svcall.c index ac5e89d7bb..1151c480e9 100644 --- a/arch/arm/src/armv6-m/up_svcall.c +++ b/arch/arm/src/armv6-m/up_svcall.c @@ -407,7 +407,7 @@ int up_svcall(int irq, FAR void *context) * parameter will reside at an offset of 4 from the stack pointer. */ - regs[REG_R3] = *(uint32_t*)(regs[REG_SP+4]); + regs[REG_R3] = *(uint32_t*)(regs[REG_SP]+4); } break; #endif diff --git a/arch/arm/src/armv7-a/arm_syscall.c b/arch/arm/src/armv7-a/arm_syscall.c index 9fb46f3882..7be976ae07 100644 --- a/arch/arm/src/armv7-a/arm_syscall.c +++ b/arch/arm/src/armv7-a/arm_syscall.c @@ -378,7 +378,7 @@ uint32_t *arm_syscall(uint32_t *regs) * parameter will reside at an offset of 4 from the stack pointer. */ - regs[REG_R3] = *(uint32_t*)(regs[REG_SP+4]); + regs[REG_R3] = *(uint32_t*)(regs[REG_SP]+4); } break; #endif diff --git a/arch/arm/src/armv7-m/up_svcall.c b/arch/arm/src/armv7-m/up_svcall.c index ada12e61a0..e0f0e3aeac 100644 --- a/arch/arm/src/armv7-m/up_svcall.c +++ b/arch/arm/src/armv7-m/up_svcall.c @@ -407,7 +407,7 @@ int up_svcall(int irq, FAR void *context) * parameter will reside at an offset of 4 from the stack pointer. */ - regs[REG_R3] = *(uint32_t*)(regs[REG_SP+4]); + regs[REG_R3] = *(uint32_t*)(regs[REG_SP]+4); } break; #endif