]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/sparc/kernel/sys_sparc.c
[SPARC]: Fix build in arch/sparc/kernel/led.c
[linux-2.6-omap-h63xx.git] / arch / sparc / kernel / sys_sparc.c
index 896863fb208a1a3e61f83f60b6f45860c4076115..42bf09db9a81ffaa11972289daffcb884fa22225 100644 (file)
 #include <linux/utsname.h>
 #include <linux/smp.h>
 #include <linux/smp_lock.h>
+#include <linux/ipc.h>
 
 #include <asm/uaccess.h>
-#include <asm/ipc.h>
+#include <asm/unistd.h>
 
 /* #define DEBUG_UNIMP_SYSCALL */
 
@@ -356,7 +357,7 @@ c_sys_nis_syscall (struct pt_regs *regs)
        if (count++ > 5)
                return -ENOSYS;
        printk ("%s[%d]: Unimplemented SPARC system call %d\n",
-               current->comm, current->pid, (int)regs->u_regs[1]);
+               current->comm, task_pid_nr(current), (int)regs->u_regs[1]);
 #ifdef DEBUG_UNIMP_SYSCALL     
        show_regs (regs);
 #endif
@@ -475,16 +476,38 @@ asmlinkage int sys_getdomainname(char __user *name, int len)
 
        down_read(&uts_sem);
        
-       nlen = strlen(system_utsname.domainname) + 1;
+       nlen = strlen(utsname()->domainname) + 1;
        err = -EINVAL;
        if (nlen > len)
                goto out;
 
        err = -EFAULT;
-       if (!copy_to_user(name, system_utsname.domainname, nlen))
+       if (!copy_to_user(name, utsname()->domainname, nlen))
                err = 0;
 
 out:
        up_read(&uts_sem);
        return err;
 }
+
+/*
+ * Do a system call from kernel instead of calling sys_execve so we
+ * end up with proper pt_regs.
+ */
+int kernel_execve(const char *filename, char *const argv[], char *const envp[])
+{
+       long __res;
+       register long __g1 __asm__ ("g1") = __NR_execve;
+       register long __o0 __asm__ ("o0") = (long)(filename);
+       register long __o1 __asm__ ("o1") = (long)(argv);
+       register long __o2 __asm__ ("o2") = (long)(envp);
+       asm volatile ("t 0x10\n\t"
+                     "bcc 1f\n\t"
+                     "mov %%o0, %0\n\t"
+                     "sub %%g0, %%o0, %0\n\t"
+                     "1:\n\t"
+                     : "=r" (__res), "=&r" (__o0)
+                     : "1" (__o0), "r" (__o1), "r" (__o2), "r" (__g1)
+                     : "cc");
+       return __res;
+}