1 
2 #include <errno.h>
3 #include <asm/ptrace.h>
4 #include <asm/unistd.h>
5 
6 int
ptrace(int request,int pid,int addr,int data)7 ptrace(int request, int pid, int addr, int data)
8 {
9 	int ret;
10 	int res;
11 
12 	if (request > 0 && request < 4) data = (int)&ret;
13 
14 	__asm__ __volatile__ ("sub.l er0,er0\n\t"
15                           "mov.b %1,r0l\n\t"
16 			  "mov.l %2,er1\n\t"
17 			  "mov.l %3,er2\n\t"
18 			  "mov.l %4,er3\n\t"
19 			  "mov.l %5,er4\n\t"
20 			  "trapa  #0\n\t"
21 			  "mov.l er0,%0"
22 		:"=g" (res)
23 		:"i" (__NR_ptrace), "g" (request), "g" (pid),
24 		 "g" (addr), "g" (data)
25 		: "er0", "er1", "er2", "er3", "er4");
26 
27 	if (res >= 0) {
28 		if (request > 0 && request < 4) {
29 			__set_errno(0);
30 			return (ret);
31 		}
32 		return (int) res;
33 	}
34 	__set_errno(-res);
35 	return -1;
36 }
37