home *** CD-ROM | disk | FTP | other *** search
/ Il CD di internet / CD.iso / SOURCE / D / LIBC / LIBC-4.6 / LIBC-4 / libc-linux / sysdeps / linux / i386 / ptrace.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-01-08  |  708 b   |  37 lines

  1. #include <errno.h>
  2. #include <sys/ptrace.h>
  3. #include <sys/syscall.h>
  4.  
  5. int
  6. ptrace(int request, int pid, int addr, int data)
  7. {
  8.     long ret;
  9.     long res;
  10.     if (request > 0 && request < 4) (long *)data = &ret;
  11.  
  12. #if defined(__PIC__) || defined (__pic__)
  13.     __asm__ volatile ("pushl %%ebx\n\t"
  14.               "movl %%edi,%%ebx\n\t"
  15.               "int $0x80\n\t"
  16.               "popl %%ebx"
  17.         :"=a" (res)
  18.         :"0" (SYS_ptrace),"D" (request), "c" (pid),
  19.          "d" (addr), "S" (data));
  20. #else
  21.     __asm__ volatile ("int $0x80"
  22.         :"=a" (res)
  23.         :"0" (SYS_ptrace),"b" (request), "c" (pid),
  24.          "d" (addr), "S" (data));
  25. #endif
  26.  
  27.     if (res >= 0) {
  28.         if (request > 0 && request < 4) {
  29.             errno = 0;
  30.             return (ret);
  31.         }
  32.         return (int) res;
  33.     }
  34.     errno = -res;
  35.     return -1;
  36. }
  37.