aboutsummaryrefslogtreecommitdiffstats
path: root/arch/m68knommu/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'arch/m68knommu/kernel')
-rw-r--r--arch/m68knommu/kernel/ptrace.c74
-rw-r--r--arch/m68knommu/kernel/sys_m68k.c136
-rw-r--r--arch/m68knommu/kernel/syscalltable.S4
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
37struct 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
46asmlinkage 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);
60out:
61 return error;
62}
63
64struct sel_arg_struct {
65 unsigned long n;
66 fd_set *inp, *outp, *exp;
67 struct timeval *tvp;
68};
69
70asmlinkage 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 */
85asmlinkage 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. */
167asmlinkage int 31asmlinkage int
168sys_cacheflush (unsigned long addr, int scope, int cache, unsigned long len) 32sys_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