Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

alpha: introduce ret_from_kernel_execve(), switch to generic kernel_execve()

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

Al Viro 44f4b56b cba1ec7e

+14 -19
+1
arch/alpha/include/asm/unistd.h
··· 482 482 #define __ARCH_WANT_SYS_SIGPENDING 483 483 #define __ARCH_WANT_SYS_RT_SIGSUSPEND 484 484 #define __ARCH_WANT_SYS_EXECVE 485 + #define __ARCH_WANT_KERNEL_EXECVE 485 486 486 487 /* "Conditional" syscalls. What we want is 487 488
+13
arch/alpha/kernel/entry.S
··· 626 626 jmp $31, sys_exit 627 627 .end ret_from_kernel_thread 628 628 629 + .globl ret_from_kernel_execve 630 + .align 4 631 + .ent ret_from_kernel_execve 632 + ret_from_kernel_execve: 633 + mov $16, $sp 634 + /* Avoid the HAE being gratuitously wrong, to avoid restoring it. */ 635 + ldq $2, alpha_mv+HAE_CACHE 636 + stq $2, 152($sp) /* HAE */ 637 + mov $31, $19 /* to disable syscall restarts */ 638 + br $31, ret_to_user 639 + 640 + .end ret_from_kernel_execve 641 + 629 642 630 643 /* 631 644 * Special system calls. Most of these are special in that they either
-19
arch/alpha/kernel/process.c
··· 435 435 } 436 436 return pc; 437 437 } 438 - 439 - int kernel_execve(const char *path, const char *const argv[], const char *const envp[]) 440 - { 441 - /* Avoid the HAE being gratuitously wrong, which would cause us 442 - to do the whole turn off interrupts thing and restore it. */ 443 - struct pt_regs regs = {.hae = alpha_mv.hae_cache}; 444 - int err = do_execve(path, argv, envp, &regs); 445 - if (!err) { 446 - struct pt_regs *p = current_pt_regs(); 447 - /* copy regs to normal position and off to userland we go... */ 448 - *p = regs; 449 - __asm__ __volatile__ ( 450 - "mov %0, $sp;" 451 - "br $31, ret_from_sys_call" 452 - : : "r"(p)); 453 - } 454 - return err; 455 - } 456 - EXPORT_SYMBOL(kernel_execve);