Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | /* |
2 | * linux/arch/h8300/kernel/sys_h8300.c | |
3 | * | |
4 | * This file contains various random system calls that | |
5 | * have a non-standard calling sequence on the H8/300 | |
6 | * platform. | |
7 | */ | |
8 | ||
9 | #include <linux/errno.h> | |
10 | #include <linux/sched.h> | |
11 | #include <linux/mm.h> | |
12 | #include <linux/smp.h> | |
1da177e4 LT |
13 | #include <linux/sem.h> |
14 | #include <linux/msg.h> | |
15 | #include <linux/shm.h> | |
16 | #include <linux/stat.h> | |
17 | #include <linux/syscalls.h> | |
18 | #include <linux/mman.h> | |
19 | #include <linux/file.h> | |
0cd82ef1 | 20 | #include <linux/fs.h> |
cba4fbbf | 21 | #include <linux/ipc.h> |
1da177e4 LT |
22 | |
23 | #include <asm/setup.h> | |
24 | #include <asm/uaccess.h> | |
25 | #include <asm/cachectl.h> | |
26 | #include <asm/traps.h> | |
fe74290d | 27 | #include <asm/unistd.h> |
1da177e4 | 28 | |
1da177e4 LT |
29 | /* sys_cacheflush -- no support. */ |
30 | asmlinkage int | |
31 | sys_cacheflush (unsigned long addr, int scope, int cache, unsigned long len) | |
32 | { | |
33 | return -EINVAL; | |
34 | } | |
35 | ||
36 | asmlinkage int sys_getpagesize(void) | |
37 | { | |
38 | return PAGE_SIZE; | |
39 | } | |
40 | ||
41 | #if defined(CONFIG_SYSCALL_PRINT) | |
42 | asmlinkage void syscall_print(void *dummy,...) | |
43 | { | |
44 | struct pt_regs *regs = (struct pt_regs *) ((unsigned char *)&dummy-4); | |
45 | printk("call %06lx:%ld 1:%08lx,2:%08lx,3:%08lx,ret:%08lx\n", | |
46 | ((regs->pc)&0xffffff)-2,regs->orig_er0,regs->er1,regs->er2,regs->er3,regs->er0); | |
47 | } | |
48 | #endif | |
fe74290d AB |
49 | |
50 | /* | |
51 | * Do a system call from kernel instead of calling sys_execve so we | |
52 | * end up with proper pt_regs. | |
53 | */ | |
d7627467 DH |
54 | int kernel_execve(const char *filename, |
55 | const char *const argv[], | |
56 | const char *const envp[]) | |
fe74290d AB |
57 | { |
58 | register long res __asm__("er0"); | |
1e72910e DH |
59 | register const char *const *_c __asm__("er3") = envp; |
60 | register const char *const *_b __asm__("er2") = argv; | |
fe74290d | 61 | register const char * _a __asm__("er1") = filename; |
fe74290d AB |
62 | __asm__ __volatile__ ("mov.l %1,er0\n\t" |
63 | "trapa #0\n\t" | |
64 | : "=r" (res) | |
65 | : "g" (__NR_execve), | |
66 | "g" (_a), | |
67 | "g" (_b), | |
68 | "g" (_c) | |
69 | : "cc", "memory"); | |
70 | return res; | |
71 | } | |
72 | ||
73 |