1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- #include <stdarg.h>
- #include <errno.h>
- #include <sys/syscall.h>
- #include <unistd.h>
- long int
- syscall (long int __sysno, ...)
- {
-
- va_list args;
- long int arg0, arg1, arg2, arg3, arg4, arg5;
- long int __sys_res;
-
- va_start (args, __sysno);
- arg0 = va_arg (args, long int);
- arg1 = va_arg (args, long int);
- arg2 = va_arg (args, long int);
- arg3 = va_arg (args, long int);
- arg4 = va_arg (args, long int);
- arg5 = va_arg (args, long int);
- va_end (args);
- {
- register unsigned long int __res __asm__("r28");
- K_LOAD_ARGS_6 (arg0, arg1, arg2, arg3, arg4, arg5)
- __asm__ __volatile__ (K_STW_ASM_PIC
- " ble 0x100(%%sr2, %%r0) \n"
- " copy %1, %%r20 \n"
- K_LDW_ASM_PIC
- : "=r" (__res)
- : "r" (__sysno) K_ASM_ARGS_6
- : "memory", K_CALL_CLOB_REGS K_CLOB_ARGS_6);
- __sys_res = __res;
- }
- if ((unsigned long int) __sys_res >= (unsigned long int) -4095)
- {
- __set_errno (-__sys_res);
- __sys_res = -1;
- }
- return __sys_res;
- }
|