Loading arch/arm/Kconfig +1 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ config ARM select GENERIC_STRNLEN_USER select DCACHE_WORD_ACCESS if (CPU_V6 || CPU_V6K || CPU_V7) && !CPU_BIG_ENDIAN select GENERIC_KERNEL_THREAD select GENERIC_KERNEL_EXECVE help The ARM series is a line of low-power-consumption RISC chip designs licensed by ARM Ltd and targeted at embedded applications and Loading arch/arm/include/asm/unistd.h +0 −1 Original line number Diff line number Diff line Loading @@ -470,7 +470,6 @@ #define __ARCH_WANT_SYS_SOCKETCALL #endif #define __ARCH_WANT_SYS_EXECVE #define __ARCH_WANT_KERNEL_EXECVE /* * "Conditional" syscalls Loading arch/arm/kernel/entry-common.S +4 −25 Original line number Diff line number Diff line Loading @@ -86,35 +86,14 @@ ENDPROC(ret_to_user) */ ENTRY(ret_from_fork) bl schedule_tail cmp r5, #0 movne r0, r4 movne lr, pc movne pc, r5 get_thread_info tsk mov why, #1 b ret_slow_syscall ENDPROC(ret_from_fork) ENTRY(ret_from_kernel_thread) UNWIND(.fnstart) UNWIND(.cantunwind) bl schedule_tail mov r0, r4 adr lr, BSYM(1f) @ kernel threads should not exit mov pc, r5 1: bl do_exit nop UNWIND(.fnend) ENDPROC(ret_from_kernel_thread) /* * turn a kernel thread into userland process * use: ret_from_kernel_execve(struct pt_regs *normal) */ ENTRY(ret_from_kernel_execve) mov why, #0 @ not a syscall str why, [r0, #S_R0] @ ... and we want 0 in ->ARM_r0 as well get_thread_info tsk @ thread structure mov sp, r0 @ stack pointer just under pt_regs b ret_slow_syscall ENDPROC(ret_from_kernel_execve) .equ NR_syscalls,0 #define CALL(x) .equ NR_syscalls,NR_syscalls+1 #include "calls.S" Loading arch/arm/kernel/process.c +2 −3 Original line number Diff line number Diff line Loading @@ -373,7 +373,6 @@ void release_thread(struct task_struct *dead_task) } asmlinkage void ret_from_fork(void) __asm__("ret_from_fork"); asmlinkage void ret_from_kernel_thread(void) __asm__("ret_from_kernel_thread"); int copy_thread(unsigned long clone_flags, unsigned long stack_start, Loading @@ -388,13 +387,13 @@ copy_thread(unsigned long clone_flags, unsigned long stack_start, *childregs = *regs; childregs->ARM_r0 = 0; childregs->ARM_sp = stack_start; thread->cpu_context.pc = (unsigned long)ret_from_fork; } else { memset(childregs, 0, sizeof(struct pt_regs)); thread->cpu_context.r4 = stk_sz; thread->cpu_context.r5 = stack_start; thread->cpu_context.pc = (unsigned long)ret_from_kernel_thread; childregs->ARM_cpsr = SVC_MODE; } thread->cpu_context.pc = (unsigned long)ret_from_fork; thread->cpu_context.sp = (unsigned long)childregs; clear_ptrace_hw_breakpoint(p); Loading Loading
arch/arm/Kconfig +1 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ config ARM select GENERIC_STRNLEN_USER select DCACHE_WORD_ACCESS if (CPU_V6 || CPU_V6K || CPU_V7) && !CPU_BIG_ENDIAN select GENERIC_KERNEL_THREAD select GENERIC_KERNEL_EXECVE help The ARM series is a line of low-power-consumption RISC chip designs licensed by ARM Ltd and targeted at embedded applications and Loading
arch/arm/include/asm/unistd.h +0 −1 Original line number Diff line number Diff line Loading @@ -470,7 +470,6 @@ #define __ARCH_WANT_SYS_SOCKETCALL #endif #define __ARCH_WANT_SYS_EXECVE #define __ARCH_WANT_KERNEL_EXECVE /* * "Conditional" syscalls Loading
arch/arm/kernel/entry-common.S +4 −25 Original line number Diff line number Diff line Loading @@ -86,35 +86,14 @@ ENDPROC(ret_to_user) */ ENTRY(ret_from_fork) bl schedule_tail cmp r5, #0 movne r0, r4 movne lr, pc movne pc, r5 get_thread_info tsk mov why, #1 b ret_slow_syscall ENDPROC(ret_from_fork) ENTRY(ret_from_kernel_thread) UNWIND(.fnstart) UNWIND(.cantunwind) bl schedule_tail mov r0, r4 adr lr, BSYM(1f) @ kernel threads should not exit mov pc, r5 1: bl do_exit nop UNWIND(.fnend) ENDPROC(ret_from_kernel_thread) /* * turn a kernel thread into userland process * use: ret_from_kernel_execve(struct pt_regs *normal) */ ENTRY(ret_from_kernel_execve) mov why, #0 @ not a syscall str why, [r0, #S_R0] @ ... and we want 0 in ->ARM_r0 as well get_thread_info tsk @ thread structure mov sp, r0 @ stack pointer just under pt_regs b ret_slow_syscall ENDPROC(ret_from_kernel_execve) .equ NR_syscalls,0 #define CALL(x) .equ NR_syscalls,NR_syscalls+1 #include "calls.S" Loading
arch/arm/kernel/process.c +2 −3 Original line number Diff line number Diff line Loading @@ -373,7 +373,6 @@ void release_thread(struct task_struct *dead_task) } asmlinkage void ret_from_fork(void) __asm__("ret_from_fork"); asmlinkage void ret_from_kernel_thread(void) __asm__("ret_from_kernel_thread"); int copy_thread(unsigned long clone_flags, unsigned long stack_start, Loading @@ -388,13 +387,13 @@ copy_thread(unsigned long clone_flags, unsigned long stack_start, *childregs = *regs; childregs->ARM_r0 = 0; childregs->ARM_sp = stack_start; thread->cpu_context.pc = (unsigned long)ret_from_fork; } else { memset(childregs, 0, sizeof(struct pt_regs)); thread->cpu_context.r4 = stk_sz; thread->cpu_context.r5 = stack_start; thread->cpu_context.pc = (unsigned long)ret_from_kernel_thread; childregs->ARM_cpsr = SVC_MODE; } thread->cpu_context.pc = (unsigned long)ret_from_fork; thread->cpu_context.sp = (unsigned long)childregs; clear_ptrace_hw_breakpoint(p); Loading