| #include <sys/ptrace.h> | |
| #include <stdarg.h> | |
| #include <unistd.h> | |
| #include "syscall.h" | |
| long ptrace(int req, ...) | |
| { | |
| va_list ap; | |
| pid_t pid; | |
| void *addr, *data, *addr2; | |
| long ret, result; | |
| va_start(ap, req); | |
| pid = va_arg(ap, pid_t); | |
| addr = va_arg(ap, void *); | |
| data = va_arg(ap, void *); | |
| addr2 = va_arg(ap, void *); | |
| va_end(ap); | |
| if (req-1U < 3) data = &result; | |
| ret = syscall(SYS_ptrace, req, pid, addr, data, addr2); | |
| if (ret < 0 || req-1U >= 3) return ret; | |
| return result; | |
| } |