fix kernel header abuse
This commit is contained in:
parent
7b2bfbeb66
commit
fb30f3e452
175
qemu-0.8.1-syscall-macros.patch
Normal file
175
qemu-0.8.1-syscall-macros.patch
Normal file
@ -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
|
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user