blob: 1dd7d063d215cce1899f7fe9673edacb1130de25 [file] [log] [blame]
yuezonghe824eb0c2024-06-27 02:32:26 -07001
2#include <errno.h>
3#include <asm/ptrace.h>
4#include <asm/unistd.h>
5
6int
7ptrace(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}