Root/
1 | /* |
2 | * Copyright (C) 2007-2009 Michal Simek <monstr@monstr.eu> |
3 | * Copyright (C) 2007-2009 PetaLogix |
4 | * Copyright (C) 2007 John Williams <john.williams@petalogix.com> |
5 | * |
6 | * Copyright (C) 2006 Atmark Techno, Inc. |
7 | * Yasushi SHOJI <yashi@atmark-techno.com> |
8 | * Tetsuya OHKAWA <tetsuya@atmark-techno.com> |
9 | * |
10 | * This file is subject to the terms and conditions of the GNU General Public |
11 | * License. See the file "COPYING" in the main directory of this archive |
12 | * for more details. |
13 | */ |
14 | |
15 | #include <linux/errno.h> |
16 | #include <linux/mm.h> |
17 | #include <linux/smp.h> |
18 | #include <linux/syscalls.h> |
19 | #include <linux/sem.h> |
20 | #include <linux/msg.h> |
21 | #include <linux/shm.h> |
22 | #include <linux/stat.h> |
23 | #include <linux/mman.h> |
24 | #include <linux/sys.h> |
25 | #include <linux/ipc.h> |
26 | #include <linux/file.h> |
27 | #include <linux/module.h> |
28 | #include <linux/err.h> |
29 | #include <linux/fs.h> |
30 | #include <linux/semaphore.h> |
31 | #include <linux/uaccess.h> |
32 | #include <linux/unistd.h> |
33 | #include <linux/slab.h> |
34 | |
35 | #include <asm/syscalls.h> |
36 | |
37 | asmlinkage long microblaze_vfork(struct pt_regs *regs) |
38 | { |
39 | return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, regs->r1, |
40 | regs, 0, NULL, NULL); |
41 | } |
42 | |
43 | asmlinkage long microblaze_clone(int flags, unsigned long stack, struct pt_regs *regs) |
44 | { |
45 | if (!stack) |
46 | stack = regs->r1; |
47 | return do_fork(flags, stack, regs, 0, NULL, NULL); |
48 | } |
49 | |
50 | asmlinkage long microblaze_execve(const char __user *filenamei, |
51 | const char __user *const __user *argv, |
52 | const char __user *const __user *envp, |
53 | struct pt_regs *regs) |
54 | { |
55 | int error; |
56 | char *filename; |
57 | |
58 | filename = getname(filenamei); |
59 | error = PTR_ERR(filename); |
60 | if (IS_ERR(filename)) |
61 | goto out; |
62 | error = do_execve(filename, argv, envp, regs); |
63 | putname(filename); |
64 | out: |
65 | return error; |
66 | } |
67 | |
68 | asmlinkage long sys_mmap(unsigned long addr, unsigned long len, |
69 | unsigned long prot, unsigned long flags, |
70 | unsigned long fd, off_t pgoff) |
71 | { |
72 | if (pgoff & ~PAGE_MASK) |
73 | return -EINVAL; |
74 | |
75 | return sys_mmap_pgoff(addr, len, prot, flags, fd, pgoff >> PAGE_SHIFT); |
76 | } |
77 | |
78 | /* |
79 | * Do a system call from kernel instead of calling sys_execve so we |
80 | * end up with proper pt_regs. |
81 | */ |
82 | int kernel_execve(const char *filename, |
83 | const char *const argv[], |
84 | const char *const envp[]) |
85 | { |
86 | register const char *__a __asm__("r5") = filename; |
87 | register const void *__b __asm__("r6") = argv; |
88 | register const void *__c __asm__("r7") = envp; |
89 | register unsigned long __syscall __asm__("r12") = __NR_execve; |
90 | register unsigned long __ret __asm__("r3"); |
91 | __asm__ __volatile__ ("brki r14, 0x8" |
92 | : "=r" (__ret), "=r" (__syscall) |
93 | : "1" (__syscall), "r" (__a), "r" (__b), "r" (__c) |
94 | : "r4", "r8", "r9", |
95 | "r10", "r11", "r14", "cc", "memory"); |
96 | return __ret; |
97 | } |
98 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9