|
|
|
@@ -1,16 +1,72 @@
|
|
|
|
|
---
|
|
|
|
|
harness/main.c | 8 +
|
|
|
|
|
src/libaio.h | 34 +++++++
|
|
|
|
|
src/syscall-arm.h | 116 ++++++++++++++++++++++++++
|
|
|
|
|
src/libaio.h | 24 +++++
|
|
|
|
|
src/syscall-m68k.h | 78 +++++++++++++++++
|
|
|
|
|
src/syscall-mips.h | 223 +++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
|
|
src/syscall-parisc.h | 146 +++++++++++++++++++++++++++++++++
|
|
|
|
|
src/syscall-sparc.h | 130 +++++++++++++++++++++++++++++
|
|
|
|
|
src/syscall.h | 10 ++
|
|
|
|
|
8 files changed, 744 insertions(+), 1 deletion(-)
|
|
|
|
|
src/syscall.h | 8 +
|
|
|
|
|
7 files changed, 617 insertions(+)
|
|
|
|
|
|
|
|
|
|
Index: libaio-0.3.109/harness/main.c
|
|
|
|
|
===================================================================
|
|
|
|
|
--- libaio-0.3.109.orig/harness/main.c
|
|
|
|
|
+++ libaio-0.3.109/harness/main.c
|
|
|
|
|
@@ -12,7 +12,15 @@
|
|
|
|
|
#include <libaio.h>
|
|
|
|
|
|
|
|
|
|
#if __LP64__ == 0
|
|
|
|
|
+#if defined(__i386__) || defined(__pwoerpc__) || defined(__mips__)
|
|
|
|
|
#define KERNEL_RW_POINTER ((void *)0xc0010000)
|
|
|
|
|
+#elif defined(__arm__) || defined(__m68k__) || defined(__s390__)
|
|
|
|
|
+#define KERNEL_RW_POINTER ((void *)0x00010000)
|
|
|
|
|
+#elif defined(__hppa__)
|
|
|
|
|
+#define KERNEL_RW_POINTER ((void *)0x10100000)
|
|
|
|
|
+#elif defined(__sparc__)
|
|
|
|
|
+#define KERNEL_RW_POINTER ((void *)0xf0010000)
|
|
|
|
|
+#endif
|
|
|
|
|
#else
|
|
|
|
|
//#warning Not really sure where kernel memory is. Guessing.
|
|
|
|
|
#define KERNEL_RW_POINTER ((void *)0xffffffff81000000)
|
|
|
|
|
Index: libaio-0.3.109/src/libaio.h
|
|
|
|
|
===================================================================
|
|
|
|
|
--- libaio-0.3.109.orig/src/libaio.h
|
|
|
|
|
+++ libaio-0.3.109/src/libaio.h
|
|
|
|
|
@@ -83,6 +83,30 @@ typedef enum io_iocb_cmd {
|
|
|
|
|
#define PADDEDptr(x, y) x; unsigned y
|
|
|
|
|
#define PADDEDul(x, y) unsigned long x; unsigned y
|
|
|
|
|
# endif
|
|
|
|
|
+#elif defined(__m68k__) /* 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
|
|
|
|
|
+#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
|
|
|
|
|
+#elif defined(__hppa__) /* 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
|
|
|
|
|
+#elif defined(__mips__)
|
|
|
|
|
+# if defined (__MIPSEB__) /* 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
|
|
|
|
|
+# elif defined(__MIPSEL__) /* little endian, 32 bits */
|
|
|
|
|
+#define PADDED(x, y) x; unsigned y
|
|
|
|
|
+#define PADDEDptr(x, y) x; unsigned y
|
|
|
|
|
+#define PADDEDul(x, y) unsigned long x; unsigned y
|
|
|
|
|
+# else
|
|
|
|
|
+# error "neither mipseb nor mipsel?"
|
|
|
|
|
+# endif
|
|
|
|
|
#else
|
|
|
|
|
#error endian?
|
|
|
|
|
#endif
|
|
|
|
|
Index: libaio-0.3.109/src/syscall-m68k.h
|
|
|
|
|
===================================================================
|
|
|
|
|
--- /dev/null
|
|
|
|
|
+++ b/src/syscall-m68k.h
|
|
|
|
|
+++ libaio-0.3.109/src/syscall-m68k.h
|
|
|
|
|
@@ -0,0 +1,78 @@
|
|
|
|
|
+#define __NR_io_setup 241
|
|
|
|
|
+#define __NR_io_destroy 242
|
|
|
|
@@ -90,160 +146,10 @@
|
|
|
|
|
+return (type) __res; \
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
Index: libaio-0.3.109/src/syscall-mips.h
|
|
|
|
|
===================================================================
|
|
|
|
|
--- /dev/null
|
|
|
|
|
+++ b/src/syscall-sparc.h
|
|
|
|
|
@@ -0,0 +1,130 @@
|
|
|
|
|
+/* $Id: unistd.h,v 1.74 2002/02/08 03:57:18 davem Exp $ */
|
|
|
|
|
+
|
|
|
|
|
+/*
|
|
|
|
|
+ * System calls under the Sparc.
|
|
|
|
|
+ *
|
|
|
|
|
+ * Don't be scared by the ugly clobbers, it is the only way I can
|
|
|
|
|
+ * think of right now to force the arguments into fixed registers
|
|
|
|
|
+ * before the trap into the system call with gcc 'asm' statements.
|
|
|
|
|
+ *
|
|
|
|
|
+ * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
|
|
|
|
|
+ *
|
|
|
|
|
+ * SunOS compatibility based upon preliminary work which is:
|
|
|
|
|
+ *
|
|
|
|
|
+ * Copyright (C) 1995 Adrian M. Rodriguez (adrian@remus.rutgers.edu)
|
|
|
|
|
+ */
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+#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; \
|
|
|
|
|
+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; \
|
|
|
|
|
+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; \
|
|
|
|
|
+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; \
|
|
|
|
|
+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; \
|
|
|
|
|
+return -1; \
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
--- a/src/syscall.h
|
|
|
|
|
+++ b/src/syscall.h
|
|
|
|
|
@@ -22,6 +22,16 @@
|
|
|
|
|
#include "syscall-s390.h"
|
|
|
|
|
#elif defined(__alpha__)
|
|
|
|
|
#include "syscall-alpha.h"
|
|
|
|
|
+#elif defined(__arm__)
|
|
|
|
|
+#include "syscall-arm.h"
|
|
|
|
|
+#elif defined(__m68k__)
|
|
|
|
|
+#include "syscall-m68k.h"
|
|
|
|
|
+#elif defined(__sparc__)
|
|
|
|
|
+#include "syscall-sparc.h"
|
|
|
|
|
+#elif defined(__hppa__)
|
|
|
|
|
+#include "syscall-parisc.h"
|
|
|
|
|
+#elif defined(__mips__)
|
|
|
|
|
+#include "syscall-mips.h"
|
|
|
|
|
#else
|
|
|
|
|
#error "add syscall-arch.h"
|
|
|
|
|
#endif
|
|
|
|
|
--- /dev/null
|
|
|
|
|
+++ b/src/syscall-mips.h
|
|
|
|
|
+++ libaio-0.3.109/src/syscall-mips.h
|
|
|
|
|
@@ -0,0 +1,223 @@
|
|
|
|
|
+/*
|
|
|
|
|
+ * This file is subject to the terms and conditions of the GNU General Public
|
|
|
|
@@ -468,51 +374,10 @@
|
|
|
|
|
+
|
|
|
|
|
+#endif /* (_MIPS_SIM == _MIPS_SIM_NABI32) || (_MIPS_SIM == _MIPS_SIM_ABI64) */
|
|
|
|
|
+
|
|
|
|
|
--- a/src/libaio.h
|
|
|
|
|
+++ b/src/libaio.h
|
|
|
|
|
@@ -73,6 +73,40 @@ typedef enum io_iocb_cmd {
|
|
|
|
|
#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(__arm__)
|
|
|
|
|
+# if defined (__ARMEB__) /* 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 /* little endian, 32 bits */
|
|
|
|
|
+#define PADDED(x, y) x; unsigned y
|
|
|
|
|
+#define PADDEDptr(x, y) x; unsigned y
|
|
|
|
|
+#define PADDEDul(x, y) unsigned long x; unsigned y
|
|
|
|
|
+# endif
|
|
|
|
|
+#elif defined(__m68k__) /* 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
|
|
|
|
|
+#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
|
|
|
|
|
+#elif defined(__hppa__) /* 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
|
|
|
|
|
+#elif defined(__mips__)
|
|
|
|
|
+# if defined (__MIPSEB__) /* 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
|
|
|
|
|
+# elif defined(__MIPSEL__) /* little endian, 32 bits */
|
|
|
|
|
+#define PADDED(x, y) x; unsigned y
|
|
|
|
|
+#define PADDEDptr(x, y) x; unsigned y
|
|
|
|
|
+#define PADDEDul(x, y) unsigned long x; unsigned y
|
|
|
|
|
+# else
|
|
|
|
|
+# error "neither mipseb nor mipsel?"
|
|
|
|
|
+# endif
|
|
|
|
|
#else
|
|
|
|
|
#error endian?
|
|
|
|
|
#endif
|
|
|
|
|
Index: libaio-0.3.109/src/syscall-parisc.h
|
|
|
|
|
===================================================================
|
|
|
|
|
--- /dev/null
|
|
|
|
|
+++ b/src/syscall-parisc.h
|
|
|
|
|
+++ libaio-0.3.109/src/syscall-parisc.h
|
|
|
|
|
@@ -0,0 +1,146 @@
|
|
|
|
|
+/*
|
|
|
|
|
+ * Linux system call numbers.
|
|
|
|
@@ -660,140 +525,157 @@
|
|
|
|
|
+ return K_INLINE_SYSCALL(sname, 5, arg1, arg2, arg3, arg4, arg5); \
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
Index: libaio-0.3.109/src/syscall-sparc.h
|
|
|
|
|
===================================================================
|
|
|
|
|
--- /dev/null
|
|
|
|
|
+++ b/src/syscall-arm.h
|
|
|
|
|
@@ -0,0 +1,116 @@
|
|
|
|
|
+++ libaio-0.3.109/src/syscall-sparc.h
|
|
|
|
|
@@ -0,0 +1,130 @@
|
|
|
|
|
+/* $Id: unistd.h,v 1.74 2002/02/08 03:57:18 davem Exp $ */
|
|
|
|
|
+
|
|
|
|
|
+/*
|
|
|
|
|
+ * linux/include/asm-arm/unistd.h
|
|
|
|
|
+ * System calls under the Sparc.
|
|
|
|
|
+ *
|
|
|
|
|
+ * Copyright (C) 2001-2005 Russell King
|
|
|
|
|
+ * Don't be scared by the ugly clobbers, it is the only way I can
|
|
|
|
|
+ * think of right now to force the arguments into fixed registers
|
|
|
|
|
+ * before the trap into the system call with gcc 'asm' statements.
|
|
|
|
|
+ *
|
|
|
|
|
+ * This program is free software; you can redistribute it and/or modify
|
|
|
|
|
+ * it under the terms of the GNU General Public License version 2 as
|
|
|
|
|
+ * published by the Free Software Foundation.
|
|
|
|
|
+ * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
|
|
|
|
|
+ *
|
|
|
|
|
+ * Please forward _all_ changes to this file to rmk@arm.linux.org.uk,
|
|
|
|
|
+ * no matter what the change is. Thanks!
|
|
|
|
|
+ * SunOS compatibility based upon preliminary work which is:
|
|
|
|
|
+ *
|
|
|
|
|
+ * Copyright (C) 1995 Adrian M. Rodriguez (adrian@remus.rutgers.edu)
|
|
|
|
|
+ */
|
|
|
|
|
+
|
|
|
|
|
+#define __NR_OABI_SYSCALL_BASE 0x900000
|
|
|
|
|
+
|
|
|
|
|
+#if defined(__thumb__) || defined(__ARM_EABI__)
|
|
|
|
|
+#define __NR_SYSCALL_BASE 0
|
|
|
|
|
+#else
|
|
|
|
|
+#define __NR_SYSCALL_BASE __NR_OABI_SYSCALL_BASE
|
|
|
|
|
+#endif
|
|
|
|
|
+#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 __NR_io_setup (__NR_SYSCALL_BASE+243)
|
|
|
|
|
+#define __NR_io_destroy (__NR_SYSCALL_BASE+244)
|
|
|
|
|
+#define __NR_io_getevents (__NR_SYSCALL_BASE+245)
|
|
|
|
|
+#define __NR_io_submit (__NR_SYSCALL_BASE+246)
|
|
|
|
|
+#define __NR_io_cancel (__NR_SYSCALL_BASE+247)
|
|
|
|
|
+
|
|
|
|
|
+#define __sys2(x) #x
|
|
|
|
|
+#define __sys1(x) __sys2(x)
|
|
|
|
|
+
|
|
|
|
|
+#if defined(__thumb__) || defined(__ARM_EABI__)
|
|
|
|
|
+#define __SYS_REG(name) register long __sysreg __asm__("r7") = __NR_##name;
|
|
|
|
|
+#define __SYS_REG_LIST(regs...) "r" (__sysreg) , ##regs
|
|
|
|
|
+#define __syscall(name) "swi\t0"
|
|
|
|
|
+#else
|
|
|
|
|
+#define __SYS_REG(name)
|
|
|
|
|
+#define __SYS_REG_LIST(regs...) regs
|
|
|
|
|
+#define __syscall(name) "swi\t" __sys1(__NR_##name) ""
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#define io_syscall1(type,fname,sname,type1,arg1) \
|
|
|
|
|
+type fname(type1 arg1) { \
|
|
|
|
|
+ __SYS_REG(sname) \
|
|
|
|
|
+ register long __r0 __asm__("r0") = (long)arg1; \
|
|
|
|
|
+ register long __res_r0 __asm__("r0"); \
|
|
|
|
|
+ __asm__ __volatile__ ( \
|
|
|
|
|
+ __syscall(sname) \
|
|
|
|
|
+ : "=r" (__res_r0) \
|
|
|
|
|
+ : __SYS_REG_LIST( "0" (__r0) ) \
|
|
|
|
|
+ : "memory" ); \
|
|
|
|
|
+ return (type) __res_r0; \
|
|
|
|
|
+#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; \
|
|
|
|
|
+return -1; \
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+#define io_syscall2(type,fname,sname,type1,arg1,type2,arg2) \
|
|
|
|
|
+type fname(type1 arg1,type2 arg2) { \
|
|
|
|
|
+ __SYS_REG(sname) \
|
|
|
|
|
+ register long __r0 __asm__("r0") = (long)arg1; \
|
|
|
|
|
+ register long __r1 __asm__("r1") = (long)arg2; \
|
|
|
|
|
+ register long __res_r0 __asm__("r0"); \
|
|
|
|
|
+ __asm__ __volatile__ ( \
|
|
|
|
|
+ __syscall(sname) \
|
|
|
|
|
+ : "=r" (__res_r0) \
|
|
|
|
|
+ : __SYS_REG_LIST( "0" (__r0), "r" (__r1) ) \
|
|
|
|
|
+ : "memory" ); \
|
|
|
|
|
+ return (type) __res_r0; \
|
|
|
|
|
+#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; \
|
|
|
|
|
+return -1; \
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+#define io_syscall3(type,fname,sname,type1,arg1,type2,arg2,type3,arg3) \
|
|
|
|
|
+type fname(type1 arg1,type2 arg2,type3 arg3) { \
|
|
|
|
|
+ __SYS_REG(sname) \
|
|
|
|
|
+ register long __r0 __asm__("r0") = (long)arg1; \
|
|
|
|
|
+ register long __r1 __asm__("r1") = (long)arg2; \
|
|
|
|
|
+ register long __r2 __asm__("r2") = (long)arg3; \
|
|
|
|
|
+ register long __res_r0 __asm__("r0"); \
|
|
|
|
|
+ __asm__ __volatile__ ( \
|
|
|
|
|
+ __syscall(sname) \
|
|
|
|
|
+ : "=r" (__res_r0) \
|
|
|
|
|
+ : __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2) ) \
|
|
|
|
|
+ : "memory" ); \
|
|
|
|
|
+ return (type) __res_r0; \
|
|
|
|
|
+#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; \
|
|
|
|
|
+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) { \
|
|
|
|
|
+ __SYS_REG(sname) \
|
|
|
|
|
+ register long __r0 __asm__("r0") = (long)arg1; \
|
|
|
|
|
+ register long __r1 __asm__("r1") = (long)arg2; \
|
|
|
|
|
+ register long __r2 __asm__("r2") = (long)arg3; \
|
|
|
|
|
+ register long __r3 __asm__("r3") = (long)arg4; \
|
|
|
|
|
+ register long __res_r0 __asm__("r0"); \
|
|
|
|
|
+ __asm__ __volatile__ ( \
|
|
|
|
|
+ __syscall(sname) \
|
|
|
|
|
+ : "=r" (__res_r0) \
|
|
|
|
|
+ : __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2), "r" (__r3) ) \
|
|
|
|
|
+ : "memory" ); \
|
|
|
|
|
+ return (type) __res_r0; \
|
|
|
|
|
+#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; \
|
|
|
|
|
+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) {\
|
|
|
|
|
+ __SYS_REG(sname) \
|
|
|
|
|
+ register long __r0 __asm__("r0") = (long)arg1; \
|
|
|
|
|
+ register long __r1 __asm__("r1") = (long)arg2; \
|
|
|
|
|
+ register long __r2 __asm__("r2") = (long)arg3; \
|
|
|
|
|
+ register long __r3 __asm__("r3") = (long)arg4; \
|
|
|
|
|
+ register long __r4 __asm__("r4") = (long)arg5; \
|
|
|
|
|
+ register long __res_r0 __asm__("r0"); \
|
|
|
|
|
+ __asm__ __volatile__ ( \
|
|
|
|
|
+ __syscall(sname) \
|
|
|
|
|
+ : "=r" (__res_r0) \
|
|
|
|
|
+ : __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2), \
|
|
|
|
|
+ "r" (__r3), "r" (__r4) ) \
|
|
|
|
|
+ : "memory" ); \
|
|
|
|
|
+ return (type) __res_r0; \
|
|
|
|
|
+#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; \
|
|
|
|
|
+return -1; \
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
--- a/harness/main.c
|
|
|
|
|
+++ b/harness/main.c
|
|
|
|
|
@@ -11,8 +11,14 @@
|
|
|
|
|
|
|
|
|
|
#include <libaio.h>
|
|
|
|
|
|
|
|
|
|
-#if defined(__i386__)
|
|
|
|
|
+#if defined(__i386__) || defined(__powerpc__) || defined(__mips__)
|
|
|
|
|
#define KERNEL_RW_POINTER ((void *)0xc0010000)
|
|
|
|
|
+#elif defined(__arm__) || defined(__m68k__) || defined(__s390__)
|
|
|
|
|
+#define KERNEL_RW_POINTER ((void *)0x00010000)
|
|
|
|
|
Index: libaio-0.3.109/src/syscall.h
|
|
|
|
|
===================================================================
|
|
|
|
|
--- libaio-0.3.109.orig/src/syscall.h
|
|
|
|
|
+++ libaio-0.3.109/src/syscall.h
|
|
|
|
|
@@ -24,6 +24,14 @@
|
|
|
|
|
#include "syscall-alpha.h"
|
|
|
|
|
#elif defined(__arm__)
|
|
|
|
|
#include "syscall-arm.h"
|
|
|
|
|
+#elif defined(__m68k__)
|
|
|
|
|
+#include "syscall-m68k.h"
|
|
|
|
|
+#elif defined(__sparc__)
|
|
|
|
|
+#include "syscall-sparc.h"
|
|
|
|
|
+#elif defined(__hppa__)
|
|
|
|
|
+#define KERNEL_RW_POINTER ((void *)0x10100000)
|
|
|
|
|
+#elif defined(__sparc__) && !defined(__arch64__)
|
|
|
|
|
+#define KERNEL_RW_POINTER ((void *)0xf0010000)
|
|
|
|
|
+#include "syscall-parisc.h"
|
|
|
|
|
+#elif defined(__mips__)
|
|
|
|
|
+#include "syscall-mips.h"
|
|
|
|
|
#else
|
|
|
|
|
//#warning Not really sure where kernel memory is. Guessing.
|
|
|
|
|
#define KERNEL_RW_POINTER ((void *)0xffffffffc0010000)
|
|
|
|
|
#error "add syscall-arch.h"
|
|
|
|
|
#endif
|
|
|
|
|