summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/lib/__ptrace.c
blob: bd14a03513680a5e864ac06735a8638ec6e3585b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/* we need this because we need to use the glibc prototype which uses
 * varargs :-( */
#define ptrace fnord
#include <sys/ptrace.h>
#undef ptrace
#include <sys/types.h>
#include <unistd.h>

extern int __diet_ptrace(int request, pid_t pid, void *addr, void *data);
int ptrace(int request, pid_t pid, void *addr, void *data);

int ptrace(int request, pid_t pid, void *addr, void *data) {
  switch (request) {
    case PTRACE_TRACEME: case PTRACE_KILL: case PTRACE_ATTACH:
    case PTRACE_DETACH:
      return (__diet_ptrace (request, pid, NULL, NULL));
    case PTRACE_PEEKDATA: case PTRACE_PEEKUSER: case PTRACE_PEEKTEXT:
      {
	long result;
	if (__diet_ptrace (request, pid, addr, &result) == -1)
		return (-1);
	return (result);
      }
    default:
      return (__diet_ptrace (request, pid, addr, data));
  }
}