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 / m68k / ptrace.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-01-24  |  877 b   |  43 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 ("movel %1,d0\n\t"
  22.               "movel %2,d1\n\t"
  23.               "movel %3,d2\n\t"
  24.               "movel %4,d3\n\t"
  25.               "movel %5,d4\n\t"
  26.               "trap  #0\n\t"
  27.               "movel d0,%0"
  28.         :"=g" (res)
  29.         :"i" (SYS_ptrace), "g" (request), "g" (pid),
  30.          "g" (addr), "g" (data) : "d0", "d1", "d2", "d3", "d4");
  31. #endif
  32.  
  33.     if (res >= 0) {
  34.         if (request > 0 && request < 4) {
  35.             errno = 0;
  36.             return (ret);
  37.         }
  38.         return (int) res;
  39.     }
  40.     errno = -res;
  41.     return -1;
  42. }
  43.