diff --git a/qemu-0.8.1-syscall-macros.patch b/qemu-0.8.1-syscall-macros.patch
new file mode 100644
index 0000000..965afc1
--- /dev/null
+++ b/qemu-0.8.1-syscall-macros.patch
@@ -0,0 +1,175 @@
+--- qemu-0.8.1/linux-user/syscall.c~	2006-05-03 21:32:58.000000000 +0100
++++ qemu-0.8.1/linux-user/syscall.c	2006-06-07 22:11:48.000000000 +0100
+@@ -79,127 +79,59 @@
+ #define	VFAT_IOCTL_READDIR_SHORT	_IOR('r', 2, struct dirent [2])
+ 
+ 
+-#if defined(__powerpc__)
+-#undef __syscall_nr
+-#undef __sc_loadargs_0
+-#undef __sc_loadargs_1
+-#undef __sc_loadargs_2
+-#undef __sc_loadargs_3
+-#undef __sc_loadargs_4
+-#undef __sc_loadargs_5
+-#undef __sc_asm_input_0
+-#undef __sc_asm_input_1
+-#undef __sc_asm_input_2
+-#undef __sc_asm_input_3
+-#undef __sc_asm_input_4
+-#undef __sc_asm_input_5
+ #undef _syscall0
+ #undef _syscall1
+ #undef _syscall2
+ #undef _syscall3
+ #undef _syscall4
+ #undef _syscall5
++#undef _syscall6
+ 
+-/* need to redefine syscalls as Linux kernel defines are incorrect for
+-   the clobber list */
+-/* On powerpc a system call basically clobbers the same registers like a
+- * function call, with the exception of LR (which is needed for the
+- * "sc; bnslr" sequence) and CR (where only CR0.SO is clobbered to signal
+- * an error return status).
+- */
+-
+-#define __syscall_nr(nr, type, name, args...)				\
+-	unsigned long __sc_ret, __sc_err;				\
+-	{								\
+-		register unsigned long __sc_0  __asm__ ("r0");		\
+-		register unsigned long __sc_3  __asm__ ("r3");		\
+-		register unsigned long __sc_4  __asm__ ("r4");		\
+-		register unsigned long __sc_5  __asm__ ("r5");		\
+-		register unsigned long __sc_6  __asm__ ("r6");		\
+-		register unsigned long __sc_7  __asm__ ("r7");		\
+-									\
+-		__sc_loadargs_##nr(name, args);				\
+-		__asm__ __volatile__					\
+-			("sc           \n\t"				\
+-			 "mfcr %0      "				\
+-			: "=&r" (__sc_0),				\
+-			  "=&r" (__sc_3),  "=&r" (__sc_4),		\
+-			  "=&r" (__sc_5),  "=&r" (__sc_6),		\
+-			  "=&r" (__sc_7)				\
+-			: __sc_asm_input_##nr				\
+-			: "cr0", "ctr", "memory",			\
+-			  "r8", "r9", "r10","r11", "r12");		\
+-		__sc_ret = __sc_3;					\
+-		__sc_err = __sc_0;					\
+-	}								\
+-	if (__sc_err & 0x10000000)					\
+-	{								\
+-		errno = __sc_ret;					\
+-		__sc_ret = -1;						\
+-	}								\
+-	return (type) __sc_ret
+-
+-#define __sc_loadargs_0(name, dummy...)					\
+-	__sc_0 = __NR_##name
+-#define __sc_loadargs_1(name, arg1)					\
+-	__sc_loadargs_0(name);						\
+-	__sc_3 = (unsigned long) (arg1)
+-#define __sc_loadargs_2(name, arg1, arg2)				\
+-	__sc_loadargs_1(name, arg1);					\
+-	__sc_4 = (unsigned long) (arg2)
+-#define __sc_loadargs_3(name, arg1, arg2, arg3)				\
+-	__sc_loadargs_2(name, arg1, arg2);				\
+-	__sc_5 = (unsigned long) (arg3)
+-#define __sc_loadargs_4(name, arg1, arg2, arg3, arg4)			\
+-	__sc_loadargs_3(name, arg1, arg2, arg3);			\
+-	__sc_6 = (unsigned long) (arg4)
+-#define __sc_loadargs_5(name, arg1, arg2, arg3, arg4, arg5)		\
+-	__sc_loadargs_4(name, arg1, arg2, arg3, arg4);			\
+-	__sc_7 = (unsigned long) (arg5)
+-
+-#define __sc_asm_input_0 "0" (__sc_0)
+-#define __sc_asm_input_1 __sc_asm_input_0, "1" (__sc_3)
+-#define __sc_asm_input_2 __sc_asm_input_1, "2" (__sc_4)
+-#define __sc_asm_input_3 __sc_asm_input_2, "3" (__sc_5)
+-#define __sc_asm_input_4 __sc_asm_input_3, "4" (__sc_6)
+-#define __sc_asm_input_5 __sc_asm_input_4, "5" (__sc_7)
+-
+-#define _syscall0(type,name)						\
+-type name(void)								\
+-{									\
+-	__syscall_nr(0, type, name);					\
+-}
+-
+-#define _syscall1(type,name,type1,arg1)					\
+-type name(type1 arg1)							\
+-{									\
+-	__syscall_nr(1, type, name, arg1);				\
+-}
+-
+-#define _syscall2(type,name,type1,arg1,type2,arg2)			\
+-type name(type1 arg1, type2 arg2)					\
+-{									\
+-	__syscall_nr(2, type, name, arg1, arg2);			\
+-}
+-
+-#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3)		\
+-type name(type1 arg1, type2 arg2, type3 arg3)				\
+-{									\
+-	__syscall_nr(3, type, name, arg1, arg2, arg3);			\
+-}
+-
+-#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
+-type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4)		\
+-{									\
+-	__syscall_nr(4, type, name, arg1, arg2, arg3, arg4);		\
+-}
+-
+-#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \
+-type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5)	\
+-{									\
+-	__syscall_nr(5, type, name, arg1, arg2, arg3, arg4, arg5);	\
++#define _syscall0(type,name)		\
++type name (void)			\
++{					\
++	return syscall(__NR_##name);	\
+ }
+-#endif
++
++#define _syscall1(type,name,type1,arg1)		\
++type name (type1 arg1)				\
++{						\
++	return syscall(__NR_##name, arg1);	\
++}
++
++#define _syscall2(type,name,type1,arg1,type2,arg2)	\
++type name (type1 arg1,type2 arg2)			\
++{							\
++	return syscall(__NR_##name, arg1, arg2);	\
++}
++
++#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3)	\
++type name (type1 arg1,type2 arg2,type3 arg3)			\
++{								\
++	return syscall(__NR_##name, arg1, arg2, arg3);		\
++}
++
++#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4)	\
++type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4)				\
++{										\
++	return syscall(__NR_##name, arg1, arg2, arg3, arg4);			\
++}
++
++#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,	\
++		  type5,arg5)							\
++type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5)		\
++{										\
++	return syscall(__NR_##name, arg1, arg2, arg3, arg4, arg5);		\
++}
++
++
++#define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,	\
++		  type5,arg5,type6,arg6)					\
++type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5,type6 arg6)	\
++{										\
++	return syscall(__NR_##name, arg1, arg2, arg3, arg4, arg5, arg6);	\
++}
++
+ 
+ #define __NR_sys_uname __NR_uname
+ #define __NR_sys_getcwd1 __NR_getcwd
diff --git a/qemu.spec b/qemu.spec
index 2197e86..0ab6801 100644
--- a/qemu.spec
+++ b/qemu.spec
@@ -1,7 +1,7 @@
 Summary: QEMU is a FAST! processor emulator
 Name: qemu
 Version: 0.8.1
-Release: 1%{?dist}
+Release: 2%{?dist}
 
 License: GPL/LGPL
 Group: Development/Tools
@@ -10,6 +10,7 @@ Source0: http://www.qemu.org/%{name}-%{version}.tar.gz
 Source1: qemu.init
 Patch0: qemu-0.7.0-build.patch
 Patch1: qemu-0.8.0-sdata.patch
+Patch2: qemu-0.8.1-syscall-macros.patch
 BuildRoot: %{_tmppath}/%{name}-%{version}-root
 BuildRequires: SDL-devel compat-gcc-32 zlib-devel
 PreReq: /sbin/chkconfig
@@ -36,6 +37,7 @@ As QEMU requires no host kernel patches to run, it is very safe and easy to use.
 %setup -q
 %patch0 -p1
 %patch1 -p1
+%patch2 -p1
 
 %build
 ./configure --prefix=%{_prefix} --interp-prefix=%{_prefix}/qemu-%%M \
@@ -80,6 +82,9 @@ fi
 %config %{_sysconfdir}/rc.d/init.d/qemu
 
 %changelog
+* Wed Jun 7 2006 David Woodhouse <dwmw2@infradead.org> 0.8.1-2
+- Fix up kernel header abuse
+
 * Tue May 30 2006 David Woodhouse <dwmw2@infradead.org> 0.8.1-1
 - Update to 0.8.1