Loading arch/arm/boot/compressed/head.S +1 −1 Original line number Diff line number Diff line Loading @@ -334,7 +334,7 @@ __setup_mmu: sub r3, r4, #16384 @ Page directory size mov r1, #0x12 orr r1, r1, #3 << 10 add r2, r3, #16384 1: cmp r1, r8 @ if virt > start of RAM 1: cmp r1, r9 @ if virt > start of RAM orrhs r1, r1, #0x0c @ set cacheable, bufferable cmp r1, r10 @ if virt > end of RAM bichs r1, r1, #0x0c @ clear cacheable, bufferable Loading arch/arm/kernel/entry-armv.S +4 −1 Original line number Diff line number Diff line Loading @@ -735,8 +735,11 @@ __kuser_cmpxchg: @ 0xffff0fc0 * The kernel itself must perform the operation. * A special ghost syscall is used for that (see traps.c). */ stmfd sp!, {r7, lr} mov r7, #0xff00 @ 0xfff0 into r7 for EABI orr r7, r7, #0xf0 swi #0x9ffff0 mov pc, lr ldmfd sp!, {r7, pc} #elif __LINUX_ARM_ARCH__ < 6 Loading arch/arm/kernel/signal.c +18 −11 Original line number Diff line number Diff line Loading @@ -29,6 +29,12 @@ #define SWI_SYS_SIGRETURN (0xef000000|(__NR_sigreturn)) #define SWI_SYS_RT_SIGRETURN (0xef000000|(__NR_rt_sigreturn)) /* * With EABI, the syscall number has to be loaded into r7. */ #define MOV_R7_NR_SIGRETURN (0xe3a07000 | (__NR_sigreturn - __NR_SYSCALL_BASE)) #define MOV_R7_NR_RT_SIGRETURN (0xe3a07000 | (__NR_rt_sigreturn - __NR_SYSCALL_BASE)) /* * For Thumb syscalls, we pass the syscall number via r7. We therefore * need two 16-bit instructions. Loading @@ -36,9 +42,9 @@ #define SWI_THUMB_SIGRETURN (0xdf00 << 16 | 0x2700 | (__NR_sigreturn - __NR_SYSCALL_BASE)) #define SWI_THUMB_RT_SIGRETURN (0xdf00 << 16 | 0x2700 | (__NR_rt_sigreturn - __NR_SYSCALL_BASE)) const unsigned long sigreturn_codes[4] = { SWI_SYS_SIGRETURN, SWI_THUMB_SIGRETURN, SWI_SYS_RT_SIGRETURN, SWI_THUMB_RT_SIGRETURN const unsigned long sigreturn_codes[7] = { MOV_R7_NR_SIGRETURN, SWI_SYS_SIGRETURN, SWI_THUMB_SIGRETURN, MOV_R7_NR_RT_SIGRETURN, SWI_SYS_RT_SIGRETURN, SWI_THUMB_RT_SIGRETURN, }; static int do_signal(sigset_t *oldset, struct pt_regs * regs, int syscall); Loading Loading @@ -189,7 +195,7 @@ struct aux_sigframe { struct sigframe { struct sigcontext sc; unsigned long extramask[_NSIG_WORDS-1]; unsigned long retcode; unsigned long retcode[2]; struct aux_sigframe aux __attribute__((aligned(8))); }; Loading @@ -198,7 +204,7 @@ struct rt_sigframe { void __user *puc; struct siginfo info; struct ucontext uc; unsigned long retcode; unsigned long retcode[2]; struct aux_sigframe aux __attribute__((aligned(8))); }; Loading Loading @@ -436,12 +442,13 @@ setup_return(struct pt_regs *regs, struct k_sigaction *ka, if (ka->sa.sa_flags & SA_RESTORER) { retcode = (unsigned long)ka->sa.sa_restorer; } else { unsigned int idx = thumb; unsigned int idx = thumb << 1; if (ka->sa.sa_flags & SA_SIGINFO) idx += 2; idx += 3; if (__put_user(sigreturn_codes[idx], rc)) if (__put_user(sigreturn_codes[idx], rc) || __put_user(sigreturn_codes[idx+1], rc+1)) return 1; if (cpsr & MODE32_BIT) { Loading @@ -456,7 +463,7 @@ setup_return(struct pt_regs *regs, struct k_sigaction *ka, * the return code written onto the stack. */ flush_icache_range((unsigned long)rc, (unsigned long)(rc + 1)); (unsigned long)(rc + 2)); retcode = ((unsigned long)rc) + thumb; } Loading Loading @@ -488,7 +495,7 @@ setup_frame(int usig, struct k_sigaction *ka, sigset_t *set, struct pt_regs *reg } if (err == 0) err = setup_return(regs, ka, &frame->retcode, frame, usig); err = setup_return(regs, ka, frame->retcode, frame, usig); return err; } Loading Loading @@ -522,7 +529,7 @@ setup_rt_frame(int usig, struct k_sigaction *ka, siginfo_t *info, err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set)); if (err == 0) err = setup_return(regs, ka, &frame->retcode, frame, usig); err = setup_return(regs, ka, frame->retcode, frame, usig); if (err == 0) { /* Loading arch/arm/kernel/signal.h +1 −1 Original line number Diff line number Diff line Loading @@ -9,4 +9,4 @@ */ #define KERN_SIGRETURN_CODE 0xffff0500 extern const unsigned long sigreturn_codes[4]; extern const unsigned long sigreturn_codes[7]; arch/arm/mach-ixp4xx/common.c +2 −1 Original line number Diff line number Diff line Loading @@ -333,6 +333,7 @@ static struct platform_device *ixp46x_devices[] __initdata = { }; unsigned long ixp4xx_exp_bus_size; EXPORT_SYMBOL(ixp4xx_exp_bus_size); void __init ixp4xx_sys_init(void) { Loading @@ -352,7 +353,7 @@ void __init ixp4xx_sys_init(void) } } printk("IXP4xx: Using %uMiB expansion bus window size\n", printk("IXP4xx: Using %luMiB expansion bus window size\n", ixp4xx_exp_bus_size >> 20); } Loading
arch/arm/boot/compressed/head.S +1 −1 Original line number Diff line number Diff line Loading @@ -334,7 +334,7 @@ __setup_mmu: sub r3, r4, #16384 @ Page directory size mov r1, #0x12 orr r1, r1, #3 << 10 add r2, r3, #16384 1: cmp r1, r8 @ if virt > start of RAM 1: cmp r1, r9 @ if virt > start of RAM orrhs r1, r1, #0x0c @ set cacheable, bufferable cmp r1, r10 @ if virt > end of RAM bichs r1, r1, #0x0c @ clear cacheable, bufferable Loading
arch/arm/kernel/entry-armv.S +4 −1 Original line number Diff line number Diff line Loading @@ -735,8 +735,11 @@ __kuser_cmpxchg: @ 0xffff0fc0 * The kernel itself must perform the operation. * A special ghost syscall is used for that (see traps.c). */ stmfd sp!, {r7, lr} mov r7, #0xff00 @ 0xfff0 into r7 for EABI orr r7, r7, #0xf0 swi #0x9ffff0 mov pc, lr ldmfd sp!, {r7, pc} #elif __LINUX_ARM_ARCH__ < 6 Loading
arch/arm/kernel/signal.c +18 −11 Original line number Diff line number Diff line Loading @@ -29,6 +29,12 @@ #define SWI_SYS_SIGRETURN (0xef000000|(__NR_sigreturn)) #define SWI_SYS_RT_SIGRETURN (0xef000000|(__NR_rt_sigreturn)) /* * With EABI, the syscall number has to be loaded into r7. */ #define MOV_R7_NR_SIGRETURN (0xe3a07000 | (__NR_sigreturn - __NR_SYSCALL_BASE)) #define MOV_R7_NR_RT_SIGRETURN (0xe3a07000 | (__NR_rt_sigreturn - __NR_SYSCALL_BASE)) /* * For Thumb syscalls, we pass the syscall number via r7. We therefore * need two 16-bit instructions. Loading @@ -36,9 +42,9 @@ #define SWI_THUMB_SIGRETURN (0xdf00 << 16 | 0x2700 | (__NR_sigreturn - __NR_SYSCALL_BASE)) #define SWI_THUMB_RT_SIGRETURN (0xdf00 << 16 | 0x2700 | (__NR_rt_sigreturn - __NR_SYSCALL_BASE)) const unsigned long sigreturn_codes[4] = { SWI_SYS_SIGRETURN, SWI_THUMB_SIGRETURN, SWI_SYS_RT_SIGRETURN, SWI_THUMB_RT_SIGRETURN const unsigned long sigreturn_codes[7] = { MOV_R7_NR_SIGRETURN, SWI_SYS_SIGRETURN, SWI_THUMB_SIGRETURN, MOV_R7_NR_RT_SIGRETURN, SWI_SYS_RT_SIGRETURN, SWI_THUMB_RT_SIGRETURN, }; static int do_signal(sigset_t *oldset, struct pt_regs * regs, int syscall); Loading Loading @@ -189,7 +195,7 @@ struct aux_sigframe { struct sigframe { struct sigcontext sc; unsigned long extramask[_NSIG_WORDS-1]; unsigned long retcode; unsigned long retcode[2]; struct aux_sigframe aux __attribute__((aligned(8))); }; Loading @@ -198,7 +204,7 @@ struct rt_sigframe { void __user *puc; struct siginfo info; struct ucontext uc; unsigned long retcode; unsigned long retcode[2]; struct aux_sigframe aux __attribute__((aligned(8))); }; Loading Loading @@ -436,12 +442,13 @@ setup_return(struct pt_regs *regs, struct k_sigaction *ka, if (ka->sa.sa_flags & SA_RESTORER) { retcode = (unsigned long)ka->sa.sa_restorer; } else { unsigned int idx = thumb; unsigned int idx = thumb << 1; if (ka->sa.sa_flags & SA_SIGINFO) idx += 2; idx += 3; if (__put_user(sigreturn_codes[idx], rc)) if (__put_user(sigreturn_codes[idx], rc) || __put_user(sigreturn_codes[idx+1], rc+1)) return 1; if (cpsr & MODE32_BIT) { Loading @@ -456,7 +463,7 @@ setup_return(struct pt_regs *regs, struct k_sigaction *ka, * the return code written onto the stack. */ flush_icache_range((unsigned long)rc, (unsigned long)(rc + 1)); (unsigned long)(rc + 2)); retcode = ((unsigned long)rc) + thumb; } Loading Loading @@ -488,7 +495,7 @@ setup_frame(int usig, struct k_sigaction *ka, sigset_t *set, struct pt_regs *reg } if (err == 0) err = setup_return(regs, ka, &frame->retcode, frame, usig); err = setup_return(regs, ka, frame->retcode, frame, usig); return err; } Loading Loading @@ -522,7 +529,7 @@ setup_rt_frame(int usig, struct k_sigaction *ka, siginfo_t *info, err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set)); if (err == 0) err = setup_return(regs, ka, &frame->retcode, frame, usig); err = setup_return(regs, ka, frame->retcode, frame, usig); if (err == 0) { /* Loading
arch/arm/kernel/signal.h +1 −1 Original line number Diff line number Diff line Loading @@ -9,4 +9,4 @@ */ #define KERN_SIGRETURN_CODE 0xffff0500 extern const unsigned long sigreturn_codes[4]; extern const unsigned long sigreturn_codes[7];
arch/arm/mach-ixp4xx/common.c +2 −1 Original line number Diff line number Diff line Loading @@ -333,6 +333,7 @@ static struct platform_device *ixp46x_devices[] __initdata = { }; unsigned long ixp4xx_exp_bus_size; EXPORT_SYMBOL(ixp4xx_exp_bus_size); void __init ixp4xx_sys_init(void) { Loading @@ -352,7 +353,7 @@ void __init ixp4xx_sys_init(void) } } printk("IXP4xx: Using %uMiB expansion bus window size\n", printk("IXP4xx: Using %luMiB expansion bus window size\n", ixp4xx_exp_bus_size >> 20); }