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 / syscall.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-11-19  |  695 b   |  33 lines

  1. /* syscall.c - generalized linux system call interface - rick sladkey */
  2.  
  3. #include <stdarg.h>
  4. #include <syscall.h>
  5. #include <errno.h>
  6.  
  7. int
  8. syscall(int number, ...)
  9. {
  10.     register long res asm ("d0") = number;
  11.     register long d1 asm("d1"), d2 asm("d2"), d3 asm("d3"),
  12.               d4 asm("d4"), d5 asm("d5");
  13.     va_list args;
  14.  
  15.     va_start(args, number);
  16.     d1 = va_arg(args, int);
  17.     d2 = va_arg(args, int);
  18.     d3 = va_arg(args, int);
  19.     d4 = va_arg(args, int);
  20.     d5 = va_arg(args, int);
  21.     va_end(args);
  22.     __asm__ volatile ("trap  #0\n\t"
  23.         : "=g" (res)
  24.         : "0" (number), "g" (d1), "g" (d2), "g" (d3), "g" (d4),
  25.                           "g" (d5)
  26.         : "d0");
  27.     if (res < 0) {
  28.         errno = -res;
  29.         res = -1;
  30.     }
  31.     return res;
  32. }
  33.