diff -ruN libaio-0.3.107-10.el6.src.rpm-rpmbuild/SOURCES/libaio-arm-syscall.patch libaio-0.3.107-10.el6.0.src.rpm-rpmbuild/SOURCES/libaio-arm-syscall.patch
--- libaio-0.3.107-10.el6.src.rpm-rpmbuild/SOURCES/libaio-arm-syscall.patch	1970-01-01 01:00:00.000000000 +0100
+++ libaio-0.3.107-10.el6.0.src.rpm-rpmbuild/SOURCES/libaio-arm-syscall.patch	2011-10-17 17:54:09.000000000 +0100
@@ -0,0 +1,304 @@
+diff -ruN libaio-0.3.107/libaio-0.3.107/src/libaio.h libaio-0.3.107.mod/libaio-0.3.107/src/libaio.h
+--- libaio-0.3.107/libaio-0.3.107/src/libaio.h	2008-01-09 20:49:12.000000000 +0000
++++ libaio-0.3.107.mod/libaio-0.3.107/src/libaio.h	2011-10-17 17:45:16.769390000 +0100
+@@ -73,6 +73,16 @@
+ #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__)
++#define PADDED(x, y)    unsigned y; x
++#define PADDEDptr(x,y)  x
++#define PADDEDul(x, y)  unsigned long x
++#   else
++#define PADDED(x, y)    x; unsigned y
++#define PADDEDptr(x, y) x; unsigned y
++#define PADDEDul(x, y)  unsigned long x; unsigned y
++#   endif
+ #else
+ #error	endian?
+ #endif
+diff -ruN libaio-0.3.107/libaio-0.3.107/src/syscall-arm.h libaio-0.3.107.mod/libaio-0.3.107/src/syscall-arm.h
+--- libaio-0.3.107/libaio-0.3.107/src/syscall-arm.h	1970-01-01 01:00:00.000000000 +0100
++++ libaio-0.3.107.mod/libaio-0.3.107/src/syscall-arm.h	2011-10-17 17:39:41.597203000 +0100
+@@ -0,0 +1,116 @@
++/*
++ *  linux/include/asm-arm/unistd.h
++ *
++ *  Copyright (C) 2001-2005 Russell King
++ *
++ * 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.
++ *
++ * Please forward _all_ changes to this file to rmk@arm.linux.org.uk,
++ * no matter what the change is.  Thanks!
++ */
++
++#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			(__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_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_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_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_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;						\
++}
++
+diff -ruN libaio-0.3.107/libaio-0.3.107/src/syscall.h libaio-0.3.107.mod/libaio-0.3.107/src/syscall.h
+--- libaio-0.3.107/libaio-0.3.107/src/syscall.h	2005-04-01 21:31:32.000000000 +0100
++++ libaio-0.3.107.mod/libaio-0.3.107/src/syscall.h	2011-10-17 17:45:47.847346000 +0100
+@@ -22,6 +22,8 @@
+ #include "syscall-s390.h"
+ #elif defined(__alpha__)
+ #include "syscall-alpha.h"
++#elif defined(__arm__)
++#include "syscall-arm.h"
+ #else
+ #error "add syscall-arch.h"
+ #endif
+diff -ruN libaio-0.3.107/src/libaio.h libaio-0.3.107.mod/src/libaio.h
+--- libaio-0.3.107/src/libaio.h	2008-01-09 20:49:12.000000000 +0000
++++ libaio-0.3.107.mod/src/libaio.h	2011-10-17 17:42:15.578869000 +0100
+@@ -73,6 +73,16 @@
+ #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__)
++#define PADDED(x, y)    unsigned y; x
++#define PADDEDptr(x,y)  x
++#define PADDEDul(x, y)  unsigned long x
++#   else
++#define PADDED(x, y)    x; unsigned y
++#define PADDEDptr(x, y) x; unsigned y
++#define PADDEDul(x, y)  unsigned long x; unsigned y
++#   endif
+ #else
+ #error	endian?
+ #endif
+diff -ruN libaio-0.3.107/src/syscall-arm.h libaio-0.3.107.mod/src/syscall-arm.h
+--- libaio-0.3.107/src/syscall-arm.h	1970-01-01 01:00:00.000000000 +0100
++++ libaio-0.3.107.mod/src/syscall-arm.h	2011-10-17 17:39:41.625359000 +0100
+@@ -0,0 +1,116 @@
++/*
++ *  linux/include/asm-arm/unistd.h
++ *
++ *  Copyright (C) 2001-2005 Russell King
++ *
++ * 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.
++ *
++ * Please forward _all_ changes to this file to rmk@arm.linux.org.uk,
++ * no matter what the change is.  Thanks!
++ */
++
++#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			(__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_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_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_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_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;						\
++}
++
+diff -ruN libaio-0.3.107/src/syscall.h libaio-0.3.107.mod/src/syscall.h
+--- libaio-0.3.107/src/syscall.h	2005-04-01 21:31:32.000000000 +0100
++++ libaio-0.3.107.mod/src/syscall.h	2011-10-17 17:42:52.496799000 +0100
+@@ -22,6 +22,8 @@
+ #include "syscall-s390.h"
+ #elif defined(__alpha__)
+ #include "syscall-alpha.h"
++#elif defined(__arm__)
++#include "syscall-arm.h"
+ #else
+ #error "add syscall-arch.h"
+ #endif
diff -ruN libaio-0.3.107-10.el6.src.rpm-rpmbuild/SPECS/libaio.spec libaio-0.3.107-10.el6.0.src.rpm-rpmbuild/SPECS/libaio.spec
--- libaio-0.3.107-10.el6.src.rpm-rpmbuild/SPECS/libaio.spec	2010-02-25 19:41:30.000000000 +0000
+++ libaio-0.3.107-10.el6.0.src.rpm-rpmbuild/SPECS/libaio.spec	2011-10-17 17:54:26.000000000 +0100
@@ -1,6 +1,6 @@
 Name: libaio
 Version: 0.3.107
-Release: 10%{?dist}
+Release: 10%{?dist}.0
 Summary: Linux-native asynchronous I/O access library
 License: LGPLv2+
 Group:  System Environment/Libraries
@@ -8,6 +8,7 @@
 URL: http://git.kernel.org/?p=libs/libaio/libaio.git
 BuildRoot: %{_tmppath}/%{name}-root
 Patch1: libaio-install-to-slash.patch
+Patch2: libaio-arm-syscall.patch
 
 %description
 The Linux-native asynchronous I/O facility ("async I/O", or "aio") has a
@@ -32,6 +33,7 @@
 %prep
 %setup -q -a 0
 %patch1 -p1
+%patch2 -p1
 mv %{name}-%{version} compat-%{name}-%{version}
 
 %build
@@ -72,6 +74,10 @@
 %attr(0644,root,root) %{_libdir}/libaio.a
 
 %changelog
+* Mon Oct 17 2011 Gordan Bobic <gordan@bobich.net> - 0.3.107-10.0
+- Include support for arm architectures. Patch picked from Debian.
+  Adapted from Kedar Sovani's <kedars@marvell.com> patch.
+
 * Tue Feb 23 2010 Jeff Moyer <jmoyer@redhat.com> - 0.3.107-10
 - Fix up packaging guideline problems.
 - Resolves bz#567783
