diff options
Diffstat (limited to 'arch/m68knommu/kernel')
-rw-r--r-- | arch/m68knommu/kernel/ptrace.c | 74 | ||||
-rw-r--r-- | arch/m68knommu/kernel/sys_m68k.c | 136 | ||||
-rw-r--r-- | arch/m68knommu/kernel/syscalltable.S | 4 |
3 files changed, 3 insertions, 211 deletions
diff --git a/arch/m68knommu/kernel/ptrace.c b/arch/m68knommu/kernel/ptrace.c index 85ed2f988f98..f6be1248d216 100644 --- a/arch/m68knommu/kernel/ptrace.c +++ b/arch/m68knommu/kernel/ptrace.c | |||
@@ -116,12 +116,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
116 | int ret; | 116 | int ret; |
117 | 117 | ||
118 | switch (request) { | 118 | switch (request) { |
119 | /* when I and D space are separate, these will need to be fixed. */ | ||
120 | case PTRACE_PEEKTEXT: /* read word at location addr. */ | ||
121 | case PTRACE_PEEKDATA: | ||
122 | ret = generic_ptrace_peekdata(child, addr, data); | ||
123 | break; | ||
124 | |||
125 | /* read the word at location addr in the USER area. */ | 119 | /* read the word at location addr in the USER area. */ |
126 | case PTRACE_PEEKUSR: { | 120 | case PTRACE_PEEKUSR: { |
127 | unsigned long tmp; | 121 | unsigned long tmp; |
@@ -160,12 +154,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
160 | break; | 154 | break; |
161 | } | 155 | } |
162 | 156 | ||
163 | /* when I and D space are separate, this will have to be fixed. */ | ||
164 | case PTRACE_POKETEXT: /* write the word at location addr. */ | ||
165 | case PTRACE_POKEDATA: | ||
166 | ret = generic_ptrace_pokedata(child, addr, data); | ||
167 | break; | ||
168 | |||
169 | case PTRACE_POKEUSR: /* write the word at location addr in the USER area */ | 157 | case PTRACE_POKEUSR: /* write the word at location addr in the USER area */ |
170 | ret = -EIO; | 158 | ret = -EIO; |
171 | if ((addr & 3) || addr < 0 || | 159 | if ((addr & 3) || addr < 0 || |
@@ -202,66 +190,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
202 | } | 190 | } |
203 | break; | 191 | break; |
204 | 192 | ||
205 | case PTRACE_SYSCALL: /* continue and stop at next (return from) syscall */ | ||
206 | case PTRACE_CONT: { /* restart after signal. */ | ||
207 | long tmp; | ||
208 | |||
209 | ret = -EIO; | ||
210 | if (!valid_signal(data)) | ||
211 | break; | ||
212 | if (request == PTRACE_SYSCALL) | ||
213 | set_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
214 | else | ||
215 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
216 | child->exit_code = data; | ||
217 | /* make sure the single step bit is not set. */ | ||
218 | tmp = get_reg(child, PT_SR) & ~(TRACE_BITS << 16); | ||
219 | put_reg(child, PT_SR, tmp); | ||
220 | wake_up_process(child); | ||
221 | ret = 0; | ||
222 | break; | ||
223 | } | ||
224 | |||
225 | /* | ||
226 | * make the child exit. Best I can do is send it a sigkill. | ||
227 | * perhaps it should be put in the status that it wants to | ||
228 | * exit. | ||
229 | */ | ||
230 | case PTRACE_KILL: { | ||
231 | long tmp; | ||
232 | |||
233 | ret = 0; | ||
234 | if (child->exit_state == EXIT_ZOMBIE) /* already dead */ | ||
235 | break; | ||
236 | child->exit_code = SIGKILL; | ||
237 | /* make sure the single step bit is not set. */ | ||
238 | tmp = get_reg(child, PT_SR) & ~(TRACE_BITS << 16); | ||
239 | put_reg(child, PT_SR, tmp); | ||
240 | wake_up_process(child); | ||
241 | break; | ||
242 | } | ||
243 | |||
244 | case PTRACE_SINGLESTEP: { /* set the trap flag. */ | ||
245 | long tmp; | ||
246 | |||
247 | ret = -EIO; | ||
248 | if (!valid_signal(data)) | ||
249 | break; | ||
250 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
251 | tmp = get_reg(child, PT_SR) | (TRACE_BITS << 16); | ||
252 | put_reg(child, PT_SR, tmp); | ||
253 | |||
254 | child->exit_code = data; | ||
255 | /* give it a chance to run. */ | ||
256 | wake_up_process(child); | ||
257 | ret = 0; | ||
258 | break; | ||
259 | } | ||
260 | |||
261 | case PTRACE_DETACH: /* detach a process that was attached. */ | ||
262 | ret = ptrace_detach(child, data); | ||
263 | break; | ||
264 | |||
265 | case PTRACE_GETREGS: { /* Get all gp regs from the child. */ | 193 | case PTRACE_GETREGS: { /* Get all gp regs from the child. */ |
266 | int i; | 194 | int i; |
267 | unsigned long tmp; | 195 | unsigned long tmp; |
@@ -325,7 +253,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
325 | break; | 253 | break; |
326 | 254 | ||
327 | default: | 255 | default: |
328 | ret = -EIO; | 256 | ret = ptrace_request(child, request, addr, data); |
329 | break; | 257 | break; |
330 | } | 258 | } |
331 | return ret; | 259 | return ret; |
diff --git a/arch/m68knommu/kernel/sys_m68k.c b/arch/m68knommu/kernel/sys_m68k.c index 923dd4aab875..d65e9c4c930c 100644 --- a/arch/m68knommu/kernel/sys_m68k.c +++ b/arch/m68knommu/kernel/sys_m68k.c | |||
@@ -27,142 +27,6 @@ | |||
27 | #include <asm/cacheflush.h> | 27 | #include <asm/cacheflush.h> |
28 | #include <asm/unistd.h> | 28 | #include <asm/unistd.h> |
29 | 29 | ||
30 | /* | ||
31 | * Perform the select(nd, in, out, ex, tv) and mmap() system | ||
32 | * calls. Linux/m68k cloned Linux/i386, which didn't use to be able to | ||
33 | * handle more than 4 system call parameters, so these system calls | ||
34 | * used a memory block for parameter passing.. | ||
35 | */ | ||
36 | |||
37 | struct mmap_arg_struct { | ||
38 | unsigned long addr; | ||
39 | unsigned long len; | ||
40 | unsigned long prot; | ||
41 | unsigned long flags; | ||
42 | unsigned long fd; | ||
43 | unsigned long offset; | ||
44 | }; | ||
45 | |||
46 | asmlinkage int old_mmap(struct mmap_arg_struct *arg) | ||
47 | { | ||
48 | struct mmap_arg_struct a; | ||
49 | int error = -EFAULT; | ||
50 | |||
51 | if (copy_from_user(&a, arg, sizeof(a))) | ||
52 | goto out; | ||
53 | |||
54 | error = -EINVAL; | ||
55 | if (a.offset & ~PAGE_MASK) | ||
56 | goto out; | ||
57 | |||
58 | error = sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, | ||
59 | a.offset >> PAGE_SHIFT); | ||
60 | out: | ||
61 | return error; | ||
62 | } | ||
63 | |||
64 | struct sel_arg_struct { | ||
65 | unsigned long n; | ||
66 | fd_set *inp, *outp, *exp; | ||
67 | struct timeval *tvp; | ||
68 | }; | ||
69 | |||
70 | asmlinkage int old_select(struct sel_arg_struct *arg) | ||
71 | { | ||
72 | struct sel_arg_struct a; | ||
73 | |||
74 | if (copy_from_user(&a, arg, sizeof(a))) | ||
75 | return -EFAULT; | ||
76 | /* sys_select() does the appropriate kernel locking */ | ||
77 | return sys_select(a.n, a.inp, a.outp, a.exp, a.tvp); | ||
78 | } | ||
79 | |||
80 | /* | ||
81 | * sys_ipc() is the de-multiplexer for the SysV IPC calls.. | ||
82 | * | ||
83 | * This is really horribly ugly. | ||
84 | */ | ||
85 | asmlinkage int sys_ipc (uint call, int first, int second, | ||
86 | int third, void *ptr, long fifth) | ||
87 | { | ||
88 | int version, ret; | ||
89 | |||
90 | version = call >> 16; /* hack for backward compatibility */ | ||
91 | call &= 0xffff; | ||
92 | |||
93 | if (call <= SEMCTL) | ||
94 | switch (call) { | ||
95 | case SEMOP: | ||
96 | return sys_semop (first, (struct sembuf *)ptr, second); | ||
97 | case SEMGET: | ||
98 | return sys_semget (first, second, third); | ||
99 | case SEMCTL: { | ||
100 | union semun fourth; | ||
101 | if (!ptr) | ||
102 | return -EINVAL; | ||
103 | if (get_user(fourth.__pad, (void **) ptr)) | ||
104 | return -EFAULT; | ||
105 | return sys_semctl (first, second, third, fourth); | ||
106 | } | ||
107 | default: | ||
108 | return -EINVAL; | ||
109 | } | ||
110 | if (call <= MSGCTL) | ||
111 | switch (call) { | ||
112 | case MSGSND: | ||
113 | return sys_msgsnd (first, (struct msgbuf *) ptr, | ||
114 | second, third); | ||
115 | case MSGRCV: | ||
116 | switch (version) { | ||
117 | case 0: { | ||
118 | struct ipc_kludge tmp; | ||
119 | if (!ptr) | ||
120 | return -EINVAL; | ||
121 | if (copy_from_user (&tmp, | ||
122 | (struct ipc_kludge *)ptr, | ||
123 | sizeof (tmp))) | ||
124 | return -EFAULT; | ||
125 | return sys_msgrcv (first, tmp.msgp, second, | ||
126 | tmp.msgtyp, third); | ||
127 | } | ||
128 | default: | ||
129 | return sys_msgrcv (first, | ||
130 | (struct msgbuf *) ptr, | ||
131 | second, fifth, third); | ||
132 | } | ||
133 | case MSGGET: | ||
134 | return sys_msgget ((key_t) first, second); | ||
135 | case MSGCTL: | ||
136 | return sys_msgctl (first, second, | ||
137 | (struct msqid_ds *) ptr); | ||
138 | default: | ||
139 | return -EINVAL; | ||
140 | } | ||
141 | if (call <= SHMCTL) | ||
142 | switch (call) { | ||
143 | case SHMAT: | ||
144 | switch (version) { | ||
145 | default: { | ||
146 | ulong raddr; | ||
147 | ret = do_shmat (first, ptr, second, &raddr); | ||
148 | if (ret) | ||
149 | return ret; | ||
150 | return put_user (raddr, (ulong __user *) third); | ||
151 | } | ||
152 | } | ||
153 | case SHMDT: | ||
154 | return sys_shmdt (ptr); | ||
155 | case SHMGET: | ||
156 | return sys_shmget (first, second, third); | ||
157 | case SHMCTL: | ||
158 | return sys_shmctl (first, second, ptr); | ||
159 | default: | ||
160 | return -ENOSYS; | ||
161 | } | ||
162 | |||
163 | return -EINVAL; | ||
164 | } | ||
165 | |||
166 | /* sys_cacheflush -- flush (part of) the processor cache. */ | 30 | /* sys_cacheflush -- flush (part of) the processor cache. */ |
167 | asmlinkage int | 31 | asmlinkage int |
168 | sys_cacheflush (unsigned long addr, int scope, int cache, unsigned long len) | 32 | sys_cacheflush (unsigned long addr, int scope, int cache, unsigned long len) |
diff --git a/arch/m68knommu/kernel/syscalltable.S b/arch/m68knommu/kernel/syscalltable.S index 56dd01ded148..b30b3eb197a5 100644 --- a/arch/m68knommu/kernel/syscalltable.S +++ b/arch/m68knommu/kernel/syscalltable.S | |||
@@ -100,7 +100,7 @@ ENTRY(sys_call_table) | |||
100 | .long sys_settimeofday | 100 | .long sys_settimeofday |
101 | .long sys_getgroups16 /* 80 */ | 101 | .long sys_getgroups16 /* 80 */ |
102 | .long sys_setgroups16 | 102 | .long sys_setgroups16 |
103 | .long old_select | 103 | .long sys_old_select |
104 | .long sys_symlink | 104 | .long sys_symlink |
105 | .long sys_lstat | 105 | .long sys_lstat |
106 | .long sys_readlink /* 85 */ | 106 | .long sys_readlink /* 85 */ |
@@ -108,7 +108,7 @@ ENTRY(sys_call_table) | |||
108 | .long sys_ni_syscall /* sys_swapon */ | 108 | .long sys_ni_syscall /* sys_swapon */ |
109 | .long sys_reboot | 109 | .long sys_reboot |
110 | .long sys_old_readdir | 110 | .long sys_old_readdir |
111 | .long old_mmap /* 90 */ | 111 | .long sys_old_mmap /* 90 */ |
112 | .long sys_munmap | 112 | .long sys_munmap |
113 | .long sys_truncate | 113 | .long sys_truncate |
114 | .long sys_ftruncate | 114 | .long sys_ftruncate |