Loading arch/powerpc/Kconfig +1 −0 Original line number Diff line number Diff line Loading @@ -144,6 +144,7 @@ config PPC select GENERIC_KERNEL_THREAD select HAVE_MOD_ARCH_SPECIFIC select MODULES_USE_ELF_RELA select GENERIC_KERNEL_EXECVE config EARLY_PRINTK bool Loading arch/powerpc/include/asm/unistd.h +0 −1 Original line number Diff line number Diff line Loading @@ -56,7 +56,6 @@ #define __ARCH_WANT_COMPAT_SYS_SENDFILE #endif #define __ARCH_WANT_SYS_EXECVE #define __ARCH_WANT_KERNEL_EXECVE /* * "Conditional" syscalls Loading arch/powerpc/kernel/entry_32.S +0 −5 Original line number Diff line number Diff line Loading @@ -444,11 +444,6 @@ ret_from_kernel_thread: PPC440EP_ERR42 blrl li r3,0 b do_exit # no return .globl __ret_from_kernel_execve __ret_from_kernel_execve: addi r1,r3,-STACK_FRAME_OVERHEAD b ret_from_syscall /* Traced system call support */ Loading arch/powerpc/kernel/entry_64.S +0 −6 Original line number Diff line number Diff line Loading @@ -378,12 +378,6 @@ _GLOBAL(ret_from_kernel_thread) mr r3,r15 blrl li r3,0 b .do_exit # no return _GLOBAL(__ret_from_kernel_execve) addi r1,r3,-STACK_FRAME_OVERHEAD li r10,1 std r10,SOFTE(r1) b syscall_exit .section ".toc","aw" Loading arch/powerpc/kernel/process.c +3 −10 Original line number Diff line number Diff line Loading @@ -746,19 +746,21 @@ int copy_thread(unsigned long clone_flags, unsigned long usp, sp -= sizeof(struct pt_regs); childregs = (struct pt_regs *) sp; if (!regs) { /* for kernel thread, set `current' and stackptr in new task */ struct thread_info *ti = (void *)task_stack_page(p); memset(childregs, 0, sizeof(struct pt_regs)); childregs->gpr[1] = sp + sizeof(struct pt_regs); #ifdef CONFIG_PPC64 childregs->gpr[14] = *(unsigned long *)usp; childregs->gpr[2] = ((unsigned long *)usp)[1], clear_tsk_thread_flag(p, TIF_32BIT); childregs->softe = 1; #else childregs->gpr[14] = usp; /* function */ childregs->gpr[2] = (unsigned long) p; #endif childregs->gpr[15] = arg; p->thread.regs = NULL; /* no user register state */ ti->flags |= _TIF_RESTOREALL; f = ret_from_kernel_thread; } else { CHECK_FULL_REGS(regs); Loading Loading @@ -1063,15 +1065,6 @@ int sys_vfork(unsigned long p1, unsigned long p2, unsigned long p3, regs, 0, NULL, NULL); } void __ret_from_kernel_execve(struct pt_regs *normal) __noreturn; void ret_from_kernel_execve(struct pt_regs *normal) { set_thread_flag(TIF_RESTOREALL); __ret_from_kernel_execve(normal); } static inline int valid_irq_stack(unsigned long sp, struct task_struct *p, unsigned long nbytes) { Loading Loading
arch/powerpc/Kconfig +1 −0 Original line number Diff line number Diff line Loading @@ -144,6 +144,7 @@ config PPC select GENERIC_KERNEL_THREAD select HAVE_MOD_ARCH_SPECIFIC select MODULES_USE_ELF_RELA select GENERIC_KERNEL_EXECVE config EARLY_PRINTK bool Loading
arch/powerpc/include/asm/unistd.h +0 −1 Original line number Diff line number Diff line Loading @@ -56,7 +56,6 @@ #define __ARCH_WANT_COMPAT_SYS_SENDFILE #endif #define __ARCH_WANT_SYS_EXECVE #define __ARCH_WANT_KERNEL_EXECVE /* * "Conditional" syscalls Loading
arch/powerpc/kernel/entry_32.S +0 −5 Original line number Diff line number Diff line Loading @@ -444,11 +444,6 @@ ret_from_kernel_thread: PPC440EP_ERR42 blrl li r3,0 b do_exit # no return .globl __ret_from_kernel_execve __ret_from_kernel_execve: addi r1,r3,-STACK_FRAME_OVERHEAD b ret_from_syscall /* Traced system call support */ Loading
arch/powerpc/kernel/entry_64.S +0 −6 Original line number Diff line number Diff line Loading @@ -378,12 +378,6 @@ _GLOBAL(ret_from_kernel_thread) mr r3,r15 blrl li r3,0 b .do_exit # no return _GLOBAL(__ret_from_kernel_execve) addi r1,r3,-STACK_FRAME_OVERHEAD li r10,1 std r10,SOFTE(r1) b syscall_exit .section ".toc","aw" Loading
arch/powerpc/kernel/process.c +3 −10 Original line number Diff line number Diff line Loading @@ -746,19 +746,21 @@ int copy_thread(unsigned long clone_flags, unsigned long usp, sp -= sizeof(struct pt_regs); childregs = (struct pt_regs *) sp; if (!regs) { /* for kernel thread, set `current' and stackptr in new task */ struct thread_info *ti = (void *)task_stack_page(p); memset(childregs, 0, sizeof(struct pt_regs)); childregs->gpr[1] = sp + sizeof(struct pt_regs); #ifdef CONFIG_PPC64 childregs->gpr[14] = *(unsigned long *)usp; childregs->gpr[2] = ((unsigned long *)usp)[1], clear_tsk_thread_flag(p, TIF_32BIT); childregs->softe = 1; #else childregs->gpr[14] = usp; /* function */ childregs->gpr[2] = (unsigned long) p; #endif childregs->gpr[15] = arg; p->thread.regs = NULL; /* no user register state */ ti->flags |= _TIF_RESTOREALL; f = ret_from_kernel_thread; } else { CHECK_FULL_REGS(regs); Loading Loading @@ -1063,15 +1065,6 @@ int sys_vfork(unsigned long p1, unsigned long p2, unsigned long p3, regs, 0, NULL, NULL); } void __ret_from_kernel_execve(struct pt_regs *normal) __noreturn; void ret_from_kernel_execve(struct pt_regs *normal) { set_thread_flag(TIF_RESTOREALL); __ret_from_kernel_execve(normal); } static inline int valid_irq_stack(unsigned long sp, struct task_struct *p, unsigned long nbytes) { Loading