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 / sigsuspend.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-01-24  |  581 b   |  31 lines

  1. #include <syscall.h>
  2. #include <sys/signal.h>
  3.  
  4. int sigsuspend(sigset_t *sigmask)
  5. {
  6.     int res;
  7.  
  8. #if defined(__PIC__) || defined (__pic__)
  9.     __asm__ volatile ("pushl %%ebx\n\t"
  10.               "movl %%esi,%%ebx\n\t"
  11.               "int $0x80\n\t"
  12.               "popl %%ebx"
  13.         :"=a" (res)
  14.         :"0" (SYS_sigsuspend), "S" (0), "c" (0), "d" (*sigmask));
  15. #else
  16.     __asm__("movel %1,d0\n\t"
  17.         "clrl  d1\n\t"
  18.         "clrl  d2\n\t"
  19.         "movel %2,d3\n\t"
  20.         "trap  #0\n\t"
  21.         "movel d0,%0"
  22.         :"=g" (res)
  23.         :"i" (SYS_sigsuspend), "g" (*sigmask)
  24.         : "d0", "d1", "d2", "d3");
  25. #endif
  26.     if (res >= 0)
  27.         return res;
  28.     errno = -res;
  29.     return -1;
  30. }
  31.