OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [uclinux/] [uC-libc/] [sysdeps/] [m68k/] [syscall.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 199 simons
/* syscall.c - generalized linux system call interface - rick sladkey */
2
 
3
#include <stdarg.h>
4
#include <syscall.h>
5
#include <errno.h>
6
 
7
#ifdef PTHREAD_KERNEL
8
 
9
#pragma weak machdep_syscall = __machdep_syscall
10
 
11
int
12
__machdep_syscall (int number, ...)
13
{
14
  register long res asm ("%d0");
15
  register long d1 asm ("%d1"), d2 asm ("%d2"), d3 asm ("%d3");
16
  register long d4 asm ("%d4"), d5 asm ("%d5");
17
  va_list args;
18
 
19
  va_start (args, number);
20
  d1 = va_arg (args, int);
21
  d2 = va_arg (args, int);
22
  d3 = va_arg (args, int);
23
  d4 = va_arg (args, int);
24
  d5 = va_arg (args, int);
25
  va_end (args);
26
  __asm__ volatile ("trap  #0\n\t"
27
                    : "=g" (res)
28
                    : "0" (number), "g" (d1), "g" (d2), "g" (d3), "g" (d4),
29
                      "g" (d5)
30
                    : "%d0");
31
  return res;
32
}
33
 
34
#else /* PTHREAD_KERNEL */
35
 
36
/* No weak syscall?.  */
37
#undef _POSIX_THREADS
38
 
39
#ifdef _POSIX_THREADS
40
#pragma weak syscall
41
#endif
42
 
43
int
44
syscall(int number, ...)
45
{
46
        long res;
47
        register long d0 asm("%d0");
48
        register long d1 asm("%d1"), d2 asm("%d2"), d3 asm("%d3"),
49
                      d4 asm("%d4"), d5 asm("%d5");
50
        va_list args;
51
 
52
        va_start(args, number);
53
        d1 = va_arg(args, int);
54
        d2 = va_arg(args, int);
55
        d3 = va_arg(args, int);
56
        d4 = va_arg(args, int);
57
        d5 = va_arg(args, int);
58
        va_end(args);
59
        __asm__ volatile ("trap  #0\n\t"
60
                : "=g" (d0)
61
                : "0" (number), "g" (d1), "g" (d2), "g" (d3), "g" (d4),
62
                          "g" (d5)
63
                : "%d0");
64
        res = d0;
65
        if (res < 0) {
66
                errno = -res;
67
                res = -1;
68
        }
69
        return res;
70
}
71
 
72
#endif /* PTHREAD_KERNEL */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.