chiark / gitweb /
[PATCH] added klibc version 0.82 (cvs tree) to the udev tree.
[elogind.git] / klibc / klibc / arch / ppc / include / klibc / archsys.h
1 /*
2  * arch/ppc/include/klibc/archsys.h
3  *
4  * Architecture-specific syscall definitions
5  */
6
7 #ifndef _KLIBC_ARCHSYS_H
8 #define _KLIBC_ARCHSYS_H
9
10 /* PowerPC seems to lack _syscall6() in its headers */
11 /* This seems to work on both 32- and 64-bit ppc */
12
13 #ifndef _syscall6
14
15 #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
16           type5,arg5,type6,arg6) \
17 type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5,type6 arg6) \
18 { \
19         unsigned long __sc_ret, __sc_err;                               \
20         {                                                               \
21                 register unsigned long __sc_0 __asm__ ("r0");           \
22                 register unsigned long __sc_3 __asm__ ("r3");           \
23                 register unsigned long __sc_4 __asm__ ("r4");           \
24                 register unsigned long __sc_5 __asm__ ("r5");           \
25                 register unsigned long __sc_6 __asm__ ("r6");           \
26                 register unsigned long __sc_7 __asm__ ("r7");           \
27                 register unsigned long __sc_8 __asm__ ("r8");           \
28                                                                         \
29                 __sc_3 = (unsigned long) (arg1);                        \
30                 __sc_4 = (unsigned long) (arg2);                        \
31                 __sc_5 = (unsigned long) (arg3);                        \
32                 __sc_6 = (unsigned long) (arg4);                        \
33                 __sc_7 = (unsigned long) (arg5);                        \
34                 __sc_8 = (unsigned long) (arg6);                        \
35                 __sc_0 = __NR_##name;                                   \
36                 __asm__ __volatile__                                    \
37                         ("sc           \n\t"                            \
38                          "mfcr %1      "                                \
39                         : "=&r" (__sc_3), "=&r" (__sc_0)                \
40                         : "0"   (__sc_3), "1"   (__sc_0),               \
41                           "r"   (__sc_4),                               \
42                           "r"   (__sc_5),                               \
43                           "r"   (__sc_6),                               \
44                           "r"   (__sc_7),                               \
45                           "r"   (__sc_8)                                \
46                         : __syscall_clobbers);                          \
47                 __sc_ret = __sc_3;                                      \
48                 __sc_err = __sc_0;                                      \
49         }                                                               \
50         __syscall_return (type);                                        \
51 }
52
53 #endif /* _syscall6() missing */
54
55 #endif /* _KLIBC_ARCHSYS_H */