diff --git a/arch/arm/src/armv6-m/up_svcall.c b/arch/arm/src/armv6-m/up_svcall.c index fd61de1906f..98377230346 100644 --- a/arch/arm/src/armv6-m/up_svcall.c +++ b/arch/arm/src/armv6-m/up_svcall.c @@ -348,7 +348,7 @@ int up_svcall(int irq, FAR void *context, FAR void *arg) * R1 = sighand * R2 = signo * R3 = info - * ucontext (on the stack) + * R4 = ucontext */ #if defined(CONFIG_BUILD_PROTECTED) && !defined(CONFIG_DISABLE_SIGNALS) @@ -375,12 +375,7 @@ int up_svcall(int irq, FAR void *context, FAR void *arg) regs[REG_R0] = regs[REG_R1]; /* sighand */ regs[REG_R1] = regs[REG_R2]; /* signal */ regs[REG_R2] = regs[REG_R3]; /* info */ - - /* The last parameter, ucontext, is trickier. The ucontext - * parameter will reside at an offset of 4 from the stack pointer. - */ - - regs[REG_R3] = *(uint32_t *)(regs[REG_SP]+4); + regs[REG_R3] = regs[REG_R4]; /* ucontext */ } break; #endif diff --git a/arch/arm/src/armv7-a/arm_syscall.c b/arch/arm/src/armv7-a/arm_syscall.c index 77b33b45f4b..7b95e4935b3 100644 --- a/arch/arm/src/armv7-a/arm_syscall.c +++ b/arch/arm/src/armv7-a/arm_syscall.c @@ -350,12 +350,7 @@ uint32_t *arm_syscall(uint32_t *regs) regs[REG_R0] = regs[REG_R1]; /* sighand */ regs[REG_R1] = regs[REG_R2]; /* signal */ regs[REG_R2] = regs[REG_R3]; /* info */ - - /* The last parameter, ucontext, is trickier. The ucontext - * parameter will reside at an offset of 4 from the stack pointer. - */ - - regs[REG_R3] = *(uint32_t *)(regs[REG_SP]+4); + regs[REG_R3] = regs[REG_R4]; /* ucontext */ #ifdef CONFIG_ARCH_KERNEL_STACK /* If we are signalling a user process, then we must be operating diff --git a/arch/arm/src/armv7-m/up_svcall.c b/arch/arm/src/armv7-m/up_svcall.c index be91eff109a..d549edc9590 100644 --- a/arch/arm/src/armv7-m/up_svcall.c +++ b/arch/arm/src/armv7-m/up_svcall.c @@ -348,7 +348,7 @@ int up_svcall(int irq, FAR void *context, FAR void *arg) * R1 = sighand * R2 = signo * R3 = info - * ucontext (on the stack) + * R4 = ucontext */ #if defined(CONFIG_BUILD_PROTECTED) && !defined(CONFIG_DISABLE_SIGNALS) @@ -375,12 +375,7 @@ int up_svcall(int irq, FAR void *context, FAR void *arg) regs[REG_R0] = regs[REG_R1]; /* sighand */ regs[REG_R1] = regs[REG_R2]; /* signal */ regs[REG_R2] = regs[REG_R3]; /* info */ - - /* The last parameter, ucontext, is trickier. The ucontext - * parameter will reside at an offset of 4 from the stack pointer. - */ - - regs[REG_R3] = *(uint32_t *)(regs[REG_SP]+4); + regs[REG_R3] = regs[REG_R4]; /* ucontext */ } break; #endif diff --git a/arch/arm/src/armv7-r/arm_syscall.c b/arch/arm/src/armv7-r/arm_syscall.c index 49290d5509e..26168ce4b5c 100644 --- a/arch/arm/src/armv7-r/arm_syscall.c +++ b/arch/arm/src/armv7-r/arm_syscall.c @@ -322,7 +322,7 @@ uint32_t *arm_syscall(uint32_t *regs) * R1 = sighand * R2 = signo * R3 = info - * ucontext (on the stack) + * R4 = ucontext */ case SYS_signal_handler: @@ -348,12 +348,7 @@ uint32_t *arm_syscall(uint32_t *regs) regs[REG_R0] = regs[REG_R1]; /* sighand */ regs[REG_R1] = regs[REG_R2]; /* signal */ regs[REG_R2] = regs[REG_R3]; /* info */ - - /* The last parameter, ucontext, is trickier. The ucontext - * parameter will reside at an offset of 4 from the stack pointer. - */ - - regs[REG_R3] = *(uint32_t *)(regs[REG_SP]+4); + regs[REG_R3] = regs[REG_R4]; /* ucontext */ #ifdef CONFIG_ARCH_KERNEL_STACK /* If we are signalling a user process, then we must be operating