From fb30f3e4520ceda74523a1cd3cbc6b6859a5cad3 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Jun 07 2006 21:25:23 +0000 Subject: fix kernel header abuse --- 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 0.8.1-2 +- Fix up kernel header abuse + * Tue May 30 2006 David Woodhouse 0.8.1-1 - Update to 0.8.1