| ripped from fedora |
| |
| --- libaio-0.3.107/src/libaio.h |
| +++ libaio-0.3.107/src/libaio.h |
| @@ -73,6 +73,14 @@ |
| #define PADDED(x, y) unsigned y; x |
| #define PADDEDptr(x, y) unsigned y; x |
| #define PADDEDul(x, y) unsigned y; unsigned long x |
| +#elif defined(__sparc__) && defined(__arch64__) /* big endian, 64 bits */ |
| +#define PADDED(x, y) unsigned y; x |
| +#define PADDEDptr(x,y) x |
| +#define PADDEDul(x, y) unsigned long x |
| +#elif defined(__sparc__) /* big endian, 32 bits */ |
| +#define PADDED(x, y) unsigned y; x |
| +#define PADDEDptr(x, y) unsigned y; x |
| +#define PADDEDul(x, y) unsigned y; unsigned long x |
| #else |
| #error endian? |
| #endif |
| --- libaio-0.3.107/src/syscall.h |
| +++ libaio-0.3.107/src/syscall.h |
| @@ -22,6 +22,8 @@ |
| #include "syscall-s390.h" |
| #elif defined(__alpha__) |
| #include "syscall-alpha.h" |
| +#elif defined(__sparc__) |
| +#include "syscall-sparc.h" |
| #else |
| #error "add syscall-arch.h" |
| #endif |
| --- libaio-0.3.107/src/syscall-sparc.h |
| +++ libaio-0.3.107/src/syscall-sparc.h |
| @@ -0,0 +1,118 @@ |
| +#include <errno.h> |
| + |
| +#define __NR_io_setup 268 |
| +#define __NR_io_destroy 269 |
| +#define __NR_io_submit 270 |
| +#define __NR_io_cancel 271 |
| +#define __NR_io_getevents 272 |
| + |
| +#define io_syscall1(type,fname,sname,type1,arg1) \ |
| +type fname(type1 arg1) \ |
| +{ \ |
| +long __res; \ |
| +register long __g1 __asm__ ("g1") = __NR_##sname; \ |
| +register long __o0 __asm__ ("o0") = (long)(arg1); \ |
| +__asm__ __volatile__ ("t 0x10\n\t" \ |
| + "bcc 1f\n\t" \ |
| + "mov %%o0, %0\n\t" \ |
| + "sub %%g0, %%o0, %0\n\t" \ |
| + "1:\n\t" \ |
| + : "=r" (__res), "=&r" (__o0) \ |
| + : "1" (__o0), "r" (__g1) \ |
| + : "cc"); \ |
| +if (__res < -255 || __res >= 0) \ |
| + return (type) __res; \ |
| +errno = -__res; \ |
| +return -1; \ |
| +} |
| + |
| +#define io_syscall2(type,fname,sname,type1,arg1,type2,arg2) \ |
| +type fname(type1 arg1,type2 arg2) \ |
| +{ \ |
| +long __res; \ |
| +register long __g1 __asm__ ("g1") = __NR_##sname; \ |
| +register long __o0 __asm__ ("o0") = (long)(arg1); \ |
| +register long __o1 __asm__ ("o1") = (long)(arg2); \ |
| +__asm__ __volatile__ ("t 0x10\n\t" \ |
| + "bcc 1f\n\t" \ |
| + "mov %%o0, %0\n\t" \ |
| + "sub %%g0, %%o0, %0\n\t" \ |
| + "1:\n\t" \ |
| + : "=r" (__res), "=&r" (__o0) \ |
| + : "1" (__o0), "r" (__o1), "r" (__g1) \ |
| + : "cc"); \ |
| +if (__res < -255 || __res >= 0) \ |
| + return (type) __res; \ |
| +errno = -__res; \ |
| +return -1; \ |
| +} |
| + |
| +#define io_syscall3(type,fname,sname,type1,arg1,type2,arg2,type3,arg3) \ |
| +type fname(type1 arg1,type2 arg2,type3 arg3) \ |
| +{ \ |
| +long __res; \ |
| +register long __g1 __asm__ ("g1") = __NR_##sname; \ |
| +register long __o0 __asm__ ("o0") = (long)(arg1); \ |
| +register long __o1 __asm__ ("o1") = (long)(arg2); \ |
| +register long __o2 __asm__ ("o2") = (long)(arg3); \ |
| +__asm__ __volatile__ ("t 0x10\n\t" \ |
| + "bcc 1f\n\t" \ |
| + "mov %%o0, %0\n\t" \ |
| + "sub %%g0, %%o0, %0\n\t" \ |
| + "1:\n\t" \ |
| + : "=r" (__res), "=&r" (__o0) \ |
| + : "1" (__o0), "r" (__o1), "r" (__o2), "r" (__g1) \ |
| + : "cc"); \ |
| +if (__res < -255 || __res>=0) \ |
| + return (type) __res; \ |
| +errno = -__res; \ |
| +return -1; \ |
| +} |
| + |
| +#define io_syscall4(type,fname,sname,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \ |
| +type fname (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ |
| +{ \ |
| +long __res; \ |
| +register long __g1 __asm__ ("g1") = __NR_##sname; \ |
| +register long __o0 __asm__ ("o0") = (long)(arg1); \ |
| +register long __o1 __asm__ ("o1") = (long)(arg2); \ |
| +register long __o2 __asm__ ("o2") = (long)(arg3); \ |
| +register long __o3 __asm__ ("o3") = (long)(arg4); \ |
| +__asm__ __volatile__ ("t 0x10\n\t" \ |
| + "bcc 1f\n\t" \ |
| + "mov %%o0, %0\n\t" \ |
| + "sub %%g0, %%o0, %0\n\t" \ |
| + "1:\n\t" \ |
| + : "=r" (__res), "=&r" (__o0) \ |
| + : "1" (__o0), "r" (__o1), "r" (__o2), "r" (__o3), "r" (__g1) \ |
| + : "cc"); \ |
| +if (__res < -255 || __res>=0) \ |
| + return (type) __res; \ |
| +errno = -__res; \ |
| +return -1; \ |
| +} |
| + |
| +#define io_syscall5(type,fname,sname,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ |
| + type5,arg5) \ |
| +type fname (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \ |
| +{ \ |
| +long __res; \ |
| +register long __g1 __asm__ ("g1") = __NR_##sname; \ |
| +register long __o0 __asm__ ("o0") = (long)(arg1); \ |
| +register long __o1 __asm__ ("o1") = (long)(arg2); \ |
| +register long __o2 __asm__ ("o2") = (long)(arg3); \ |
| +register long __o3 __asm__ ("o3") = (long)(arg4); \ |
| +register long __o4 __asm__ ("o4") = (long)(arg5); \ |
| +__asm__ __volatile__ ("t 0x10\n\t" \ |
| + "bcc 1f\n\t" \ |
| + "mov %%o0, %0\n\t" \ |
| + "sub %%g0, %%o0, %0\n\t" \ |
| + "1:\n\t" \ |
| + : "=r" (__res), "=&r" (__o0) \ |
| + : "1" (__o0), "r" (__o1), "r" (__o2), "r" (__o3), "r" (__o4), "r" (__g1) \ |
| + : "cc"); \ |
| +if (__res < -255 || __res>=0) \ |
| + return (type) __res; \ |
| +errno = -__res; \ |
| +return -1; \ |
| +} |