File: ptrace.c

package info (click to toggle)
libc-sparc 5.3.12-3
  • links: PTS
  • area: main
  • in suites: potato, slink
  • size: 17,608 kB
  • ctags: 44,718
  • sloc: ansic: 163,548; asm: 5,080; makefile: 3,340; lex: 521; sh: 439; yacc: 401; awk: 28
file content (34 lines) | stat: -rw-r--r-- 724 bytes parent folder | download | duplicates (2)
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
28
29
30
31
32
33
34
/* by Miguel de Icaza */
#include <errno.h>
#include <sys/ptrace.h>
#include <sys/syscall.h>

int
ptrace(int request, int pid, int addr, int data)
{
	long ret;
	long res;
	if (request > 0 && request < 4) (long *)data = &ret;

	__asm__ volatile ("or %%g0, %1, %%g1\n\t"
			  "or %%g0, %2, %%o0\n\t"
			  "or %%g0, %3, %%o1\n\t"
			  "or %%g0, %4, %%o2\n\t"
			  "or %%g0, %5, %%o3\n\t"
			  "t 0x10\n\t"
			  "or %%g0, %%o0, %0\n\t"
			  : "=r" (res)
			  : "0" (SYS_ptrace), "r" (request), "r" (pid),
			    "r" (addr), "r" (data)
	                  : "g0", "o0", "o1", "o2", "o3");

	if (res >= 0) {
		if (request > 0 && request < 4) {
			errno = 0;
			return (ret);
		}
		return (int) res;
	}
	errno = -res;
	return -1;
}