From 2a7d6f00f3b73eef0a1e83829fabc79577ec60af Mon Sep 17 00:00:00 2001
From: Richard Purdie <rpurdie@rpsys.net>
Date: Mon, 28 Jan 2008 15:01:26 +0000
Subject: qemu: Remove versions with negative default preferences and cleanup

---
 packages/qemu/files/.mtn2git_empty                 |   0
 packages/qemu/files/02_snapshot_use_tmpdir.patch   |  23 -
 .../qemu/files/03_machines_list_no_error.patch     |  18 -
 .../files/04_do_not_print_rtc_freq_if_ok.patch     |  25 -
 .../files/05_non-fatal_if_linux_hd_missing.patch   |  17 -
 packages/qemu/files/06_exit_segfault.patch         |  45 -
 packages/qemu/files/10_signal_jobs.patch           |  26 -
 packages/qemu/files/11_signal_sigaction.patch      |  21 -
 .../qemu/files/12_signal_powerpc_support.patch     | 401 ---------
 packages/qemu/files/22_net_tuntap_stall.patch      |  18 -
 packages/qemu/files/30_syscall_ipc.patch           |  34 -
 packages/qemu/files/31_syscalls.patch              |  49 --
 packages/qemu/files/32_syscall_sysctl.patch        |  56 --
 packages/qemu/files/33_syscall_ppc_clone.patch     |  22 -
 packages/qemu/files/39_syscall_fadvise64.patch     |  21 -
 packages/qemu/files/41_arm_fpa_sigfpe.patch        | 105 ---
 packages/qemu/files/52_ne2000_return.patch         |  17 -
 packages/qemu/files/61_safe_64bit_int.patch        |  27 -
 packages/qemu/files/63_sparc_build.patch           |  18 -
 packages/qemu/files/64_ppc_asm_constraints.patch   |  18 -
 packages/qemu/files/65_kfreebsd.patch              |  44 -
 packages/qemu/files/66_tls_ld.patch                |  55 --
 packages/qemu/files/91-oh-sdl-cursor.patch         |  18 -
 packages/qemu/files/93-oh-pl110-rgb.patch          | 223 -----
 packages/qemu/files/arm_nptl.patch                 | 857 -------------------
 packages/qemu/files/compiler.patch                 |  10 -
 packages/qemu/files/configure.patch                |  13 -
 packages/qemu/files/fix_segfault.patch             |  46 -
 packages/qemu/files/makefile.patch                 |  37 -
 packages/qemu/files/no-strip.patch                 |  22 -
 packages/qemu/files/pl110_rgb-r0.patch             | 219 -----
 packages/qemu/files/qemu-0.9.0-nptl-update.patch   | 294 -------
 packages/qemu/files/qemu-0.9.0-nptl.patch          | 892 --------------------
 .../qemu/files/qemu-amd64-32b-mapping-0.9.0.patch  |  31 -
 packages/qemu/files/qemu-pci-irq-sharing.patch     |  52 --
 packages/qemu/files/qemu-sdl-cursor.patch          |  13 -
 packages/qemu/files/qemu-usb-wacom-0.8.2.patch     | 445 ----------
 packages/qemu/files/qemu-usb-wacom-buttons.patch   |  23 -
 packages/qemu/files/qemu-usb-wacom-pressure.patch  |  28 -
 .../qemu/files/workaround_bad_futex_headers.patch  |  25 -
 .../qemu/qemu-0.9.0+cvs20070613/.mtn2git_empty     |   0
 .../02_snapshot_use_tmpdir.patch                   |  23 +
 .../03_machines_list_no_error.patch                |  18 +
 .../04_do_not_print_rtc_freq_if_ok.patch           |  25 +
 .../05_non-fatal_if_linux_hd_missing.patch         |  17 +
 .../qemu-0.9.0+cvs20070613/06_exit_segfault.patch  |  45 +
 .../qemu-0.9.0+cvs20070613/10_signal_jobs.patch    |  26 +
 .../11_signal_sigaction.patch                      |  21 +
 .../12_signal_powerpc_support.patch                | 401 +++++++++
 .../22_net_tuntap_stall.patch                      |  18 +
 .../qemu-0.9.0+cvs20070613/30_syscall_ipc.patch    |  34 +
 .../qemu/qemu-0.9.0+cvs20070613/31_syscalls.patch  |  49 ++
 .../qemu-0.9.0+cvs20070613/32_syscall_sysctl.patch |  56 ++
 .../33_syscall_ppc_clone.patch                     |  22 +
 .../39_syscall_fadvise64.patch                     |  21 +
 .../qemu-0.9.0+cvs20070613/41_arm_fpa_sigfpe.patch | 105 +++
 .../qemu-0.9.0+cvs20070613/52_ne2000_return.patch  |  17 +
 .../qemu-0.9.0+cvs20070613/61_safe_64bit_int.patch |  27 +
 .../qemu-0.9.0+cvs20070613/63_sparc_build.patch    |  18 +
 .../64_ppc_asm_constraints.patch                   |  18 +
 .../qemu/qemu-0.9.0+cvs20070613/65_kfreebsd.patch  |  44 +
 .../qemu/qemu-0.9.0+cvs20070613/66_tls_ld.patch    |  55 ++
 .../qemu-0.9.0+cvs20070613/91-oh-sdl-cursor.patch  |  18 +
 .../qemu-0.9.0+cvs20070613/93-oh-pl110-rgb.patch   | 223 +++++
 .../qemu/qemu-0.9.0+cvs20070613/arm_nptl.patch     | 857 +++++++++++++++++++
 .../qemu/qemu-0.9.0+cvs20070613/compiler.patch     |  10 +
 .../qemu/qemu-0.9.0+cvs20070613/configure.patch    |  13 +
 .../qemu/qemu-0.9.0+cvs20070613/fix_segfault.patch |  46 +
 .../qemu/qemu-0.9.0+cvs20070613/makefile.patch     |  37 +
 .../qemu/qemu-0.9.0+cvs20070613/no-strip.patch     |  22 +
 .../qemu/qemu-0.9.0+cvs20070613/pl110_rgb-r0.patch | 219 +++++
 .../qemu-0.9.0-nptl-update.patch                   | 294 +++++++
 .../qemu-0.9.0+cvs20070613/qemu-0.9.0-nptl.patch   | 892 ++++++++++++++++++++
 .../qemu-amd64-32b-mapping-0.9.0.patch             |  31 +
 .../qemu-pci-irq-sharing.patch                     |  52 ++
 .../qemu-0.9.0+cvs20070613/qemu-sdl-cursor.patch   |  13 +
 .../qemu-usb-wacom-0.8.2.patch                     | 445 ++++++++++
 .../qemu-usb-wacom-buttons.patch                   |  23 +
 .../qemu-usb-wacom-pressure.patch                  |  28 +
 .../workaround_bad_futex_headers.patch             |  25 +
 .../qemu/qemu-0.9.0+cvs20070701/.mtn2git_empty     |   0
 .../qemu-0.9.0+cvs20070701/arm_nptl-0.9.0.patch    | 853 -------------------
 .../qemu-0.9.0+cvs20070701/configure-0.9.0.patch   |  12 -
 .../pl110_rgb-r0-0.9.0.patch                       | 217 -----
 .../qemu-0.9.0+cvs20070701/qemu-0.9.0-gcc4.patch   | 881 -------------------
 .../qemu-amd64-32b-mapping-0.9.0.patch             |  21 -
 .../qemu-sdl-cursor-0.9.0.patch                    |  12 -
 .../qemu/qemu-0.9.0+cvs20071121/.mtn2git_empty     |   0
 .../02_snapshot_use_tmpdir.patch                   |  23 -
 .../04_do_not_print_rtc_freq_if_ok.patch           |  26 -
 .../05_non-fatal_if_linux_hd_missing.patch         |  17 -
 .../qemu-0.9.0+cvs20071121/06_exit_segfault.patch  |  45 -
 .../qemu-0.9.0+cvs20071121/10_signal_jobs.patch    |  26 -
 .../11_signal_sigaction.patch                      |  21 -
 .../22_net_tuntap_stall.patch                      |  18 -
 .../qemu/qemu-0.9.0+cvs20071121/31_syscalls.patch  |  48 --
 .../qemu-0.9.0+cvs20071121/32_syscall_sysctl.patch |  55 --
 .../33_syscall_ppc_clone.patch                     |  22 -
 .../39_syscall_fadvise64.patch                     |  21 -
 .../qemu-0.9.0+cvs20071121/41_arm_fpa_sigfpe.patch | 104 ---
 .../qemu-0.9.0+cvs20071121/52_ne2000_return.patch  |  17 -
 .../qemu-0.9.0+cvs20071121/61_safe_64bit_int.patch |  27 -
 .../qemu-0.9.0+cvs20071121/63_sparc_build.patch    |  18 -
 .../64_ppc_asm_constraints.patch                   |  18 -
 .../qemu/qemu-0.9.0+cvs20071121/65_kfreebsd.patch  |  35 -
 .../qemu/qemu-0.9.0+cvs20071121/66_tls_ld.patch    |  55 --
 .../qemu-0.9.0+cvs20071121/91-oh-sdl-cursor.patch  |  18 -
 .../disable-error-in-configure.patch               |  17 -
 .../qemu/qemu-0.9.0+cvs20071121/fix_segfault.patch |  37 -
 .../qemu/qemu-0.9.0+cvs20071121/no-strip.patch     |  22 -
 .../qemu-0.9.0-nptl-update.patch                   | 219 -----
 .../qemu-0.9.0+cvs20071121/qemu-0.9.0-nptl.patch   | 929 ---------------------
 .../qemu-amd64-32b-mapping-0.9.0.patch             |  37 -
 .../workaround_bad_futex_headers.patch             |  25 -
 .../qemu/qemu-0.9.1/02_snapshot_use_tmpdir.patch   |  23 +
 .../04_do_not_print_rtc_freq_if_ok.patch           |  26 +
 .../05_non-fatal_if_linux_hd_missing.patch         |  17 +
 packages/qemu/qemu-0.9.1/06_exit_segfault.patch    |  45 +
 packages/qemu/qemu-0.9.1/10_signal_jobs.patch      |  26 +
 packages/qemu/qemu-0.9.1/11_signal_sigaction.patch |  21 +
 packages/qemu/qemu-0.9.1/22_net_tuntap_stall.patch |  18 +
 packages/qemu/qemu-0.9.1/31_syscalls.patch         |  48 ++
 packages/qemu/qemu-0.9.1/32_syscall_sysctl.patch   |  55 ++
 .../qemu/qemu-0.9.1/33_syscall_ppc_clone.patch     |  22 +
 .../qemu/qemu-0.9.1/39_syscall_fadvise64.patch     |  21 +
 packages/qemu/qemu-0.9.1/41_arm_fpa_sigfpe.patch   | 104 +++
 packages/qemu/qemu-0.9.1/52_ne2000_return.patch    |  17 +
 packages/qemu/qemu-0.9.1/61_safe_64bit_int.patch   |  27 +
 packages/qemu/qemu-0.9.1/63_sparc_build.patch      |  18 +
 .../qemu/qemu-0.9.1/64_ppc_asm_constraints.patch   |  18 +
 packages/qemu/qemu-0.9.1/65_kfreebsd.patch         |  35 +
 packages/qemu/qemu-0.9.1/66_tls_ld.patch           |  55 ++
 packages/qemu/qemu-0.9.1/91-oh-sdl-cursor.patch    |  18 +
 .../qemu-0.9.1/configure_symlinkpath_fix.patch     |  28 +
 .../qemu-0.9.1/disable-error-in-configure.patch    |  17 +
 packages/qemu/qemu-0.9.1/fix_segfault.patch        |  37 +
 .../qemu/qemu-0.9.1/qemu-0.9.0-nptl-update.patch   | 219 +++++
 packages/qemu/qemu-0.9.1/qemu-0.9.0-nptl.patch     | 929 +++++++++++++++++++++
 .../qemu-0.9.1/qemu-amd64-32b-mapping-0.9.0.patch  |  37 +
 packages/qemu/qemu-0.9.1/series                    |  25 +
 .../qemu-0.9.1/workaround_bad_futex_headers.patch  |  25 +
 packages/qemu/qemu-native_0.9.0+cvs.bb             |   3 -
 packages/qemu/qemu-native_20071121.bb              |   8 -
 packages/qemu/qemu_0.9.0+cvs.bb                    |  22 -
 packages/qemu/qemu_20071121.bb                     |  60 --
 145 files changed, 6239 insertions(+), 8297 deletions(-)
 delete mode 100644 packages/qemu/files/.mtn2git_empty
 delete mode 100644 packages/qemu/files/02_snapshot_use_tmpdir.patch
 delete mode 100644 packages/qemu/files/03_machines_list_no_error.patch
 delete mode 100644 packages/qemu/files/04_do_not_print_rtc_freq_if_ok.patch
 delete mode 100644 packages/qemu/files/05_non-fatal_if_linux_hd_missing.patch
 delete mode 100644 packages/qemu/files/06_exit_segfault.patch
 delete mode 100644 packages/qemu/files/10_signal_jobs.patch
 delete mode 100644 packages/qemu/files/11_signal_sigaction.patch
 delete mode 100644 packages/qemu/files/12_signal_powerpc_support.patch
 delete mode 100644 packages/qemu/files/22_net_tuntap_stall.patch
 delete mode 100644 packages/qemu/files/30_syscall_ipc.patch
 delete mode 100644 packages/qemu/files/31_syscalls.patch
 delete mode 100644 packages/qemu/files/32_syscall_sysctl.patch
 delete mode 100644 packages/qemu/files/33_syscall_ppc_clone.patch
 delete mode 100644 packages/qemu/files/39_syscall_fadvise64.patch
 delete mode 100644 packages/qemu/files/41_arm_fpa_sigfpe.patch
 delete mode 100644 packages/qemu/files/52_ne2000_return.patch
 delete mode 100644 packages/qemu/files/61_safe_64bit_int.patch
 delete mode 100644 packages/qemu/files/63_sparc_build.patch
 delete mode 100644 packages/qemu/files/64_ppc_asm_constraints.patch
 delete mode 100644 packages/qemu/files/65_kfreebsd.patch
 delete mode 100644 packages/qemu/files/66_tls_ld.patch
 delete mode 100644 packages/qemu/files/91-oh-sdl-cursor.patch
 delete mode 100644 packages/qemu/files/93-oh-pl110-rgb.patch
 delete mode 100644 packages/qemu/files/arm_nptl.patch
 delete mode 100644 packages/qemu/files/compiler.patch
 delete mode 100644 packages/qemu/files/configure.patch
 delete mode 100644 packages/qemu/files/fix_segfault.patch
 delete mode 100644 packages/qemu/files/makefile.patch
 delete mode 100644 packages/qemu/files/no-strip.patch
 delete mode 100644 packages/qemu/files/pl110_rgb-r0.patch
 delete mode 100644 packages/qemu/files/qemu-0.9.0-nptl-update.patch
 delete mode 100644 packages/qemu/files/qemu-0.9.0-nptl.patch
 delete mode 100644 packages/qemu/files/qemu-amd64-32b-mapping-0.9.0.patch
 delete mode 100644 packages/qemu/files/qemu-pci-irq-sharing.patch
 delete mode 100644 packages/qemu/files/qemu-sdl-cursor.patch
 delete mode 100644 packages/qemu/files/qemu-usb-wacom-0.8.2.patch
 delete mode 100644 packages/qemu/files/qemu-usb-wacom-buttons.patch
 delete mode 100644 packages/qemu/files/qemu-usb-wacom-pressure.patch
 delete mode 100644 packages/qemu/files/workaround_bad_futex_headers.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/.mtn2git_empty
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/02_snapshot_use_tmpdir.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/03_machines_list_no_error.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/04_do_not_print_rtc_freq_if_ok.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/05_non-fatal_if_linux_hd_missing.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/06_exit_segfault.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/10_signal_jobs.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/11_signal_sigaction.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/12_signal_powerpc_support.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/22_net_tuntap_stall.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/30_syscall_ipc.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/31_syscalls.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/32_syscall_sysctl.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/33_syscall_ppc_clone.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/39_syscall_fadvise64.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/41_arm_fpa_sigfpe.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/52_ne2000_return.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/61_safe_64bit_int.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/63_sparc_build.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/64_ppc_asm_constraints.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/65_kfreebsd.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/66_tls_ld.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/91-oh-sdl-cursor.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/93-oh-pl110-rgb.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/arm_nptl.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/compiler.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/configure.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/fix_segfault.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/makefile.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/no-strip.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/pl110_rgb-r0.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/qemu-0.9.0-nptl-update.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/qemu-0.9.0-nptl.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/qemu-amd64-32b-mapping-0.9.0.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/qemu-pci-irq-sharing.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/qemu-sdl-cursor.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-0.8.2.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-buttons.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-pressure.patch
 create mode 100644 packages/qemu/qemu-0.9.0+cvs20070613/workaround_bad_futex_headers.patch
 delete mode 100644 packages/qemu/qemu-0.9.0+cvs20070701/.mtn2git_empty
 delete mode 100644 packages/qemu/qemu-0.9.0+cvs20070701/arm_nptl-0.9.0.patch
 delete mode 100644 packages/qemu/qemu-0.9.0+cvs20070701/configure-0.9.0.patch
 delete mode 100644 packages/qemu/qemu-0.9.0+cvs20070701/pl110_rgb-r0-0.9.0.patch
 delete mode 100644 packages/qemu/qemu-0.9.0+cvs20070701/qemu-0.9.0-gcc4.patch
 delete mode 100644 packages/qemu/qemu-0.9.0+cvs20070701/qemu-amd64-32b-mapping-0.9.0.patch
 delete mode 100644 packages/qemu/qemu-0.9.0+cvs20070701/qemu-sdl-cursor-0.9.0.patch
 delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/.mtn2git_empty
 delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/02_snapshot_use_tmpdir.patch
 delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/04_do_not_print_rtc_freq_if_ok.patch
 delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/05_non-fatal_if_linux_hd_missing.patch
 delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/06_exit_segfault.patch
 delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/10_signal_jobs.patch
 delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/11_signal_sigaction.patch
 delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/22_net_tuntap_stall.patch
 delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/31_syscalls.patch
 delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/32_syscall_sysctl.patch
 delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/33_syscall_ppc_clone.patch
 delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/39_syscall_fadvise64.patch
 delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/41_arm_fpa_sigfpe.patch
 delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/52_ne2000_return.patch
 delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/61_safe_64bit_int.patch
 delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/63_sparc_build.patch
 delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/64_ppc_asm_constraints.patch
 delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/65_kfreebsd.patch
 delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/66_tls_ld.patch
 delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/91-oh-sdl-cursor.patch
 delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/disable-error-in-configure.patch
 delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/fix_segfault.patch
 delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/no-strip.patch
 delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/qemu-0.9.0-nptl-update.patch
 delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/qemu-0.9.0-nptl.patch
 delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/qemu-amd64-32b-mapping-0.9.0.patch
 delete mode 100644 packages/qemu/qemu-0.9.0+cvs20071121/workaround_bad_futex_headers.patch
 create mode 100644 packages/qemu/qemu-0.9.1/02_snapshot_use_tmpdir.patch
 create mode 100644 packages/qemu/qemu-0.9.1/04_do_not_print_rtc_freq_if_ok.patch
 create mode 100644 packages/qemu/qemu-0.9.1/05_non-fatal_if_linux_hd_missing.patch
 create mode 100644 packages/qemu/qemu-0.9.1/06_exit_segfault.patch
 create mode 100644 packages/qemu/qemu-0.9.1/10_signal_jobs.patch
 create mode 100644 packages/qemu/qemu-0.9.1/11_signal_sigaction.patch
 create mode 100644 packages/qemu/qemu-0.9.1/22_net_tuntap_stall.patch
 create mode 100644 packages/qemu/qemu-0.9.1/31_syscalls.patch
 create mode 100644 packages/qemu/qemu-0.9.1/32_syscall_sysctl.patch
 create mode 100644 packages/qemu/qemu-0.9.1/33_syscall_ppc_clone.patch
 create mode 100644 packages/qemu/qemu-0.9.1/39_syscall_fadvise64.patch
 create mode 100644 packages/qemu/qemu-0.9.1/41_arm_fpa_sigfpe.patch
 create mode 100644 packages/qemu/qemu-0.9.1/52_ne2000_return.patch
 create mode 100644 packages/qemu/qemu-0.9.1/61_safe_64bit_int.patch
 create mode 100644 packages/qemu/qemu-0.9.1/63_sparc_build.patch
 create mode 100644 packages/qemu/qemu-0.9.1/64_ppc_asm_constraints.patch
 create mode 100644 packages/qemu/qemu-0.9.1/65_kfreebsd.patch
 create mode 100644 packages/qemu/qemu-0.9.1/66_tls_ld.patch
 create mode 100644 packages/qemu/qemu-0.9.1/91-oh-sdl-cursor.patch
 create mode 100644 packages/qemu/qemu-0.9.1/configure_symlinkpath_fix.patch
 create mode 100644 packages/qemu/qemu-0.9.1/disable-error-in-configure.patch
 create mode 100644 packages/qemu/qemu-0.9.1/fix_segfault.patch
 create mode 100644 packages/qemu/qemu-0.9.1/qemu-0.9.0-nptl-update.patch
 create mode 100644 packages/qemu/qemu-0.9.1/qemu-0.9.0-nptl.patch
 create mode 100644 packages/qemu/qemu-0.9.1/qemu-amd64-32b-mapping-0.9.0.patch
 create mode 100644 packages/qemu/qemu-0.9.1/series
 create mode 100644 packages/qemu/qemu-0.9.1/workaround_bad_futex_headers.patch
 delete mode 100644 packages/qemu/qemu-native_0.9.0+cvs.bb
 delete mode 100644 packages/qemu/qemu-native_20071121.bb
 delete mode 100644 packages/qemu/qemu_0.9.0+cvs.bb
 delete mode 100644 packages/qemu/qemu_20071121.bb

diff --git a/packages/qemu/files/.mtn2git_empty b/packages/qemu/files/.mtn2git_empty
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/packages/qemu/files/02_snapshot_use_tmpdir.patch b/packages/qemu/files/02_snapshot_use_tmpdir.patch
deleted file mode 100644
index bd955b6db3..0000000000
--- a/packages/qemu/files/02_snapshot_use_tmpdir.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-#DPATCHLEVEL=0
----
-# block.c |    6 +++++-
-# 1 file changed, 5 insertions(+), 1 deletion(-)
-#
-Index: block.c
-===================================================================
---- block.c.orig	2007-06-13 11:51:52.000000000 +0100
-+++ block.c	2007-06-13 11:51:53.000000000 +0100
-@@ -188,8 +188,12 @@ void get_tmp_filename(char *filename, in
- void get_tmp_filename(char *filename, int size)
- {
-     int fd;
-+    char *tmpdir;
-     /* XXX: race condition possible */
--    pstrcpy(filename, size, "/tmp/vl.XXXXXX");
-+    tmpdir = getenv("TMPDIR");
-+    if (!tmpdir)
-+        tmpdir = "/tmp";
-+    snprintf(filename, size, "%s/vl.XXXXXX", tmpdir);
-     fd = mkstemp(filename);
-     close(fd);
- }
diff --git a/packages/qemu/files/03_machines_list_no_error.patch b/packages/qemu/files/03_machines_list_no_error.patch
deleted file mode 100644
index 73f31550fe..0000000000
--- a/packages/qemu/files/03_machines_list_no_error.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-#DPATCHLEVEL=0
----
-# vl.c |    2 +-
-# 1 file changed, 1 insertion(+), 1 deletion(-)
-#
-Index: vl.c
-===================================================================
---- vl.c.orig	2007-06-13 11:51:52.000000000 +0100
-+++ vl.c	2007-06-13 11:52:24.000000000 +0100
-@@ -7242,7 +7242,7 @@ int main(int argc, char **argv)
-                                m->name, m->desc, 
-                                m == first_machine ? " (default)" : "");
-                     }
--                    exit(1);
-+                    exit(strcmp(optarg, "?"));
-                 }
-                 break;
-             case QEMU_OPTION_cpu:
diff --git a/packages/qemu/files/04_do_not_print_rtc_freq_if_ok.patch b/packages/qemu/files/04_do_not_print_rtc_freq_if_ok.patch
deleted file mode 100644
index 1575cbce63..0000000000
--- a/packages/qemu/files/04_do_not_print_rtc_freq_if_ok.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-#DPATCHLEVEL=1
----
-# vl.c |    6 +++++-
-# 1 file changed, 5 insertions(+), 1 deletion(-)
-#
-Index: qemu/vl.c
-===================================================================
---- qemu.orig/vl.c	2007-06-13 11:51:53.000000000 +0100
-+++ qemu/vl.c	2007-06-13 11:52:19.000000000 +0100
-@@ -1026,10 +1026,14 @@ static int rtc_fd;
- 
- static int start_rtc_timer(void)
- {
-+    unsigned long current_rtc_freq = 0;
-+
-     rtc_fd = open("/dev/rtc", O_RDONLY);
-     if (rtc_fd < 0)
-         return -1;
--    if (ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) {
-+    ioctl(rtc_fd, RTC_IRQP_READ, &current_rtc_freq);
-+    if (current_rtc_freq != RTC_FREQ &&
-+        ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) {
-         fprintf(stderr, "Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal\n"
-                 "error, but for better emulation accuracy either use a 2.6 host Linux kernel or\n"
-                 "type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.\n");
diff --git a/packages/qemu/files/05_non-fatal_if_linux_hd_missing.patch b/packages/qemu/files/05_non-fatal_if_linux_hd_missing.patch
deleted file mode 100644
index b7c4732f24..0000000000
--- a/packages/qemu/files/05_non-fatal_if_linux_hd_missing.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-#DPATCHLEVEL=1
----
-# hw/pc.c |    1 -
-# 1 file changed, 1 deletion(-)
-#
-Index: qemu/hw/pc.c
-===================================================================
---- qemu.orig/hw/pc.c	2007-06-13 11:51:52.000000000 +0100
-+++ qemu/hw/pc.c	2007-06-13 11:51:53.000000000 +0100
-@@ -355,7 +355,6 @@ static void generate_bootsect(uint32_t g
-     if (bs_table[0] == NULL) {
- 	fprintf(stderr, "A disk image must be given for 'hda' when booting "
- 		"a Linux kernel\n");
--	exit(1);
-     }
- 
-     memset(bootsect, 0, sizeof(bootsect));
diff --git a/packages/qemu/files/06_exit_segfault.patch b/packages/qemu/files/06_exit_segfault.patch
deleted file mode 100644
index 447c3550b8..0000000000
--- a/packages/qemu/files/06_exit_segfault.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-#DPATCHLEVEL=0
----
-# linux-user/main.c |    8 ++++----
-# 1 file changed, 4 insertions(+), 4 deletions(-)
-#
-Index: linux-user/main.c
-===================================================================
---- linux-user/main.c.orig	2007-06-13 11:51:52.000000000 +0100
-+++ linux-user/main.c	2007-06-13 11:52:16.000000000 +0100
-@@ -642,7 +642,7 @@ void cpu_loop (CPUSPARCState *env)
-         default:
-             printf ("Unhandled trap: 0x%x\n", trapnr);
-             cpu_dump_state(env, stderr, fprintf, 0);
--            exit (1);
-+            _exit (1);
-         }
-         process_pending_signals (env);
-     }
-@@ -1471,7 +1471,7 @@ void cpu_loop (CPUState *env)
-         default:
-             printf ("Unhandled trap: 0x%x\n", trapnr);
-             cpu_dump_state(env, stderr, fprintf, 0);
--            exit (1);
-+            _exit (1);
-         }
-         process_pending_signals (env);
-     }
-@@ -1735,7 +1735,7 @@ int main(int argc, char **argv)
-                 for(item = cpu_log_items; item->mask != 0; item++) {
-                     printf("%-10s %s\n", item->name, item->help);
-                 }
--                exit(1);
-+                _exit(1);
-             }
-             cpu_set_log(mask);
-         } else if (!strcmp(r, "s")) {
-@@ -1754,7 +1754,7 @@ int main(int argc, char **argv)
-             if (qemu_host_page_size == 0 ||
-                 (qemu_host_page_size & (qemu_host_page_size - 1)) != 0) {
-                 fprintf(stderr, "page size must be a power of two\n");
--                exit(1);
-+                _exit(1);
-             }
-         } else if (!strcmp(r, "g")) {
-             gdbstub_port = atoi(argv[optind++]);
diff --git a/packages/qemu/files/10_signal_jobs.patch b/packages/qemu/files/10_signal_jobs.patch
deleted file mode 100644
index 794a538676..0000000000
--- a/packages/qemu/files/10_signal_jobs.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-#DPATCHLEVEL=0
----
-# linux-user/signal.c |    7 ++++++-
-# 1 file changed, 6 insertions(+), 1 deletion(-)
-#
-Index: linux-user/signal.c
-===================================================================
---- linux-user/signal.c.orig	2007-06-13 11:51:52.000000000 +0100
-+++ linux-user/signal.c	2007-06-13 11:52:21.000000000 +0100
-@@ -341,10 +341,15 @@ int queue_signal(int sig, target_siginfo
-     k = &sigact_table[sig - 1];
-     handler = k->sa._sa_handler;
-     if (handler == TARGET_SIG_DFL) {
-+        if (sig == TARGET_SIGTSTP || sig == TARGET_SIGTTIN || sig == TARGET_SIGTTOU) {
-+            kill(getpid(),SIGSTOP);
-+            return 0;
-+        } else
-         /* default handler : ignore some signal. The other are fatal */
-         if (sig != TARGET_SIGCHLD && 
-             sig != TARGET_SIGURG && 
--            sig != TARGET_SIGWINCH) {
-+            sig != TARGET_SIGWINCH &&
-+            sig != TARGET_SIGCONT) {
-             force_sig(sig);
-         } else {
-             return 0; /* indicate ignored */
diff --git a/packages/qemu/files/11_signal_sigaction.patch b/packages/qemu/files/11_signal_sigaction.patch
deleted file mode 100644
index 5446efc562..0000000000
--- a/packages/qemu/files/11_signal_sigaction.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-#DPATCHLEVEL=0
----
-# linux-user/signal.c |    5 +++++
-# 1 file changed, 5 insertions(+)
-#
-Index: linux-user/signal.c
-===================================================================
---- linux-user/signal.c.orig	2007-06-13 11:51:54.000000000 +0100
-+++ linux-user/signal.c	2007-06-13 11:52:20.000000000 +0100
-@@ -429,6 +429,11 @@ int do_sigaction(int sig, const struct t
- 
-     if (sig < 1 || sig > TARGET_NSIG || sig == SIGKILL || sig == SIGSTOP)
-         return -EINVAL;
-+
-+    /* no point doing the stuff as those are not allowed for sigaction */
-+    if ((sig == TARGET_SIGKILL) || (sig == TARGET_SIGSTOP))
-+        return -EINVAL;
-+
-     k = &sigact_table[sig - 1];
- #if defined(DEBUG_SIGNAL)
-     fprintf(stderr, "sigaction sig=%d act=0x%08x, oact=0x%08x\n", 
diff --git a/packages/qemu/files/12_signal_powerpc_support.patch b/packages/qemu/files/12_signal_powerpc_support.patch
deleted file mode 100644
index d8d4198784..0000000000
--- a/packages/qemu/files/12_signal_powerpc_support.patch
+++ /dev/null
@@ -1,401 +0,0 @@
-#DPATCHLEVEL=1
----
-# linux-user/signal.c |  371 ++++++++++++++++++++++++++++++++++++++++++++++++++++
-# 1 file changed, 371 insertions(+)
-#
-Index: qemu/linux-user/signal.c
-===================================================================
---- qemu.orig/linux-user/signal.c	2007-06-13 11:51:54.000000000 +0100
-+++ qemu/linux-user/signal.c	2007-06-13 11:51:54.000000000 +0100
-@@ -2,6 +2,7 @@
-  *  Emulation of Linux signals
-  * 
-  *  Copyright (c) 2003 Fabrice Bellard
-+ *  Copyright (c) 2005 Josh Triplett <josh@psas.pdx.edu>
-  *
-  *  This program is free software; you can redistribute it and/or modify
-  *  it under the terms of the GNU General Public License as published by
-@@ -16,6 +17,12 @@
-  *  You should have received a copy of the GNU General Public License
-  *  along with this program; if not, write to the Free Software
-  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ *
-+ *  Various portions adapted from the Linux kernel:
-+ *  Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org)
-+ *    Derived from "arch/i386/kernel/signal.c"
-+ *      Copyright (C) 1991, 1992 Linus Torvalds
-+ *      1997-11-28  Modified for POSIX.1b signals by Richard Henderson
-  */
- #include <stdlib.h>
- #include <stdio.h>
-@@ -1964,6 +1971,370 @@ long do_rt_sigreturn(CPUState *env)
-     return -ENOSYS;
- }
- 
-+#elif defined(TARGET_PPC)
-+/* Adapted from the Linux kernel:
-+ * arch/ppc/kernel/signal.c
-+ * include/asm-ppc/elf.h
-+ * include/asm-ppc/ptrace.h
-+ * include/asm-ppc/sigcontext.h
-+ * include/asm-ppc/ucontext.h
-+ */
-+
-+/*
-+ * When we have signals to deliver, we set up on the
-+ * user stack, going down from the original stack pointer:
-+ *	a sigregs struct
-+ *	a sigcontext struct
-+ *	a gap of __SIGNAL_FRAMESIZE bytes
-+ *
-+ * Each of these things must be a multiple of 16 bytes in size.
-+ *
-+ */
-+
-+#define TARGET_ELF_NGREG	48	/* includes nip, msr, lr, etc. */
-+#define TARGET_ELF_NFPREG	33	/* includes fpscr */
-+#define TARGET_ELF_NVRREG	33	/* includes vscr */
-+
-+/* General registers */
-+typedef unsigned long target_elf_greg_t;
-+typedef target_elf_greg_t target_elf_gregset_t[TARGET_ELF_NGREG];
-+
-+/* Floating point registers */
-+typedef double target_elf_fpreg_t;
-+typedef target_elf_fpreg_t target_elf_fpregset_t[TARGET_ELF_NFPREG];
-+
-+/* Altivec registers */
-+/* FIXME: Altivec not supported yet. */
-+/* typedef __vector128 elf_vrreg_t; */
-+typedef uint64_t target_elf_vrreg_t[2];
-+typedef target_elf_vrreg_t target_elf_vrregset_t[TARGET_ELF_NVRREG];
-+
-+struct target_mcontext {
-+	target_elf_gregset_t	mc_gregs;
-+	target_elf_fpregset_t	mc_fregs;
-+	/* The kernel calls this mc_pad, but does #define tramp mc_pad */
-+	target_ulong		tramp[2];
-+	target_elf_vrregset_t	mc_vregs __attribute__((__aligned__(16)));
-+};
-+
-+struct target_sigregs {
-+	struct target_mcontext	mctx;		/* all the register values */
-+	/* Programs using the rs6000/xcoff abi can save up to 19 gp regs
-+	   and 18 fp regs below sp before decrementing it. */
-+	int		abigap[56];
-+};
-+
-+struct target_sigcontext {
-+	target_ulong   _unused[4];
-+	uint32_t       signal;
-+	target_ulong   handler;
-+	target_ulong   oldmask;
-+	struct target_pt_regs *regs;
-+};
-+
-+#define __SIGNAL_FRAMESIZE	64
-+
-+static int
-+save_user_regs(CPUState *env, struct target_mcontext *frame, int sigret)
-+{
-+	/* save general and floating-point registers */
-+#if 0 /* FIXME: handle floating-point, Altivec, SPE */
-+	CHECK_FULL_REGS(regs);
-+	preempt_disable();
-+	if (regs->msr & MSR_FP)
-+		giveup_fpu(current);
-+#ifdef CONFIG_ALTIVEC
-+	if (current->thread.used_vr && (regs->msr & MSR_VEC))
-+		giveup_altivec(current);
-+#endif /* CONFIG_ALTIVEC */
-+#ifdef CONFIG_SPE
-+	if (current->thread.used_spe && (regs->msr & MSR_SPE))
-+		giveup_spe(current);
-+#endif /* CONFIG_ALTIVEC */
-+	preempt_enable();
-+#endif /* 0 */
-+
-+	/* Note: this needs to be in the same order as target_pt_regs */
-+	if(!memcpy(&frame->mc_gregs, env->gpr,
-+	                  32*sizeof(target_elf_greg_t))
-+	   || __put_user(env->nip, &frame->mc_gregs[32])
-+	   || __put_user(do_load_msr(env), &frame->mc_gregs[33])
-+	   /* FIXME: || __put_user(orig_gpr3, &frame->mc_gregs[34]) */
-+	   || __put_user(env->ctr, &frame->mc_gregs[35])
-+	   || __put_user(env->lr, &frame->mc_gregs[36])
-+	   || __put_user(do_load_xer(env), &frame->mc_gregs[37])
-+	   || __put_user(do_load_cr(env), &frame->mc_gregs[38])
-+	   || __put_user(env->spr[SPR_MQ], &frame->mc_gregs[39])
-+	   /* FIXME: || __put_user(trap, &frame->mc_gregs[40]) */
-+	   || __put_user(env->spr[SPR_DAR], &frame->mc_gregs[41])
-+	   || __put_user(env->spr[SPR_DSISR], &frame->mc_gregs[42])
-+	   /* FIXME: || __put_user(result, &frame->mc_gregs[43]) */)
-+		return 1;
-+
-+	if(!memcpy(&frame->mc_fregs, env->fpr,
-+	                  32*sizeof(target_elf_fpreg_t))
-+	   || __put_user(do_load_fpscr(env), &frame->mc_fregs[32]))
-+
-+	do_store_fpscr(env, 0, 0xFF); /* turn off all fp exceptions */
-+
-+#if 0 /* FIXME: handle Altivec, SPE */
-+#ifdef CONFIG_ALTIVEC
-+	/* save altivec registers */
-+	if (current->thread.used_vr) {
-+		if (!memcpy(&frame->mc_vregs, current->thread.vr,
-+				   ELF_NVRREG * sizeof(vector128)))
-+			return 1;
-+		/* set MSR_VEC in the saved MSR value to indicate that
-+		   frame->mc_vregs contains valid data */
-+		if (__put_user(regs->msr | MSR_VEC, &frame->mc_gregs[PT_MSR]))
-+			return 1;
-+	}
-+	/* else assert((regs->msr & MSR_VEC) == 0) */
-+
-+	/* We always copy to/from vrsave, it's 0 if we don't have or don't
-+	 * use altivec. Since VSCR only contains 32 bits saved in the least
-+	 * significant bits of a vector, we "cheat" and stuff VRSAVE in the
-+	 * most significant bits of that same vector. --BenH
-+	 */
-+	if (__put_user(current->thread.vrsave, (u32 __user *)&frame->mc_vregs[32]))
-+		return 1;
-+#endif /* CONFIG_ALTIVEC */
-+
-+#ifdef CONFIG_SPE
-+	/* save spe registers */
-+	if (current->thread.used_spe) {
-+		if (!memcpy(&frame->mc_vregs, current->thread.evr,
-+				   ELF_NEVRREG * sizeof(u32)))
-+			return 1;
-+		/* set MSR_SPE in the saved MSR value to indicate that
-+		   frame->mc_vregs contains valid data */
-+		if (__put_user(regs->msr | MSR_SPE, &frame->mc_gregs[PT_MSR]))
-+			return 1;
-+	}
-+	/* else assert((regs->msr & MSR_SPE) == 0) */
-+
-+	/* We always copy to/from spefscr */
-+	if (__put_user(current->thread.spefscr, (u32 *)&frame->mc_vregs + ELF_NEVRREG))
-+		return 1;
-+#endif /* CONFIG_SPE */
-+#endif /* 0 */
-+
-+	if (sigret) {
-+		/* Set up the sigreturn trampoline: li r0,sigret; sc */
-+		if (__put_user(0x38000000UL + sigret, &frame->tramp[0])
-+		    || __put_user(0x44000002UL, &frame->tramp[1]))
-+			return 1;
-+#if 0
-+		flush_icache_range((unsigned long) &frame->tramp[0],
-+				   (unsigned long) &frame->tramp[2]);
-+#endif
-+	}
-+
-+	return 0;
-+}
-+
-+static int
-+restore_user_regs(CPUState *env, struct target_mcontext *sr, int sig)
-+{
-+	target_ulong save_r2 = 0;
-+	target_ulong saved_xer;
-+	target_ulong saved_cr;
-+	double saved_fpscr;
-+
-+#if 0 /* FIXME: handle Altivec, SPE */
-+#if defined(CONFIG_ALTIVEC) || defined(CONFIG_SPE)
-+	unsigned long msr;
-+#endif
-+#endif /* 0 */
-+
-+	/* backup/restore the TLS as we don't want it to be modified */
-+	if (!sig)
-+		save_r2 = env->gpr[2];
-+
-+	/* Copy all registers except MSR */
-+	/* Note: this needs to be in the same order as target_pt_regs */
-+	if(!memcpy(env->gpr, &sr->mc_gregs,
-+	                    32*sizeof(target_elf_greg_t))
-+	   || __get_user(env->nip, &sr->mc_gregs[32])
-+	   /* FIXME: || __get_user(orig_gpr3, &sr->mc_gregs[34]) */
-+	   || __get_user(env->ctr, &sr->mc_gregs[35])
-+	   || __get_user(env->lr, &sr->mc_gregs[36])
-+	   || __get_user(saved_xer, &sr->mc_gregs[37])
-+	   || __get_user(saved_cr, &sr->mc_gregs[38])
-+	   || __get_user(env->spr[SPR_MQ], &sr->mc_gregs[39])
-+	   /* FIXME: || __get_user(trap, &sr->mc_gregs[40]) */
-+	   || __get_user(env->spr[SPR_DAR], &sr->mc_gregs[41])
-+	   || __get_user(env->spr[SPR_DSISR], &sr->mc_gregs[42])
-+	   /* FIXME: || __get_user(result, &sr->mc_gregs[43]) */)
-+		return 1;
-+	do_store_xer(env, saved_xer);
-+	do_store_cr(env, saved_cr, 0xFF);
-+
-+	if (!sig)
-+		env->gpr[2] = save_r2;
-+
-+	/* The kernel delays restoring the floating-point registers until the
-+	 * thread uses floating-point again.  For simplicity, just restore the
-+	 * registers now. */
-+	if(!memcpy(env->fpr, &sr->mc_fregs,
-+	                    32*sizeof(target_elf_fpreg_t))
-+	   || __get_user(saved_fpscr, &sr->mc_fregs[32]))
-+		return 1;
-+	do_store_fpscr(env, saved_fpscr, 0xFF);
-+
-+#if 0 /* FIXME: handle Altivec, SPE */
-+#ifdef CONFIG_ALTIVEC
-+	/* force the process to reload the altivec registers from
-+	   current->thread when it next does altivec instructions */
-+	regs->msr &= ~MSR_VEC;
-+	if (!__get_user(msr, &sr->mc_gregs[PT_MSR]) && (msr & MSR_VEC) != 0) {
-+		/* restore altivec registers from the stack */
-+		if (!memcpy(current->thread.vr, &sr->mc_vregs,
-+				     sizeof(sr->mc_vregs)))
-+			return 1;
-+	} else if (current->thread.used_vr)
-+		memset(&current->thread.vr, 0, ELF_NVRREG * sizeof(vector128));
-+
-+	/* Always get VRSAVE back */
-+	if (__get_user(current->thread.vrsave, (u32 __user *)&sr->mc_vregs[32]))
-+		return 1;
-+#endif /* CONFIG_ALTIVEC */
-+
-+#ifdef CONFIG_SPE
-+	/* force the process to reload the spe registers from
-+	   current->thread when it next does spe instructions */
-+	regs->msr &= ~MSR_SPE;
-+	if (!__get_user(msr, &sr->mc_gregs[PT_MSR]) && (msr & MSR_SPE) != 0) {
-+		/* restore spe registers from the stack */
-+		if (!memcpy(current->thread.evr, &sr->mc_vregs,
-+				     ELF_NEVRREG * sizeof(u32)))
-+			return 1;
-+	} else if (current->thread.used_spe)
-+		memset(&current->thread.evr, 0, ELF_NEVRREG * sizeof(u32));
-+
-+	/* Always get SPEFSCR back */
-+	if (__get_user(current->thread.spefscr, (u32 *)&sr->mc_vregs + ELF_NEVRREG))
-+		return 1;
-+#endif /* CONFIG_SPE */
-+#endif /* 0 */
-+
-+#if 0 /* FIXME: handle floating-point, Altivec, SPE */
-+#ifndef CONFIG_SMP
-+	preempt_disable();
-+	if (last_task_used_math == current)
-+		last_task_used_math = NULL;
-+	if (last_task_used_altivec == current)
-+		last_task_used_altivec = NULL;
-+	if (last_task_used_spe == current)
-+		last_task_used_spe = NULL;
-+	preempt_enable();
-+#endif
-+#endif /* 0 */
-+	return 0;
-+}
-+
-+static void setup_frame(int sig, struct emulated_sigaction *ka,
-+                        target_sigset_t *oldset, CPUState *env)
-+{
-+	struct target_sigcontext *sc;
-+	struct target_sigregs *frame;
-+	target_ulong origsp = env->gpr[1];
-+	target_ulong newsp = origsp;
-+
-+	/* Set up Signal Frame */
-+	newsp -= sizeof(struct target_sigregs);
-+	frame = (struct target_sigregs *) newsp;
-+
-+	/* Put a sigcontext on the stack */
-+	newsp -= sizeof(*sc);
-+	sc = (struct target_sigcontext *) newsp;
-+
-+	/* create a stack frame for the caller of the handler */
-+	newsp -= __SIGNAL_FRAMESIZE;
-+
-+	if (!access_ok(VERIFY_WRITE, (void *) newsp, origsp - newsp))
-+		goto badframe;
-+
-+#if TARGET_NSIG != 64
-+#error "Please adjust handle_signal()"
-+#endif
-+	if (__put_user((target_ulong) ka->sa._sa_handler, &sc->handler)
-+	    || __put_user(oldset->sig[0], &sc->oldmask)
-+	    || __put_user(oldset->sig[1], &sc->_unused[3])
-+	    || __put_user(frame, (target_ulong *)&sc->regs)
-+	    || __put_user(sig, &sc->signal))
-+		goto badframe;
-+
-+	if (save_user_regs(env, &frame->mctx, TARGET_NR_sigreturn))
-+		goto badframe;
-+
-+	if (put_user(env->gpr[1], (unsigned long *)newsp))
-+		goto badframe;
-+	env->gpr[1] = newsp;
-+	env->gpr[3] = sig;
-+	env->gpr[4] = (unsigned long) sc;
-+	env->nip = (unsigned long) ka->sa._sa_handler;
-+	env->lr = (unsigned long) frame->mctx.tramp;
-+	/* FIXME: env->trap = 0; */
-+
-+	return;
-+
-+badframe:
-+#ifdef DEBUG_SIGNAL
-+	fprintf(stderr,
-+		"badframe in handle_signal, frame=%p newsp=%lx\n",
-+		frame, newsp);
-+#endif
-+	force_sig(TARGET_SIGSEGV);
-+}
-+
-+static void setup_rt_frame(int sig, struct emulated_sigaction *ka, 
-+                           target_siginfo_t *info,
-+                           target_sigset_t *set, CPUState *env)
-+{
-+    fprintf(stderr, "setup_rt_frame: not implemented\n");
-+}
-+
-+long do_sigreturn(CPUState *env)
-+{
-+	struct target_sigcontext *sc;
-+	struct target_sigcontext sigctx;
-+	struct target_mcontext *sr;
-+	target_sigset_t set;
-+	sigset_t host_set;
-+
-+	/* Always make any pending restarted system calls return -EINTR */
-+#if 0 /* FIXME */
-+	current_thread_info()->restart_block.fn = do_no_restart_syscall;
-+#endif
-+
-+	sc = (struct target_sigcontext *)(env->gpr[1] + __SIGNAL_FRAMESIZE);
-+	if (!memcpy(&sigctx, sc, sizeof(sigctx)))
-+		goto badframe;
-+
-+	set.sig[0] = sigctx.oldmask;
-+	set.sig[1] = sigctx._unused[3];
-+	target_to_host_sigset_internal(&host_set, &set);
-+	sigprocmask(SIG_SETMASK, &host_set, NULL);
-+
-+	sr = (struct target_mcontext *) tswapl((target_ulong)sigctx.regs);
-+	if (!access_ok(VERIFY_READ, sr, sizeof(*sr))
-+	    || restore_user_regs(env, sr, 1))
-+		goto badframe;
-+
-+	return 0;
-+
-+badframe:
-+	force_sig(TARGET_SIGSEGV);
-+	return 0;
-+}
-+
-+long do_rt_sigreturn(CPUState *env)
-+{
-+    fprintf(stderr, "do_rt_sigreturn: not implemented\n");
-+    return -ENOSYS;
-+}
-+
- #else
- 
- static void setup_frame(int sig, struct emulated_sigaction *ka,
diff --git a/packages/qemu/files/22_net_tuntap_stall.patch b/packages/qemu/files/22_net_tuntap_stall.patch
deleted file mode 100644
index e9b31dfe40..0000000000
--- a/packages/qemu/files/22_net_tuntap_stall.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-#DPATCHLEVEL=0
----
-# vl.c |    2 +-
-# 1 file changed, 1 insertion(+), 1 deletion(-)
-#
-Index: vl.c
-===================================================================
---- vl.c.orig	2007-06-13 11:51:53.000000000 +0100
-+++ vl.c	2007-06-13 11:52:10.000000000 +0100
-@@ -3617,7 +3617,7 @@ static int tap_open(char *ifname, int if
-         return -1;
-     }
-     memset(&ifr, 0, sizeof(ifr));
--    ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
-+    ifr.ifr_flags = IFF_TAP | IFF_NO_PI | IFF_ONE_QUEUE;
-     if (ifname[0] != '\0')
-         pstrcpy(ifr.ifr_name, IFNAMSIZ, ifname);
-     else
diff --git a/packages/qemu/files/30_syscall_ipc.patch b/packages/qemu/files/30_syscall_ipc.patch
deleted file mode 100644
index 3dc58102ad..0000000000
--- a/packages/qemu/files/30_syscall_ipc.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-#DPATCHLEVEL=0
----
-# linux-user/syscall.c |    7 +++++--
-# 1 file changed, 5 insertions(+), 2 deletions(-)
-#
-Index: linux-user/syscall.c
-===================================================================
---- linux-user/syscall.c.orig	2007-04-18 13:25:40.000000000 +0100
-+++ linux-user/syscall.c	2007-04-18 13:37:27.000000000 +0100
-@@ -43,7 +43,10 @@
- #include <sys/poll.h>
- #include <sys/times.h>
- #include <sys/shm.h>
-+#include <sys/ipc.h>
- #include <sys/sem.h>
-+#include <sys/shm.h>
-+#include <sys/msg.h>
- #include <sys/statfs.h>
- #include <utime.h>
- #include <sys/sysinfo.h>
-@@ -1240,11 +1243,11 @@ static long do_ipc(long call, long first
-             ret = get_errno(shmctl(first, second, NULL));
-             break;
-         default:
--            goto unimplemented;
-+            ret = get_errno(shmctl(first, second, (struct shmid_ds *) ptr));
-+            break;
-         }
-         break;
-     default:
--    unimplemented:
- 	gemu_log("Unsupported ipc call: %ld (version %d)\n", call, version);
- 	ret = -ENOSYS;
- 	break;
diff --git a/packages/qemu/files/31_syscalls.patch b/packages/qemu/files/31_syscalls.patch
deleted file mode 100644
index 3878079f19..0000000000
--- a/packages/qemu/files/31_syscalls.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-#DPATCHLEVEL=0
----
-# Makefile.target      |    2 +-
-# linux-user/syscall.c |   11 ++++++++---
-# 2 files changed, 9 insertions(+), 4 deletions(-)
-#
-Index: linux-user/syscall.c
-===================================================================
---- linux-user/syscall.c.orig	2007-06-13 11:51:52.000000000 +0100
-+++ linux-user/syscall.c	2007-06-13 11:52:18.000000000 +0100
-@@ -180,6 +180,7 @@ extern int getresuid(uid_t *, uid_t *, u
- extern int setresgid(gid_t, gid_t, gid_t);
- extern int getresgid(gid_t *, gid_t *, gid_t *);
- extern int setgroups(int, gid_t *);
-+extern int uselib(const char*);
- 
- /*
-  * This list is the union of errno values overidden in asm-<arch>/errno.h
-@@ -3215,7 +3216,8 @@ long do_syscall(void *cpu_env, int num, 
-         break;
- #ifdef TARGET_NR_uselib
-     case TARGET_NR_uselib:
--        goto unimplemented;
-+        ret = get_errno(uselib(path((const char*)arg1)));
-+        break;
- #endif
- #ifdef TARGET_NR_swapon
-     case TARGET_NR_swapon:
-@@ -4405,7 +4407,9 @@ long do_syscall(void *cpu_env, int num, 
-         goto unimplemented;
- #ifdef TARGET_NR_mincore
-     case TARGET_NR_mincore:
--        goto unimplemented;
-+        page_unprotect_range((void*)arg3, ((size_t)arg2 + TARGET_PAGE_SIZE - 1) / TARGET_PAGE_SIZE);
-+        ret = get_errno(mincore((void*)arg1, (size_t)arg2, (unsigned char*)arg3));
-+        break;
- #endif
- #ifdef TARGET_NR_madvise
-     case TARGET_NR_madvise:
-@@ -4539,7 +4543,8 @@ long do_syscall(void *cpu_env, int num, 
-         break;
- #ifdef TARGET_NR_readahead
-     case TARGET_NR_readahead:
--        goto unimplemented;
-+        ret = get_errno(readahead((int)arg1, (off64_t)arg2, (size_t)arg3));
-+        break;
- #endif
- #ifdef TARGET_NR_setxattr
-     case TARGET_NR_setxattr:
diff --git a/packages/qemu/files/32_syscall_sysctl.patch b/packages/qemu/files/32_syscall_sysctl.patch
deleted file mode 100644
index d175cf96ba..0000000000
--- a/packages/qemu/files/32_syscall_sysctl.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-#DPATCHLEVEL=0
----
-# linux-user/syscall.c |   33 ++++++++++++++++++++++++++++++---
-# 1 file changed, 30 insertions(+), 3 deletions(-)
-#
-Index: linux-user/syscall.c
-===================================================================
---- linux-user/syscall.c.orig	2007-06-13 11:51:54.000000000 +0100
-+++ linux-user/syscall.c	2007-06-13 11:52:17.000000000 +0100
-@@ -52,6 +52,7 @@
- //#include <sys/user.h>
- #include <netinet/ip.h>
- #include <netinet/tcp.h>
-+#include <sys/sysctl.h>
- 
- #define termios host_termios
- #define winsize host_winsize
-@@ -3912,9 +3913,35 @@ long do_syscall(void *cpu_env, int num, 
-         break;
- #endif
-     case TARGET_NR__sysctl:
--        /* We don't implement this, but ENODIR is always a safe
--           return value. */
--        return -ENOTDIR;
-+        {
-+            struct __sysctl_args *args = (struct __sysctl_args *) arg1;
-+            int *name_target, *name, nlen, *oldlenp, oldlen, newlen, i;
-+            void *oldval, *newval;
-+
-+            name_target = (int *) tswapl((long) args->name);
-+            nlen = tswapl(args->nlen);
-+            oldval = (void *) tswapl((long) args->oldval);
-+            oldlenp = (int *) tswapl((long) args->oldlenp);
-+            oldlen = tswapl(*oldlenp);
-+            newval = (void *) tswapl((long) args->newval);
-+            newlen = tswapl(args->newlen);
-+
-+            name = alloca(nlen * sizeof (int));
-+            for (i = 0; i < nlen; i++)
-+                name[i] = tswapl(name_target[i]);
-+
-+            if (nlen == 2 && name[0] == CTL_KERN && name[1] == KERN_VERSION) {
-+                ret = get_errno(
-+                        sysctl(name, nlen, oldval, &oldlen, newval, newlen));
-+                if (!is_error(ret)) {
-+                    *oldlenp = tswapl(oldlen);
-+                }
-+            } else {
-+                gemu_log("qemu: Unsupported sysctl name\n");
-+                ret = -ENOSYS;
-+            }
-+        }
-+        break;
-     case TARGET_NR_sched_setparam:
-         {
-             struct sched_param *target_schp;
diff --git a/packages/qemu/files/33_syscall_ppc_clone.patch b/packages/qemu/files/33_syscall_ppc_clone.patch
deleted file mode 100644
index a71f8b1944..0000000000
--- a/packages/qemu/files/33_syscall_ppc_clone.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-#DPATCHLEVEL=0
----
-# linux-user/syscall.c |    6 +-----
-# 1 file changed, 1 insertion(+), 5 deletions(-)
-#
-Index: linux-user/syscall.c
-===================================================================
---- linux-user/syscall.c.orig	2007-06-13 11:51:54.000000000 +0100
-+++ linux-user/syscall.c	2007-06-13 11:52:17.000000000 +0100
-@@ -2177,11 +2177,7 @@ int do_fork(CPUState *env, unsigned int 
-         if (!newsp)
-             newsp = env->gpr[1];
-         new_env->gpr[1] = newsp;
--        { 
--            int i;
--            for (i = 7; i < 32; i++)
--                new_env->gpr[i] = 0;
--        }
-+        new_env->gpr[3] = 0;
- #elif defined(TARGET_SH4)
- 	if (!newsp)
- 	  newsp = env->gregs[15];
diff --git a/packages/qemu/files/39_syscall_fadvise64.patch b/packages/qemu/files/39_syscall_fadvise64.patch
deleted file mode 100644
index 0a7f4c48dd..0000000000
--- a/packages/qemu/files/39_syscall_fadvise64.patch
+++ /dev/null
@@ -1,21 +0,0 @@
----
- linux-user/syscall.c |    6 ++++++
- 1 file changed, 6 insertions(+)
-
-Index: linux-user/syscall.c
-===================================================================
---- linux-user/syscall.c.orig	2007-06-13 11:51:55.000000000 +0100
-+++ linux-user/syscall.c	2007-06-13 11:52:13.000000000 +0100
-@@ -4434,6 +4434,12 @@ long do_syscall(void *cpu_env, int num, 
-         ret = get_errno(mincore((void*)arg1, (size_t)arg2, (unsigned char*)arg3));
-         break;
- #endif
-+#ifdef TARGET_NR_fadvise64_64
-+     case TARGET_NR_fadvise64_64:
-+        /* Just return success */
-+        ret = get_errno(0);
-+        break;
-+#endif
- #ifdef TARGET_NR_madvise
-     case TARGET_NR_madvise:
-         /* A straight passthrough may not be safe because qemu sometimes
diff --git a/packages/qemu/files/41_arm_fpa_sigfpe.patch b/packages/qemu/files/41_arm_fpa_sigfpe.patch
deleted file mode 100644
index d579dbc66e..0000000000
--- a/packages/qemu/files/41_arm_fpa_sigfpe.patch
+++ /dev/null
@@ -1,105 +0,0 @@
-#DPATCHLEVEL=0
----
-# linux-user/main.c        |   53 +++++++++++++++++++++++++++++++++++++++++++++--
-# target-arm/nwfpe/fpa11.c |    7 ++++++
-# 2 files changed, 58 insertions(+), 2 deletions(-)
-#
-Index: linux-user/main.c
-===================================================================
---- linux-user/main.c.orig	2007-06-13 11:51:53.000000000 +0100
-+++ linux-user/main.c	2007-06-13 11:52:07.000000000 +0100
-@@ -339,18 +339,67 @@ void cpu_loop(CPUARMState *env)
-             {
-                 TaskState *ts = env->opaque;
-                 uint32_t opcode;
-+                int rc;
- 
-                 /* we handle the FPU emulation here, as Linux */
-                 /* we get the opcode */
-                 opcode = tget32(env->regs[15]);
-                 
--                if (EmulateAll(opcode, &ts->fpa, env) == 0) {
-+                rc = EmulateAll(opcode, &ts->fpa, env);
-+                if (rc == 0) { /* illegal instruction */
-                     info.si_signo = SIGILL;
-                     info.si_errno = 0;
-                     info.si_code = TARGET_ILL_ILLOPN;
-                     info._sifields._sigfault._addr = env->regs[15];
-                     queue_signal(info.si_signo, &info);
--                } else {
-+                } else if (rc < 0) { /* FP exception */
-+                    int arm_fpe=0;
-+
-+                    /* translate softfloat flags to FPSR flags */
-+                    if (-rc & float_flag_invalid)
-+                      arm_fpe |= BIT_IOC;
-+                    if (-rc & float_flag_divbyzero)
-+                      arm_fpe |= BIT_DZC;
-+                    if (-rc & float_flag_overflow)
-+                      arm_fpe |= BIT_OFC;
-+                    if (-rc & float_flag_underflow)
-+                      arm_fpe |= BIT_UFC;
-+                    if (-rc & float_flag_inexact)
-+                      arm_fpe |= BIT_IXC;
-+
-+                    FPSR fpsr = ts->fpa.fpsr;
-+                    //printf("fpsr 0x%x, arm_fpe 0x%x\n",fpsr,arm_fpe);
-+
-+                    if (fpsr & (arm_fpe << 16)) { /* exception enabled? */
-+                      info.si_signo = SIGFPE;
-+                      info.si_errno = 0;
-+
-+                      /* ordered by priority, least first */
-+                      if (arm_fpe & BIT_IXC) info.si_code = TARGET_FPE_FLTRES;
-+                      if (arm_fpe & BIT_UFC) info.si_code = TARGET_FPE_FLTUND;
-+                      if (arm_fpe & BIT_OFC) info.si_code = TARGET_FPE_FLTOVF;
-+                      if (arm_fpe & BIT_DZC) info.si_code = TARGET_FPE_FLTDIV;
-+                      if (arm_fpe & BIT_IOC) info.si_code = TARGET_FPE_FLTINV;
-+
-+                      info._sifields._sigfault._addr = env->regs[15];
-+                      queue_signal(info.si_signo, &info);
-+                    } else {
-+                      env->regs[15] += 4;
-+                    }
-+
-+                    /* accumulate unenabled exceptions */
-+                    if ((!(fpsr & BIT_IXE)) && (arm_fpe & BIT_IXC))
-+                      fpsr |= BIT_IXC;
-+                    if ((!(fpsr & BIT_UFE)) && (arm_fpe & BIT_UFC))
-+                      fpsr |= BIT_UFC;
-+                    if ((!(fpsr & BIT_OFE)) && (arm_fpe & BIT_OFC))
-+                      fpsr |= BIT_OFC;
-+                    if ((!(fpsr & BIT_DZE)) && (arm_fpe & BIT_DZC))
-+                      fpsr |= BIT_DZC;
-+                    if ((!(fpsr & BIT_IOE)) && (arm_fpe & BIT_IOC))
-+                      fpsr |= BIT_IOC;
-+                    ts->fpa.fpsr=fpsr;
-+                } else { /* everything OK */
-                     /* increment PC */
-                     env->regs[15] += 4;
-                 }
-Index: target-arm/nwfpe/fpa11.c
-===================================================================
---- target-arm/nwfpe/fpa11.c.orig	2007-06-13 11:51:52.000000000 +0100
-+++ target-arm/nwfpe/fpa11.c	2007-06-13 11:51:55.000000000 +0100
-@@ -162,6 +162,8 @@ unsigned int EmulateAll(unsigned int opc
-     fpa11->initflag = 1;
-   }
- 
-+  set_float_exception_flags(0, &fpa11->fp_status);  
-+
-   if (TEST_OPCODE(opcode,MASK_CPRT))
-   {
-     //fprintf(stderr,"emulating CPRT\n");
-@@ -191,6 +193,11 @@ unsigned int EmulateAll(unsigned int opc
-   }
- 
- //  restore_flags(flags);
-+  if(nRc == 1 && get_float_exception_flags(&fpa11->fp_status))
-+  {
-+    //printf("fef 0x%x\n",float_exception_flags);
-+    nRc=-get_float_exception_flags(&fpa11->fp_status);
-+  }
- 
-   //printf("returning %d\n",nRc);
-   return(nRc);
diff --git a/packages/qemu/files/52_ne2000_return.patch b/packages/qemu/files/52_ne2000_return.patch
deleted file mode 100644
index f0316c8042..0000000000
--- a/packages/qemu/files/52_ne2000_return.patch
+++ /dev/null
@@ -1,17 +0,0 @@
----
- hw/ne2000.c |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-Index: qemu/hw/ne2000.c
-===================================================================
---- qemu.orig/hw/ne2000.c	2007-06-13 11:51:52.000000000 +0100
-+++ qemu/hw/ne2000.c	2007-06-13 11:51:55.000000000 +0100
-@@ -214,7 +214,7 @@ static int ne2000_can_receive(void *opaq
-     NE2000State *s = opaque;
-     
-     if (s->cmd & E8390_STOP)
--        return 1;
-+        return 0;
-     return !ne2000_buffer_full(s);
- }
- 
diff --git a/packages/qemu/files/61_safe_64bit_int.patch b/packages/qemu/files/61_safe_64bit_int.patch
deleted file mode 100644
index 553e57623e..0000000000
--- a/packages/qemu/files/61_safe_64bit_int.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-#DPATCHLEVEL=0
----
-# dyngen-exec.h |    4 ++--
-# 1 file changed, 2 insertions(+), 2 deletions(-)
-#
-Index: dyngen-exec.h
-===================================================================
---- dyngen-exec.h.orig	2007-06-13 11:48:22.000000000 +0100
-+++ dyngen-exec.h	2007-06-13 11:51:55.000000000 +0100
-@@ -38,7 +38,7 @@ typedef unsigned int uint32_t;
- // Linux/Sparc64 defines uint64_t
- #if !(defined (__sparc_v9__) && defined(__linux__))
- /* XXX may be done for all 64 bits targets ? */
--#if defined (__x86_64__) || defined(__ia64)
-+#if defined (__x86_64__) || defined(__ia64) || defined(__alpha__) || defined(__sparc__)
- typedef unsigned long uint64_t;
- #else
- typedef unsigned long long uint64_t;
-@@ -55,7 +55,7 @@ typedef signed short int16_t;
- typedef signed int int32_t;
- // Linux/Sparc64 defines int64_t
- #if !(defined (__sparc_v9__) && defined(__linux__))
--#if defined (__x86_64__) || defined(__ia64)
-+#if defined (__x86_64__) || defined(__ia64) || defined(__alpha__) || defined(__sparc__)
- typedef signed long int64_t;
- #else
- typedef signed long long int64_t;
diff --git a/packages/qemu/files/63_sparc_build.patch b/packages/qemu/files/63_sparc_build.patch
deleted file mode 100644
index 32a6bc0ee0..0000000000
--- a/packages/qemu/files/63_sparc_build.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-#DPATCHLEVEL=0
----
-# sparc.ld |    2 +-
-# 1 file changed, 1 insertion(+), 1 deletion(-)
-#
-Index: sparc.ld
-===================================================================
---- sparc.ld.orig	2007-06-13 11:48:22.000000000 +0100
-+++ sparc.ld	2007-06-13 11:51:56.000000000 +0100
-@@ -6,7 +6,7 @@ ENTRY(_start)
- SECTIONS
- {
-   /* Read-only sections, merged into text segment: */
--  . = 0x60000000 + SIZEOF_HEADERS;
-+  . = 0x60000000 + 0x400;
-   .interp     : { *(.interp) 	}
-   .hash          : { *(.hash)		}
-   .dynsym        : { *(.dynsym)		}
diff --git a/packages/qemu/files/64_ppc_asm_constraints.patch b/packages/qemu/files/64_ppc_asm_constraints.patch
deleted file mode 100644
index e4858b79d7..0000000000
--- a/packages/qemu/files/64_ppc_asm_constraints.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-#DPATCHLEVEL=1
----
-# cpu-all.h |    2 +-
-# 1 file changed, 1 insertion(+), 1 deletion(-)
-#
-Index: qemu/cpu-all.h
-===================================================================
---- qemu.orig/cpu-all.h	2007-06-13 11:48:22.000000000 +0100
-+++ qemu/cpu-all.h	2007-06-13 11:51:56.000000000 +0100
-@@ -250,7 +250,7 @@ static inline void stw_le_p(void *ptr, i
- static inline void stl_le_p(void *ptr, int v)
- {
- #ifdef __powerpc__
--    __asm__ __volatile__ ("stwbrx %1,0,%2" : "=m" (*(uint32_t *)ptr) : "r" (v), "r" (ptr));
-+    __asm__ __volatile__ ("stwbrx %0,0,%1" : : "r" (v), "r" (ptr) : "memory");
- #else
-     uint8_t *p = ptr;
-     p[0] = v;
diff --git a/packages/qemu/files/65_kfreebsd.patch b/packages/qemu/files/65_kfreebsd.patch
deleted file mode 100644
index ea060811a1..0000000000
--- a/packages/qemu/files/65_kfreebsd.patch
+++ /dev/null
@@ -1,44 +0,0 @@
----
- configure |    6 ++++++
- vl.c      |    4 +++-
- 2 files changed, 9 insertions(+), 1 deletion(-)
-
-Index: configure
-===================================================================
---- configure.orig	2007-06-13 11:48:22.000000000 +0100
-+++ configure	2007-06-13 11:52:07.000000000 +0100
-@@ -112,6 +112,12 @@ OS_CFLAGS="-mno-cygwin"
- MINGW32*)
- mingw32="yes"
- ;;
-+GNU/kFreeBSD)
-+oss="yes"
-+if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
-+    kqemu="yes"
-+fi
-+;;
- FreeBSD)
- bsd="yes"
- oss="yes"
-Index: vl.c
-===================================================================
---- vl.c.orig	2007-06-13 11:51:54.000000000 +0100
-+++ vl.c	2007-06-13 11:51:56.000000000 +0100
-@@ -47,6 +47,8 @@
- #ifndef __APPLE__
- #include <libutil.h>
- #endif
-+#elif defined (__GLIBC__) && defined (__FreeBSD_kernel__)
-+#include <freebsd/stdlib.h>
- #else
- #ifndef __sun__
- #include <linux/if.h>
-@@ -3454,7 +3456,7 @@ static TAPState *net_tap_fd_init(VLANSta
-     return s;
- }
- 
--#ifdef _BSD
-+#if defined (_BSD) || defined (__FreeBSD_kernel__)
- static int tap_open(char *ifname, int ifname_size)
- {
-     int fd;
diff --git a/packages/qemu/files/66_tls_ld.patch b/packages/qemu/files/66_tls_ld.patch
deleted file mode 100644
index 54e02eff8b..0000000000
--- a/packages/qemu/files/66_tls_ld.patch
+++ /dev/null
@@ -1,55 +0,0 @@
----
- arm.ld  |    7 +++++++
- i386.ld |    7 +++++++
- 2 files changed, 14 insertions(+)
-
-Index: arm.ld
-===================================================================
---- arm.ld.orig	2007-06-13 11:48:22.000000000 +0100
-+++ arm.ld	2007-06-13 11:51:56.000000000 +0100
-@@ -26,6 +26,10 @@ SECTIONS
-     { *(.rel.rodata) *(.rel.gnu.linkonce.r*) }
-   .rela.rodata   :
-     { *(.rela.rodata) *(.rela.gnu.linkonce.r*) }
-+  .rel.tdata     : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
-+  .rela.tdata    : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
-+  .rel.tbss      : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
-+  .rela.tbss     : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
-   .rel.got       : { *(.rel.got)		}
-   .rela.got      : { *(.rela.got)		}
-   .rel.ctors     : { *(.rel.ctors)	}
-@@ -58,6 +62,9 @@ SECTIONS
-   .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
-    __exidx_end = .;
-   .reginfo : { *(.reginfo) }
-+  /* Thread Local Storage sections  */
-+  .tdata	  : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
-+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
-   /* Adjust the address for the data segment.  We want to adjust up to
-      the same address within the page on the next page up.  */
-   . = ALIGN(0x100000) + (. & (0x100000 - 1));
-Index: i386.ld
-===================================================================
---- i386.ld.orig	2007-06-13 11:48:22.000000000 +0100
-+++ i386.ld	2007-06-13 11:51:56.000000000 +0100
-@@ -28,6 +28,10 @@ SECTIONS
-     { *(.rel.rodata) *(.rel.gnu.linkonce.r*) }
-   .rela.rodata   :
-     { *(.rela.rodata) *(.rela.gnu.linkonce.r*) }
-+  .rel.tdata     : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
-+  .rela.tdata    : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
-+  .rel.tbss      : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
-+  .rela.tbss     : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
-   .rel.got       : { *(.rel.got)		}
-   .rela.got      : { *(.rela.got)		}
-   .rel.ctors     : { *(.rel.ctors)	}
-@@ -53,6 +57,9 @@ SECTIONS
-   _etext = .;
-   PROVIDE (etext = .);
-   .fini      : { *(.fini)    } =0x47ff041f
-+  /* Thread Local Storage sections  */
-+  .tdata	  : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
-+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
-   . = ALIGN(32 / 8);
-   PROVIDE (__preinit_array_start = .);
-   .preinit_array     : { *(.preinit_array) }
diff --git a/packages/qemu/files/91-oh-sdl-cursor.patch b/packages/qemu/files/91-oh-sdl-cursor.patch
deleted file mode 100644
index 5280a5bd4a..0000000000
--- a/packages/qemu/files/91-oh-sdl-cursor.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-=== modified file 'sdl.c'
----
- sdl.c |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-Index: sdl.c
-===================================================================
---- sdl.c.orig	2007-06-13 11:48:22.000000000 +0100
-+++ sdl.c	2007-06-13 11:51:56.000000000 +0100
-@@ -241,7 +241,7 @@ static void sdl_hide_cursor(void)
- 
-     if (kbd_mouse_is_absolute()) {
-         SDL_ShowCursor(1);
--        SDL_SetCursor(sdl_cursor_hidden);
-+        /* SDL_SetCursor(sdl_cursor_hidden); */
-     } else {
-         SDL_ShowCursor(0);
-     }
diff --git a/packages/qemu/files/93-oh-pl110-rgb.patch b/packages/qemu/files/93-oh-pl110-rgb.patch
deleted file mode 100644
index 4911ac131f..0000000000
--- a/packages/qemu/files/93-oh-pl110-rgb.patch
+++ /dev/null
@@ -1,223 +0,0 @@
-=== modified file 'hw/pl110.c'
----
- hw/pl110.c          |   13 ++++--
- hw/pl110_template.h |  107 ++++++++++++++++++++++++++++++++++++----------------
- 2 files changed, 86 insertions(+), 34 deletions(-)
-
-Index: hw/pl110.c
-===================================================================
---- hw/pl110.c.orig	2007-06-13 11:48:22.000000000 +0100
-+++ hw/pl110.c	2007-06-13 11:51:57.000000000 +0100
-@@ -10,6 +10,7 @@
- #include "vl.h"
- 
- #define PL110_CR_EN   0x001
-+#define PL110_CR_BGR  0x100
- #define PL110_CR_BEBO 0x200
- #define PL110_CR_BEPO 0x400
- #define PL110_CR_PWR  0x800
-@@ -114,6 +115,7 @@ static void pl110_update_display(void *o
-     int first, last = 0;
-     int dirty, new_dirty;
-     int i;
-+    int bpp_offset;
- 
-     if (!pl110_enabled(s))
-         return;
-@@ -145,12 +147,17 @@ static void pl110_update_display(void *o
-         fprintf(stderr, "pl110: Bad color depth\n");
-         exit(1);
-     }
-+    if (s->cr & PL110_CR_BGR)
-+	bpp_offset = 0;
-+    else
-+	bpp_offset = 18;
-+
-     if (s->cr & PL110_CR_BEBO)
--      fn = fntable[s->bpp + 6];
-+      fn = fntable[s->bpp + 6 + bpp_offset];
-     else if (s->cr & PL110_CR_BEPO)
--      fn = fntable[s->bpp + 12];
-+      fn = fntable[s->bpp + 12 + bpp_offset];
-     else
--      fn = fntable[s->bpp];
-+      fn = fntable[s->bpp + bpp_offset];
-     
-     src_width = s->cols;
-     switch (s->bpp) {
-Index: hw/pl110_template.h
-===================================================================
---- hw/pl110_template.h.orig	2007-06-13 11:48:22.000000000 +0100
-+++ hw/pl110_template.h	2007-06-13 11:51:57.000000000 +0100
-@@ -24,6 +24,16 @@
- #error unknown bit depth
- #endif
- 
-+#undef RGB
-+#define BORDER bgr
-+#define ORDER 0
-+#include "pl110_template.h"
-+#define ORDER 1
-+#include "pl110_template.h"
-+#define ORDER 2
-+#include "pl110_template.h"
-+#define RGB
-+#define BORDER rgb
- #define ORDER 0
- #include "pl110_template.h"
- #define ORDER 1
-@@ -33,26 +43,47 @@
- 
- static drawfn glue(pl110_draw_fn_,BITS)[18] =
- {
--    glue(pl110_draw_line1_lblp,BITS),
--    glue(pl110_draw_line2_lblp,BITS),
--    glue(pl110_draw_line4_lblp,BITS),
--    glue(pl110_draw_line8_lblp,BITS),
--    glue(pl110_draw_line16_lblp,BITS),
--    glue(pl110_draw_line32_lblp,BITS),
-+    glue(pl110_draw_line1_lblp_bgr,BITS),
-+    glue(pl110_draw_line2_lblp_bgr,BITS),
-+    glue(pl110_draw_line4_lblp_bgr,BITS),
-+    glue(pl110_draw_line8_lblp_bgr,BITS),
-+    glue(pl110_draw_line16_lblp_bgr,BITS),
-+    glue(pl110_draw_line32_lblp_bgr,BITS),
- 
--    glue(pl110_draw_line1_bbbp,BITS),
--    glue(pl110_draw_line2_bbbp,BITS),
--    glue(pl110_draw_line4_bbbp,BITS),
--    glue(pl110_draw_line8_bbbp,BITS),
--    glue(pl110_draw_line16_bbbp,BITS),
--    glue(pl110_draw_line32_bbbp,BITS),
-+    glue(pl110_draw_line1_bbbp_bgr,BITS),
-+    glue(pl110_draw_line2_bbbp_bgr,BITS),
-+    glue(pl110_draw_line4_bbbp_bgr,BITS),
-+    glue(pl110_draw_line8_bbbp_bgr,BITS),
-+    glue(pl110_draw_line16_bbbp_bgr,BITS),
-+    glue(pl110_draw_line32_bbbp_bgr,BITS),
- 
--    glue(pl110_draw_line1_lbbp,BITS),
--    glue(pl110_draw_line2_lbbp,BITS),
--    glue(pl110_draw_line4_lbbp,BITS),
--    glue(pl110_draw_line8_lbbp,BITS),
--    glue(pl110_draw_line16_lbbp,BITS),
--    glue(pl110_draw_line32_lbbp,BITS)
-+    glue(pl110_draw_line1_lbbp_bgr,BITS),
-+    glue(pl110_draw_line2_lbbp_bgr,BITS),
-+    glue(pl110_draw_line4_lbbp_bgr,BITS),
-+    glue(pl110_draw_line8_lbbp_bgr,BITS),
-+    glue(pl110_draw_line16_lbbp_bgr,BITS),
-+    glue(pl110_draw_line32_lbbp_bgr,BITS),
-+
-+    glue(pl110_draw_line1_lblp_rgb,BITS),
-+    glue(pl110_draw_line2_lblp_rgb,BITS),
-+    glue(pl110_draw_line4_lblp_rgb,BITS),
-+    glue(pl110_draw_line8_lblp_rgb,BITS),
-+    glue(pl110_draw_line16_lblp_rgb,BITS),
-+    glue(pl110_draw_line32_lblp_rgb,BITS),
-+
-+    glue(pl110_draw_line1_bbbp_rgb,BITS),
-+    glue(pl110_draw_line2_bbbp_rgb,BITS),
-+    glue(pl110_draw_line4_bbbp_rgb,BITS),
-+    glue(pl110_draw_line8_bbbp_rgb,BITS),
-+    glue(pl110_draw_line16_bbbp_rgb,BITS),
-+    glue(pl110_draw_line32_bbbp_rgb,BITS),
-+
-+    glue(pl110_draw_line1_lbbp_rgb,BITS),
-+    glue(pl110_draw_line2_lbbp_rgb,BITS),
-+    glue(pl110_draw_line4_lbbp_rgb,BITS),
-+    glue(pl110_draw_line8_lbbp_rgb,BITS),
-+    glue(pl110_draw_line16_lbbp_rgb,BITS),
-+    glue(pl110_draw_line32_lbbp_rgb,BITS),
- };
- 
- #undef BITS
-@@ -61,18 +92,18 @@ static drawfn glue(pl110_draw_fn_,BITS)[
- #else
- 
- #if ORDER == 0
--#define NAME glue(lblp, BITS)
-+#define NAME glue(glue(lblp_, BORDER), BITS)
- #ifdef WORDS_BIGENDIAN
- #define SWAP_WORDS 1
- #endif
- #elif ORDER == 1
--#define NAME glue(bbbp, BITS)
-+#define NAME glue(glue(bbbp_, BORDER), BITS)
- #ifndef WORDS_BIGENDIAN
- #define SWAP_WORDS 1
- #endif
- #else
- #define SWAP_PIXELS 1
--#define NAME glue(lbbp, BITS)
-+#define NAME glue(glue(lbbp_, BORDER), BITS)
- #ifdef WORDS_BIGENDIAN
- #define SWAP_WORDS 1
- #endif
-@@ -195,27 +226,34 @@ static void glue(pl110_draw_line16_,NAME
- #ifdef SWAP_WORDS
-         data = bswap32(data);
- #endif
-+#ifdef RGB
-+#define LSB r
-+#define MSB b
-+#else
-+#define LSB b
-+#define MSB r
-+#endif
- #if 0
--        r = data & 0x1f;
-+        LSB = data & 0x1f;
-         data >>= 5;
-         g = data & 0x3f;
-         data >>= 6;
--        b = data & 0x1f;
-+        MSB = data & 0x1f;
-         data >>= 5;
- #else
--        r = (data & 0x1f) << 3;
-+        LSB = (data & 0x1f) << 3;
-         data >>= 5;
-         g = (data & 0x3f) << 2;
-         data >>= 6;
--        b = (data & 0x1f) << 3;
-+        MSB = (data & 0x1f) << 3;
-         data >>= 5;
- #endif
-         COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b));
--        r = (data & 0x1f) << 3;
-+        LSB = (data & 0x1f) << 3;
-         data >>= 5;
-         g = (data & 0x3f) << 2;
-         data >>= 6;
--        b = (data & 0x1f) << 3;
-+        MSB = (data & 0x1f) << 3;
-         data >>= 5;
-         COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b));
-         width -= 2;
-@@ -229,14 +267,21 @@ static void glue(pl110_draw_line32_,NAME
-     unsigned int r, g, b;
-     while (width > 0) {
-         data = *(uint32_t *)src;
-+#ifdef RGB
-+#define LSB r
-+#define MSB b
-+#else
-+#define LSB b
-+#define MSB r
-+#endif
- #ifdef SWAP_WORDS
--        r = data & 0xff;
-+        LSB = data & 0xff;
-         g = (data >> 8) & 0xff;
--        b = (data >> 16) & 0xff;
-+        MSB = (data >> 16) & 0xff;
- #else
--        r = (data >> 24) & 0xff;
-+        LSB = (data >> 24) & 0xff;
-         g = (data >> 16) & 0xff;
--        b = (data >> 8) & 0xff;
-+        MSB = (data >> 8) & 0xff;
- #endif
-         COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b));
-         width--;
diff --git a/packages/qemu/files/arm_nptl.patch b/packages/qemu/files/arm_nptl.patch
deleted file mode 100644
index f9b10aebc5..0000000000
--- a/packages/qemu/files/arm_nptl.patch
+++ /dev/null
@@ -1,857 +0,0 @@
-Index: qemu/configure
-===================================================================
---- qemu.orig/configure	2006-08-26 16:31:53.000000000 +0100
-+++ qemu/configure	2006-08-26 16:31:53.000000000 +0100
-@@ -97,6 +97,7 @@
- build_docs="no"
- build_acpi_tables="no"
- uname_release=""
-+nptl="yes"
- 
- # OS specific
- targetos=`uname -s`
-@@ -243,6 +244,8 @@
-   ;;
-   --enable-iasl) build_acpi_tables="yes"
-   ;;
-+  --disable-nptl) nptl="no"
-+  ;;
-   esac
- done
- 
-@@ -441,6 +444,23 @@
-     fi
- fi
- 
-+# check NPTL support
-+cat > $TMPC <<EOF
-+#include <sched.h>
-+void foo()
-+{
-+#ifndef CLONE_SETTLS
-+#error bork
-+#endif
-+}
-+EOF
-+
-+if $cc -c -o $TMPO $TMPC 2> /dev/null ; then
-+  :
-+else
-+   nptl="no"
-+fi
-+
- ##########################################
- # SDL probe
- 
-@@ -559,6 +579,7 @@
- fi
- echo "FMOD support      $fmod $fmod_support"
- echo "kqemu support     $kqemu"
-+echo "NPTL support      $nptl"
- echo "Documentation     $build_docs"
- [ ! -z "$uname_release" ] && \
- echo "uname -r          $uname_release"
-@@ -880,6 +901,14 @@
-             echo "SDL_CFLAGS=`$sdl_config --cflags`" >> $config_mak
-         fi
-     fi
-+else
-+    if test "$nptl" = "yes" ; then
-+        case "$target_cpu" in
-+          arm | armeb)
-+            echo "#define USE_NPTL 1" >> $config_h
-+          ;;
-+        esac
-+    fi
- fi
- 
- if test "$cocoa" = "yes" ; then
-Index: qemu/exec-all.h
-===================================================================
---- qemu.orig/exec-all.h	2006-08-26 16:28:32.000000000 +0100
-+++ qemu/exec-all.h	2006-08-26 16:31:53.000000000 +0100
-@@ -347,163 +347,7 @@
- extern CPUReadMemoryFunc *io_mem_read[IO_MEM_NB_ENTRIES][4];
- extern void *io_mem_opaque[IO_MEM_NB_ENTRIES];
- 
--#ifdef __powerpc__
--static inline int testandset (int *p)
--{
--    int ret;
--    __asm__ __volatile__ (
--                          "0:    lwarx %0,0,%1\n"
--                          "      xor. %0,%3,%0\n"
--                          "      bne 1f\n"
--                          "      stwcx. %2,0,%1\n"
--                          "      bne- 0b\n"
--                          "1:    "
--                          : "=&r" (ret)
--                          : "r" (p), "r" (1), "r" (0)
--                          : "cr0", "memory");
--    return ret;
--}
--#endif
--
--#ifdef __i386__
--static inline int testandset (int *p)
--{
--    long int readval = 0;
--    
--    __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
--                          : "+m" (*p), "+a" (readval)
--                          : "r" (1)
--                          : "cc");
--    return readval;
--}
--#endif
--
--#ifdef __x86_64__
--static inline int testandset (int *p)
--{
--    long int readval = 0;
--    
--    __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
--                          : "+m" (*p), "+a" (readval)
--                          : "r" (1)
--                          : "cc");
--    return readval;
--}
--#endif
--
--#ifdef __s390__
--static inline int testandset (int *p)
--{
--    int ret;
--
--    __asm__ __volatile__ ("0: cs    %0,%1,0(%2)\n"
--			  "   jl    0b"
--			  : "=&d" (ret)
--			  : "r" (1), "a" (p), "0" (*p) 
--			  : "cc", "memory" );
--    return ret;
--}
--#endif
--
--#ifdef __alpha__
--static inline int testandset (int *p)
--{
--    int ret;
--    unsigned long one;
--
--    __asm__ __volatile__ ("0:	mov 1,%2\n"
--			  "	ldl_l %0,%1\n"
--			  "	stl_c %2,%1\n"
--			  "	beq %2,1f\n"
--			  ".subsection 2\n"
--			  "1:	br 0b\n"
--			  ".previous"
--			  : "=r" (ret), "=m" (*p), "=r" (one)
--			  : "m" (*p));
--    return ret;
--}
--#endif
--
--#ifdef __sparc__
--static inline int testandset (int *p)
--{
--	int ret;
--
--	__asm__ __volatile__("ldstub	[%1], %0"
--			     : "=r" (ret)
--			     : "r" (p)
--			     : "memory");
--
--	return (ret ? 1 : 0);
--}
--#endif
--
--#ifdef __arm__
--static inline int testandset (int *spinlock)
--{
--    register unsigned int ret;
--    __asm__ __volatile__("swp %0, %1, [%2]"
--                         : "=r"(ret)
--                         : "0"(1), "r"(spinlock));
--    
--    return ret;
--}
--#endif
--
--#ifdef __mc68000
--static inline int testandset (int *p)
--{
--    char ret;
--    __asm__ __volatile__("tas %1; sne %0"
--                         : "=r" (ret)
--                         : "m" (p)
--                         : "cc","memory");
--    return ret;
--}
--#endif
--
--#ifdef __ia64
--#include <ia64intrin.h>
--
--static inline int testandset (int *p)
--{
--    return __sync_lock_test_and_set (p, 1);
--}
--#endif
--
--typedef int spinlock_t;
--
--#define SPIN_LOCK_UNLOCKED 0
--
--#if defined(CONFIG_USER_ONLY)
--static inline void spin_lock(spinlock_t *lock)
--{
--    while (testandset(lock));
--}
--
--static inline void spin_unlock(spinlock_t *lock)
--{
--    *lock = 0;
--}
--
--static inline int spin_trylock(spinlock_t *lock)
--{
--    return !testandset(lock);
--}
--#else
--static inline void spin_lock(spinlock_t *lock)
--{
--}
--
--static inline void spin_unlock(spinlock_t *lock)
--{
--}
--
--static inline int spin_trylock(spinlock_t *lock)
--{
--    return 1;
--}
--#endif
-+#include "qemu_spinlock.h"
- 
- extern spinlock_t tb_lock;
- 
-Index: qemu/linux-user/arm/syscall.h
-===================================================================
---- qemu.orig/linux-user/arm/syscall.h	2006-03-09 19:18:11.000000000 +0000
-+++ qemu/linux-user/arm/syscall.h	2006-08-26 16:31:53.000000000 +0100
-@@ -28,7 +28,9 @@
- #define ARM_SYSCALL_BASE	0x900000
- #define ARM_THUMB_SYSCALL	0
- 
--#define ARM_NR_cacheflush (ARM_SYSCALL_BASE + 0xf0000 + 2)
-+#define ARM_NR_BASE	  0xf0000
-+#define ARM_NR_cacheflush (ARM_NR_BASE + 2)
-+#define ARM_NR_set_tls	  (ARM_NR_BASE + 5)
- 
- #define ARM_NR_semihosting	  0x123456
- #define ARM_NR_thumb_semihosting  0xAB
-Index: qemu/linux-user/main.c
-===================================================================
---- qemu.orig/linux-user/main.c	2006-08-26 16:28:40.000000000 +0100
-+++ qemu/linux-user/main.c	2006-08-26 16:31:53.000000000 +0100
-@@ -309,6 +309,50 @@
-     }
- }
- 
-+/* Handle a jump to the kernel code page.  */
-+static int
-+do_kernel_trap(CPUARMState *env)
-+{
-+    uint32_t addr;
-+    uint32_t *ptr;
-+    uint32_t cpsr;
-+
-+    switch (env->regs[15]) {
-+    case 0xffff0fc0: /* __kernel_cmpxchg */
-+        /* XXX: This only works between threads, not between processes.
-+           Use native atomic operations.  */
-+        /* ??? This probably breaks horribly if the access segfaults.  */
-+        cpu_lock();
-+        ptr = (uint32_t *)env->regs[2];
-+        cpsr = cpsr_read(env);
-+        if (*ptr == env->regs[0]) {
-+            *ptr = env->regs[1];
-+            env->regs[0] = 0;
-+            cpsr |= CPSR_C;
-+        } else {
-+            env->regs[0] = -1;
-+            cpsr &= ~CPSR_C;
-+        }
-+        cpsr_write(env, cpsr, CPSR_C);
-+        cpu_unlock();
-+        break;
-+    case 0xffff0fe0: /* __kernel_get_tls */
-+        env->regs[0] = env->cp15.c13_tls;
-+        break;
-+    default:
-+        return 1;
-+    }
-+    /* Jump back to the caller.  */
-+    addr = env->regs[14];
-+    if (addr & 1) {
-+        env->thumb = 1;
-+        addr &= ~1;
-+    }
-+    env->regs[15] = addr;
-+
-+    return 0;
-+}
-+
- void cpu_loop(CPUARMState *env)
- {
-     int trapnr;
-@@ -365,10 +409,8 @@
-                     }
-                 }
- 
--                if (n == ARM_NR_cacheflush) {
--                    arm_cache_flush(env->regs[0], env->regs[1]);
--                } else if (n == ARM_NR_semihosting
--                           || n == ARM_NR_thumb_semihosting) {
-+                if (n == ARM_NR_semihosting
-+                    || n == ARM_NR_thumb_semihosting) {
-                     env->regs[0] = do_arm_semihosting (env);
-                 } else if (n == 0 || n >= ARM_SYSCALL_BASE
-                            || (env->thumb && n == ARM_THUMB_SYSCALL)) {
-@@ -379,14 +421,34 @@
-                         n -= ARM_SYSCALL_BASE;
-                         env->eabi = 0;
-                     }
--                    env->regs[0] = do_syscall(env, 
--                                              n, 
--                                              env->regs[0],
--                                              env->regs[1],
--                                              env->regs[2],
--                                              env->regs[3],
--                                              env->regs[4],
--                                              env->regs[5]);
-+                    if ( n > ARM_NR_BASE) {
-+                        switch (n)
-+                          {
-+                          case ARM_NR_cacheflush:
-+                              arm_cache_flush(env->regs[0], env->regs[1]);
-+                              break;
-+#ifdef USE_NPTL
-+                          case ARM_NR_set_tls:
-+                              cpu_set_tls(env, env->regs[0]);
-+                              env->regs[0] = 0;
-+                              break;
-+#endif
-+                          default:
-+                              printf ("Error: Bad syscall: %x\n", n);
-+                              goto error;
-+                          }
-+                      }
-+                    else
-+                      {
-+                        env->regs[0] = do_syscall(env, 
-+                                                  n, 
-+                                                  env->regs[0],
-+                                                  env->regs[1],
-+                                                  env->regs[2],
-+                                                  env->regs[3],
-+                                                  env->regs[4],
-+                                                  env->regs[5]);
-+                      }
-                 } else {
-                     goto error;
-                 }
-@@ -425,6 +487,10 @@
-                   }
-             }
-             break;
-+        case EXCP_KERNEL_TRAP:
-+            if (do_kernel_trap(env))
-+              goto error;
-+            break;
-         default:
-         error:
-             fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n", 
-@@ -1639,6 +1705,10 @@
-         ts->heap_base = info->brk;
-         /* This will be filled in on the first SYS_HEAPINFO call.  */
-         ts->heap_limit = 0;
-+        /* Register the magic kernel code page.  The cpu will generate a
-+           special exception when it tries to execute code here.  We can't
-+           put real code here because it may be in use by the host kernel.  */
-+        page_set_flags(0xffff0000, 0xffff0fff, 0);
-     }
- #elif defined(TARGET_SPARC)
-     {
-Index: qemu/linux-user/qemu.h
-===================================================================
---- qemu.orig/linux-user/qemu.h	2006-08-26 16:28:40.000000000 +0100
-+++ qemu/linux-user/qemu.h	2006-08-26 16:33:50.000000000 +0100
-@@ -75,6 +75,9 @@
-     uint32_t v86mask;
- #endif
-     int used; /* non zero if used */
-+#ifdef USE_NPTL
-+    uint32_t *child_tidptr;
-+#endif
-     struct image_info *info;
-     uint8_t stack[0];
- } __attribute__((aligned(16))) TaskState;
-Index: qemu/linux-user/syscall.c
-===================================================================
---- qemu.orig/linux-user/syscall.c	2006-08-26 16:28:40.000000000 +0100
-+++ qemu/linux-user/syscall.c	2006-08-26 16:31:53.000000000 +0100
-@@ -66,9 +66,18 @@
- #include <linux/kd.h>
- 
- #include "qemu.h"
-+#include "qemu_spinlock.h"
- 
- //#define DEBUG
- 
-+#ifdef USE_NPTL
-+#define CLONE_NPTL_FLAGS2 (CLONE_SETTLS | \
-+    CLONE_PARENT_SETTID | CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID)
-+#else
-+/* XXX: Hardcode the above values.  */
-+#define CLONE_NPTL_FLAGS2 0
-+#endif
-+
- #if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SPARC)
- /* 16 bit uid wrappers emulation */
- #define USE_UID16
-@@ -1602,20 +1611,38 @@
-    thread/process */
- #define NEW_STACK_SIZE 8192
- 
-+#ifdef USE_NPTL
-+static spinlock_t nptl_lock = SPIN_LOCK_UNLOCKED;
-+#endif
-+
- static int clone_func(void *arg)
- {
-     CPUState *env = arg;
-+#ifdef HAVE_NPTL
-+    /* Wait until the parent has finshed initializing the tls state.  */
-+    while (!spin_trylock(&nptl_lock))
-+        usleep(1);
-+    spin_unlock(&nptl_lock);
-+#endif
-     cpu_loop(env);
-     /* never exits */
-     return 0;
- }
- 
--int do_fork(CPUState *env, unsigned int flags, unsigned long newsp)
-+int do_fork(CPUState *env, unsigned int flags, unsigned long newsp,
-+            uint32_t *parent_tidptr, void *newtls,
-+            uint32_t *child_tidptr)
- {
-     int ret;
-     TaskState *ts;
-     uint8_t *new_stack;
-     CPUState *new_env;
-+#ifdef USE_NPTL
-+    unsigned int nptl_flags;
-+
-+    if (flags & CLONE_PARENT_SETTID)
-+        *parent_tidptr = gettid();
-+#endif
-     
-     if (flags & CLONE_VM) {
-         ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE);
-@@ -1665,16 +1692,60 @@
- #error unsupported target CPU
- #endif
-         new_env->opaque = ts;
-+#ifdef USE_NPTL
-+     nptl_flags = flags;
-+     flags &= ~CLONE_NPTL_FLAGS2;
-+     if (nptl_flags & CLONE_CHILD_CLEARTID) {
-+          ts->child_tidptr = child_tidptr;
-+     }
-+     if (nptl_flags & CLONE_SETTLS)
-+         cpu_set_tls (new_env, newtls);
-+     /* Grab the global cpu lock so that the thread setup appears
-+        atomic.  */
-+     if (nptl_flags & CLONE_CHILD_SETTID)
-+         spin_lock(&nptl_lock);
-+#else
-+     if (flags & CLONE_NPTL_FLAGS2)
-+         return -EINVAL;
-+#endif
-+
- #ifdef __ia64__
-         ret = __clone2(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
- #else
- 	ret = clone(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
- #endif
-+#ifdef USE_NPTL
-+     if (ret != -1) {
-+         if (nptl_flags & CLONE_CHILD_SETTID)
-+             *child_tidptr = ret;
-+     }
-+     /* Allow the child to continue.  */
-+     if (nptl_flags & CLONE_CHILD_SETTID)
-+         spin_unlock(&nptl_lock);
-+#endif
-     } else {
--        /* if no CLONE_VM, we consider it is a fork */
--        if ((flags & ~CSIGNAL) != 0)
--            return -EINVAL;
--        ret = fork();
-+    /* if no CLONE_VM, we consider it is a fork */
-+    if ((flags & ~(CSIGNAL | CLONE_NPTL_FLAGS2)) != 0)
-+          return -EINVAL;
-+      ret = fork();
-+#ifdef USE_NPTL
-+     /* There is a race condition here.  The parent process could
-+        theoretically read the TID in the child process before the child
-+        tid is set.  This would require using either ptrace
-+        (not implemented) or having *_tidptr to point at a shared memory
-+        mapping.  We can't repeat the spinlock hack used above because
-+        the child process gets its own copy of the lock.  */
-+     if (ret == 0) {
-+         /* Child Process.  */
-+         if (flags & CLONE_CHILD_SETTID)
-+             *child_tidptr = gettid();
-+         ts = (TaskState *)env->opaque;
-+         if (flags & CLONE_CHILD_CLEARTID)
-+             ts->child_tidptr = child_tidptr;
-+         if (flags & CLONE_SETTLS)
-+             cpu_set_tls (env, newtls);
-+     }
-+#endif
-     }
-     return ret;
- }
-@@ -1918,7 +1989,7 @@
-         ret = do_brk(arg1);
-         break;
-     case TARGET_NR_fork:
--        ret = get_errno(do_fork(cpu_env, SIGCHLD, 0));
-+        ret = get_errno(do_fork(cpu_env, SIGCHLD, 0, NULL, NULL, NULL));
-         break;
-     case TARGET_NR_waitpid:
-         {
-@@ -2989,7 +3060,8 @@
-         ret = get_errno(fsync(arg1));
-         break;
-     case TARGET_NR_clone:
--        ret = get_errno(do_fork(cpu_env, arg1, arg2));
-+        ret = get_errno(do_fork(cpu_env, arg1, arg2, (uint32_t *)arg3,
-+                        (void *)arg4, (uint32_t *)arg5));
-         break;
- #ifdef __NR_exit_group
-         /* new thread calls */
-@@ -3339,7 +3411,8 @@
- #endif
- #ifdef TARGET_NR_vfork
-     case TARGET_NR_vfork:
--        ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0));
-+        ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0,
-+                                NULL, NULL, NULL));
-         break;
- #endif
- #ifdef TARGET_NR_ugetrlimit
-@@ -3838,4 +3911,3 @@
- #endif
-     return ret;
- }
--
-Index: qemu/target-arm/cpu.h
-===================================================================
---- qemu.orig/target-arm/cpu.h	2006-03-09 19:18:27.000000000 +0000
-+++ qemu/target-arm/cpu.h	2006-08-26 16:31:53.000000000 +0100
-@@ -35,6 +35,9 @@
- #define EXCP_IRQ             5
- #define EXCP_FIQ             6
- #define EXCP_BKPT            7
-+#define EXCP_KERNEL_TRAP     8   /* Jumped to kernel code page.  */
-+
-+
- 
- /* We currently assume float and double are IEEE single and double
-    precision respectively.
-@@ -85,6 +88,7 @@
-         uint32_t c9_data;
-         uint32_t c13_fcse; /* FCSE PID.  */
-         uint32_t c13_context; /* Context ID.  */
-+        uint32_t c13_tls; /* Paul Brook told me to just add this ;)  */
-     } cp15;
- 
-     /* Internal CPU feature flags.  */
-@@ -135,6 +139,15 @@
- int cpu_arm_signal_handler(int host_signum, struct siginfo *info, 
-                            void *puc);
- 
-+void cpu_lock(void);
-+void cpu_unlock(void);
-+#if defined(USE_NPTL)
-+static inline void cpu_set_tls(CPUARMState *env, void *newtls)
-+{
-+  env->cp15.c13_tls = (uint32_t)newtls;
-+}
-+#endif
-+
- #define CPSR_M (0x1f)
- #define CPSR_T (1 << 5)
- #define CPSR_F (1 << 6)
-@@ -146,7 +159,11 @@
- #define CPSR_J (1 << 24)
- #define CPSR_IT_0_1 (3 << 25)
- #define CPSR_Q (1 << 27)
--#define CPSR_NZCV (0xf << 28)
-+#define CPSR_V (1 << 28)
-+#define CPSR_C (1 << 29)
-+#define CPSR_Z (1 << 30)
-+#define CPSR_N (1 << 31)
-+#define CPSR_NZCV (CPSR_N | CPSR_Z | CPSR_C | CPSR_V)
- 
- #define CACHED_CPSR_BITS (CPSR_T | CPSR_Q | CPSR_NZCV)
- /* Return the current CPSR value.  */
-Index: qemu/target-arm/exec.h
-===================================================================
---- qemu.orig/target-arm/exec.h	2006-03-09 19:18:27.000000000 +0000
-+++ qemu/target-arm/exec.h	2006-08-26 16:31:53.000000000 +0100
-@@ -51,8 +51,6 @@
- 
- /* In op_helper.c */
- 
--void cpu_lock(void);
--void cpu_unlock(void);
- void helper_set_cp15(CPUState *, uint32_t, uint32_t);
- uint32_t helper_get_cp15(CPUState *, uint32_t);
- 
-Index: qemu/target-arm/op.c
-===================================================================
---- qemu.orig/target-arm/op.c	2006-08-26 16:28:48.000000000 +0100
-+++ qemu/target-arm/op.c	2006-08-26 16:31:53.000000000 +0100
-@@ -891,6 +891,12 @@
-     cpu_loop_exit();
- }
- 
-+void OPPROTO op_kernel_trap(void)
-+{
-+    env->exception_index = EXCP_KERNEL_TRAP;
-+    cpu_loop_exit();
-+}
-+
- /* VFP support.  We follow the convention used for VFP instrunctions:
-    Single precition routines have a "s" suffix, double precision a
-    "d" suffix.  */
-Index: qemu/target-arm/translate.c
-===================================================================
---- qemu.orig/target-arm/translate.c	2006-08-26 16:28:48.000000000 +0100
-+++ qemu/target-arm/translate.c	2006-08-26 16:31:53.000000000 +0100
-@@ -2382,6 +2382,7 @@
-     s->is_jmp = DISAS_JUMP;
- }
- 
-+
- /* generate intermediate code in gen_opc_buf and gen_opparam_buf for
-    basic block 'tb'. If search_pc is TRUE, also generate PC
-    information for each intermediate instruction. */
-@@ -2416,6 +2417,15 @@
-     nb_gen_labels = 0;
-     lj = -1;
-     do {
-+#ifdef CONFIG_USER_ONLY
-+        /* Intercept jump to the magic kernel page.  */
-+        if (dc->pc > 0xffff0000) {
-+            gen_op_kernel_trap();
-+            dc->is_jmp = DISAS_UPDATE;
-+            break;
-+        }
-+#endif
-+
-         if (env->nb_breakpoints > 0) {
-             for(j = 0; j < env->nb_breakpoints; j++) {
-                 if (env->breakpoints[j] == dc->pc) {
-Index: qemu/qemu_spinlock.h
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ qemu/qemu_spinlock.h	2006-08-26 16:31:53.000000000 +0100
-@@ -0,0 +1,182 @@
-+/*
-+ * internal execution defines for qemu
-+ *
-+ *  Copyright (c) 2003 Fabrice Bellard
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-+ */
-+
-+#ifndef _QEMU_SPINLOCK_H
-+#define _QEMU_SPINLOCK_H
-+
-+#ifdef __powerpc__
-+static inline int testandset (int *p)
-+{
-+    int ret;
-+    __asm__ __volatile__ (
-+                          "0:    lwarx %0,0,%1\n"
-+                          "      xor. %0,%3,%0\n"
-+                          "      bne 1f\n"
-+                          "      stwcx. %2,0,%1\n"
-+                          "      bne- 0b\n"
-+                          "1:    "
-+                          : "=&r" (ret)
-+                          : "r" (p), "r" (1), "r" (0)
-+                          : "cr0", "memory");
-+    return ret;
-+}
-+#endif
-+
-+#ifdef __i386__
-+static inline int testandset (int *p)
-+{
-+    long int readval = 0;
-+
-+    __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
-+                          : "+m" (*p), "+a" (readval)
-+                          : "r" (1)
-+                          : "cc");
-+    return readval;
-+}
-+#endif
-+
-+#ifdef __x86_64__
-+static inline int testandset (int *p)
-+{
-+    long int readval = 0;
-+
-+    __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
-+                          : "+m" (*p), "+a" (readval)
-+                          : "r" (1)
-+                          : "cc");
-+    return readval;
-+}
-+#endif
-+
-+#ifdef __s390__
-+static inline int testandset (int *p)
-+{
-+    int ret;
-+
-+    __asm__ __volatile__ ("0: cs    %0,%1,0(%2)\n"
-+                         "   jl    0b"
-+                         : "=&d" (ret)
-+                         : "r" (1), "a" (p), "0" (*p)
-+                         : "cc", "memory" );
-+    return ret;
-+}
-+#endif
-+
-+#ifdef __alpha__
-+static inline int testandset (int *p)
-+{
-+    int ret;
-+    unsigned long one;
-+
-+    __asm__ __volatile__ ("0:  mov 1,%2\n"
-+                         "     ldl_l %0,%1\n"
-+                         "     stl_c %2,%1\n"
-+                         "     beq %2,1f\n"
-+                         ".subsection 2\n"
-+                         "1:   br 0b\n"
-+                         ".previous"
-+                         : "=r" (ret), "=m" (*p), "=r" (one)
-+                         : "m" (*p));
-+    return ret;
-+}
-+#endif
-+
-+#ifdef __sparc__
-+static inline int testandset (int *p)
-+{
-+       int ret;
-+
-+       __asm__ __volatile__("ldstub    [%1], %0"
-+                            : "=r" (ret)
-+                            : "r" (p)
-+                            : "memory");
-+
-+       return (ret ? 1 : 0);
-+}
-+#endif
-+
-+#ifdef __arm__
-+static inline int testandset (int *spinlock)
-+{
-+    register unsigned int ret;
-+    __asm__ __volatile__("swp %0, %1, [%2]"
-+                         : "=r"(ret)
-+                         : "0"(1), "r"(spinlock));
-+
-+    return ret;
-+}
-+#endif
-+
-+#ifdef __mc68000
-+static inline int testandset (int *p)
-+{
-+    char ret;
-+    __asm__ __volatile__("tas %1; sne %0"
-+                         : "=r" (ret)
-+                         : "m" (p)
-+                         : "cc","memory");
-+    return ret;
-+}
-+#endif
-+
-+#ifdef __ia64
-+#include <ia64intrin.h>
-+
-+static inline int testandset (int *p)
-+{
-+    return __sync_lock_test_and_set (p, 1);
-+}
-+#endif
-+
-+typedef int spinlock_t;
-+
-+#define SPIN_LOCK_UNLOCKED 0
-+
-+#if defined(CONFIG_USER_ONLY)
-+static inline void spin_lock(spinlock_t *lock)
-+{
-+    while (testandset(lock));
-+}
-+
-+static inline void spin_unlock(spinlock_t *lock)
-+{
-+    *lock = 0;
-+}
-+
-+static inline int spin_trylock(spinlock_t *lock)
-+{
-+    return !testandset(lock);
-+}
-+#else
-+static inline void spin_lock(spinlock_t *lock)
-+{
-+}
-+
-+static inline void spin_unlock(spinlock_t *lock)
-+{
-+}
-+
-+static inline int spin_trylock(spinlock_t *lock)
-+{
-+    return 1;
-+}
-+#endif
-+
-+#endif /* ! _QEMU_SPINLOCK_H */
diff --git a/packages/qemu/files/compiler.patch b/packages/qemu/files/compiler.patch
deleted file mode 100644
index dad18b3a61..0000000000
--- a/packages/qemu/files/compiler.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- qemu/usb-linux.c~	2006-07-19 19:06:15.000000000 +0100
-+++ qemu/usb-linux.c	2006-10-02 12:49:00.000000000 +0100
-@@ -26,7 +26,6 @@
- #if defined(__linux__)
- #include <dirent.h>
- #include <sys/ioctl.h>
--#include <linux/compiler.h>
- #include <linux/usbdevice_fs.h>
- #include <linux/version.h>
- 
diff --git a/packages/qemu/files/configure.patch b/packages/qemu/files/configure.patch
deleted file mode 100644
index ea83f8cd6d..0000000000
--- a/packages/qemu/files/configure.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-Index: qemu/configure
-===================================================================
---- qemu.orig/configure	2006-02-09 17:58:47.000000000 +0000
-+++ qemu/configure	2006-02-21 17:47:31.000000000 +0000
-@@ -482,7 +482,7 @@
- fi
- echo "HOST_CC=$host_cc" >> $config_mak
- echo "AR=$ar" >> $config_mak
--echo "STRIP=$strip -s -R .comment -R .note" >> $config_mak
-+echo "STRIP=$strip" >> $config_mak
- echo "CFLAGS=$CFLAGS" >> $config_mak
- echo "LDFLAGS=$LDFLAGS" >> $config_mak
- echo "EXESUF=$EXESUF" >> $config_mak
diff --git a/packages/qemu/files/fix_segfault.patch b/packages/qemu/files/fix_segfault.patch
deleted file mode 100644
index 976c75cd60..0000000000
--- a/packages/qemu/files/fix_segfault.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-Index: qemu/Makefile.target
-===================================================================
---- qemu.orig/Makefile.target	2007-06-29 10:57:58.000000000 +0000
-+++ qemu/Makefile.target	2007-06-29 10:58:01.000000000 +0000
-@@ -241,7 +241,6 @@
- ifdef CONFIG_LINUX_USER
- OBJS= main.o syscall.o mmap.o signal.o path.o osdep.o thunk.o \
-       elfload.o linuxload.o
--LIBS+= $(AIOLIBS)
- ifdef TARGET_HAS_BFLT
- OBJS+= flatload.o
- endif
-Index: qemu/linux-user/syscall.c
-===================================================================
---- qemu.orig/linux-user/syscall.c	2007-06-29 10:58:01.000000000 +0000
-+++ qemu/linux-user/syscall.c	2007-06-29 10:58:30.000000000 +0000
-@@ -4872,29 +4872,6 @@
-            goto unimplemented_nowarn;
- #endif
- 
--#ifdef TARGET_NR_clock_gettime
--    case TARGET_NR_clock_gettime:
--    {
--        struct timespec ts;
--        ret = get_errno(clock_gettime(arg1, &ts));
--        if (!is_error(ret)) {
--            host_to_target_timespec(arg2, &ts);
--        }
--        break;
--    }
--#endif
--#ifdef TARGET_NR_clock_getres
--    case TARGET_NR_clock_getres:
--    {
--        struct timespec ts;
--        ret = get_errno(clock_getres(arg1, &ts));
--        if (!is_error(ret)) {
--            host_to_target_timespec(arg2, &ts);
--        }
--        break;
--    }
--#endif
--
-     default:
-     unimplemented:
-         gemu_log("qemu: Unsupported syscall: %d\n", num);
diff --git a/packages/qemu/files/makefile.patch b/packages/qemu/files/makefile.patch
deleted file mode 100644
index 75b5ac9c71..0000000000
--- a/packages/qemu/files/makefile.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-Index: qemu/Makefile
-===================================================================
---- qemu.orig/Makefile	2007-07-30 18:25:50.000000000 +0200
-+++ qemu/Makefile	2007-07-30 18:26:13.000000000 +0200
-@@ -5,14 +5,14 @@
- .PHONY: all clean distclean dvi info install install-doc tar tarbin \
- 	speed test test2 html dvi info
- 
--CFLAGS=-Wall -O2 -g -fno-strict-aliasing -I.
-+CFLAGS+=-Wall -O2 -g -fno-strict-aliasing -I.
- ifdef CONFIG_DARWIN
- CFLAGS+= -mdynamic-no-pic
- endif
- ifeq ($(ARCH),sparc)
- CFLAGS+=-mcpu=ultrasparc
- endif
--LDFLAGS=-g
-+LDFLAGS+=-g
- LIBS=
- DEFINES+=-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
- TOOLS=qemu-img$(EXESUF)
-Index: qemu/Makefile.target
-===================================================================
---- qemu.orig/Makefile.target	2007-07-30 18:27:17.000000000 +0200
-+++ qemu/Makefile.target	2007-07-30 18:27:23.000000000 +0200
-@@ -17,9 +17,9 @@
- VPATH+=:$(SRC_PATH)/linux-user
- DEFINES+=-I$(SRC_PATH)/linux-user -I$(SRC_PATH)/linux-user/$(TARGET_ARCH)
- endif
--CFLAGS=-Wall -O2 -g -fno-strict-aliasing
-+CFLAGS+=-Wall -O2 -g -fno-strict-aliasing
- #CFLAGS+=-Werror
--LDFLAGS=-g
-+LDFLAGS+=-g
- LIBS=
- HELPER_CFLAGS=$(CFLAGS)
- DYNGEN=../dyngen$(EXESUF)
diff --git a/packages/qemu/files/no-strip.patch b/packages/qemu/files/no-strip.patch
deleted file mode 100644
index 59ed8771fe..0000000000
--- a/packages/qemu/files/no-strip.patch
+++ /dev/null
@@ -1,22 +0,0 @@
---- qemu.orig/Makefile
-+++ qemu/Makefile
-@@ -68,7 +68,7 @@
- 
- install: all $(if $(BUILD_DOCS),install-doc)
- 	mkdir -p "$(DESTDIR)$(bindir)"
--	$(INSTALL) -m 755 -s $(TOOLS) "$(DESTDIR)$(bindir)"
-+	$(INSTALL) -m 755 $(TOOLS) "$(DESTDIR)$(bindir)"
- 	mkdir -p "$(DESTDIR)$(datadir)"
- 	for x in bios.bin vgabios.bin vgabios-cirrus.bin ppc_rom.bin \
- 		video.x openbios-sparc32 pxe-ne2k_pci.bin \
---- qemu.orig/Makefile.target
-+++ qemu/Makefile.target
-@@ -655,7 +655,7 @@
- 
- install: all 
- ifneq ($(PROGS),)
--	$(INSTALL) -m 755 -s $(PROGS) "$(DESTDIR)$(bindir)"
-+	$(INSTALL) -m 755 $(PROGS) "$(DESTDIR)$(bindir)"
- endif
- 
- ifneq ($(wildcard .depend),)
diff --git a/packages/qemu/files/pl110_rgb-r0.patch b/packages/qemu/files/pl110_rgb-r0.patch
deleted file mode 100644
index 09e5898d3a..0000000000
--- a/packages/qemu/files/pl110_rgb-r0.patch
+++ /dev/null
@@ -1,219 +0,0 @@
-Index: qemu/hw/pl110.c
-===================================================================
---- qemu.orig/hw/pl110.c	2006-04-11 21:49:46.000000000 +0100
-+++ qemu/hw/pl110.c	2006-05-24 22:53:00.000000000 +0100
-@@ -10,6 +10,7 @@
- #include "vl.h"
- 
- #define PL110_CR_EN   0x001
-+#define PL110_CR_BGR  0x100
- #define PL110_CR_BEBO 0x200
- #define PL110_CR_BEPO 0x400
- #define PL110_CR_PWR  0x800
-@@ -115,6 +116,7 @@
-     int first, last = 0;
-     int dirty, new_dirty;
-     int i;
-+    int bpp_offset;
- 
-     if (!pl110_enabled(s))
-         return;
-@@ -146,12 +148,17 @@
-         fprintf(stderr, "pl110: Bad color depth\n");
-         exit(1);
-     }
-+    if (s->cr & PL110_CR_BGR)
-+	bpp_offset = 0;
-+    else
-+	bpp_offset = 18;
-+
-     if (s->cr & PL110_CR_BEBO)
--      fn = fntable[s->bpp + 6];
-+      fn = fntable[s->bpp + 6 + bpp_offset];
-     else if (s->cr & PL110_CR_BEPO)
--      fn = fntable[s->bpp + 12];
-+      fn = fntable[s->bpp + 12 + bpp_offset];
-     else
--      fn = fntable[s->bpp];
-+      fn = fntable[s->bpp + bpp_offset];
-     
-     src_width = s->cols;
-     switch (s->bpp) {
-Index: qemu/hw/pl110_template.h
-===================================================================
---- qemu.orig/hw/pl110_template.h	2006-02-19 12:31:32.000000000 +0000
-+++ qemu/hw/pl110_template.h	2006-05-24 23:04:03.000000000 +0100
-@@ -24,6 +24,16 @@
- #error unknown bit depth
- #endif
- 
-+#undef RGB
-+#define BORDER bgr
-+#define ORDER 0
-+#include "pl110_template.h"
-+#define ORDER 1
-+#include "pl110_template.h"
-+#define ORDER 2
-+#include "pl110_template.h"
-+#define RGB
-+#define BORDER rgb
- #define ORDER 0
- #include "pl110_template.h"
- #define ORDER 1
-@@ -33,26 +43,47 @@
- 
- static drawfn glue(pl110_draw_fn_,BITS)[18] =
- {
--    glue(pl110_draw_line1_lblp,BITS),
--    glue(pl110_draw_line2_lblp,BITS),
--    glue(pl110_draw_line4_lblp,BITS),
--    glue(pl110_draw_line8_lblp,BITS),
--    glue(pl110_draw_line16_lblp,BITS),
--    glue(pl110_draw_line32_lblp,BITS),
--
--    glue(pl110_draw_line1_bbbp,BITS),
--    glue(pl110_draw_line2_bbbp,BITS),
--    glue(pl110_draw_line4_bbbp,BITS),
--    glue(pl110_draw_line8_bbbp,BITS),
--    glue(pl110_draw_line16_bbbp,BITS),
--    glue(pl110_draw_line32_bbbp,BITS),
--
--    glue(pl110_draw_line1_lbbp,BITS),
--    glue(pl110_draw_line2_lbbp,BITS),
--    glue(pl110_draw_line4_lbbp,BITS),
--    glue(pl110_draw_line8_lbbp,BITS),
--    glue(pl110_draw_line16_lbbp,BITS),
--    glue(pl110_draw_line32_lbbp,BITS)
-+    glue(pl110_draw_line1_lblp_bgr,BITS),
-+    glue(pl110_draw_line2_lblp_bgr,BITS),
-+    glue(pl110_draw_line4_lblp_bgr,BITS),
-+    glue(pl110_draw_line8_lblp_bgr,BITS),
-+    glue(pl110_draw_line16_lblp_bgr,BITS),
-+    glue(pl110_draw_line32_lblp_bgr,BITS),
-+
-+    glue(pl110_draw_line1_bbbp_bgr,BITS),
-+    glue(pl110_draw_line2_bbbp_bgr,BITS),
-+    glue(pl110_draw_line4_bbbp_bgr,BITS),
-+    glue(pl110_draw_line8_bbbp_bgr,BITS),
-+    glue(pl110_draw_line16_bbbp_bgr,BITS),
-+    glue(pl110_draw_line32_bbbp_bgr,BITS),
-+
-+    glue(pl110_draw_line1_lbbp_bgr,BITS),
-+    glue(pl110_draw_line2_lbbp_bgr,BITS),
-+    glue(pl110_draw_line4_lbbp_bgr,BITS),
-+    glue(pl110_draw_line8_lbbp_bgr,BITS),
-+    glue(pl110_draw_line16_lbbp_bgr,BITS),
-+    glue(pl110_draw_line32_lbbp_bgr,BITS),
-+
-+    glue(pl110_draw_line1_lblp_rgb,BITS),
-+    glue(pl110_draw_line2_lblp_rgb,BITS),
-+    glue(pl110_draw_line4_lblp_rgb,BITS),
-+    glue(pl110_draw_line8_lblp_rgb,BITS),
-+    glue(pl110_draw_line16_lblp_rgb,BITS),
-+    glue(pl110_draw_line32_lblp_rgb,BITS),
-+
-+    glue(pl110_draw_line1_bbbp_rgb,BITS),
-+    glue(pl110_draw_line2_bbbp_rgb,BITS),
-+    glue(pl110_draw_line4_bbbp_rgb,BITS),
-+    glue(pl110_draw_line8_bbbp_rgb,BITS),
-+    glue(pl110_draw_line16_bbbp_rgb,BITS),
-+    glue(pl110_draw_line32_bbbp_rgb,BITS),
-+
-+    glue(pl110_draw_line1_lbbp_rgb,BITS),
-+    glue(pl110_draw_line2_lbbp_rgb,BITS),
-+    glue(pl110_draw_line4_lbbp_rgb,BITS),
-+    glue(pl110_draw_line8_lbbp_rgb,BITS),
-+    glue(pl110_draw_line16_lbbp_rgb,BITS),
-+    glue(pl110_draw_line32_lbbp_rgb,BITS),
- };
- 
- #undef BITS
-@@ -61,18 +92,18 @@
- #else
- 
- #if ORDER == 0
--#define NAME glue(lblp, BITS)
-+#define NAME glue(glue(lblp_, BORDER), BITS)
- #ifdef WORDS_BIGENDIAN
- #define SWAP_WORDS 1
- #endif
- #elif ORDER == 1
--#define NAME glue(bbbp, BITS)
-+#define NAME glue(glue(bbbp_, BORDER), BITS)
- #ifndef WORDS_BIGENDIAN
- #define SWAP_WORDS 1
- #endif
- #else
- #define SWAP_PIXELS 1
--#define NAME glue(lbbp, BITS)
-+#define NAME glue(glue(lbbp_, BORDER), BITS)
- #ifdef WORDS_BIGENDIAN
- #define SWAP_WORDS 1
- #endif
-@@ -195,27 +226,34 @@
- #ifdef SWAP_WORDS
-         data = bswap32(data);
- #endif
-+#ifdef RGB
-+#define LSB r
-+#define MSB b
-+#else
-+#define LSB b
-+#define MSB r
-+#endif
- #if 0
--        r = data & 0x1f;
-+        LSB = data & 0x1f;
-         data >>= 5;
-         g = data & 0x3f;
-         data >>= 6;
--        b = data & 0x1f;
-+        MSB = data & 0x1f;
-         data >>= 5;
- #else
--        r = (data & 0x1f) << 3;
-+        LSB = (data & 0x1f) << 3;
-         data >>= 5;
-         g = (data & 0x3f) << 2;
-         data >>= 6;
--        b = (data & 0x1f) << 3;
-+        MSB = (data & 0x1f) << 3;
-         data >>= 5;
- #endif
-         COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b));
--        r = (data & 0x1f) << 3;
-+        LSB = (data & 0x1f) << 3;
-         data >>= 5;
-         g = (data & 0x3f) << 2;
-         data >>= 6;
--        b = (data & 0x1f) << 3;
-+        MSB = (data & 0x1f) << 3;
-         data >>= 5;
-         COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b));
-         width -= 2;
-@@ -229,14 +267,21 @@
-     unsigned int r, g, b;
-     while (width > 0) {
-         data = *(uint32_t *)src;
-+#ifdef RGB
-+#define LSB r
-+#define MSB b
-+#else
-+#define LSB b
-+#define MSB r
-+#endif
- #ifdef SWAP_WORDS
--        r = data & 0xff;
-+        LSB = data & 0xff;
-         g = (data >> 8) & 0xff;
--        b = (data >> 16) & 0xff;
-+        MSB = (data >> 16) & 0xff;
- #else
--        r = (data >> 24) & 0xff;
-+        LSB = (data >> 24) & 0xff;
-         g = (data >> 16) & 0xff;
--        b = (data >> 8) & 0xff;
-+        MSB = (data >> 8) & 0xff;
- #endif
-         COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b));
-         width--;
diff --git a/packages/qemu/files/qemu-0.9.0-nptl-update.patch b/packages/qemu/files/qemu-0.9.0-nptl-update.patch
deleted file mode 100644
index 869acba2cf..0000000000
--- a/packages/qemu/files/qemu-0.9.0-nptl-update.patch
+++ /dev/null
@@ -1,294 +0,0 @@
-Index: qemu/linux-user/main.c
-===================================================================
---- qemu.orig/linux-user/main.c	2007-06-29 10:47:58.000000000 +0000
-+++ qemu/linux-user/main.c	2007-06-29 10:47:58.000000000 +0000
-@@ -156,7 +156,7 @@
-     p[1] = tswapl(e2);
- }
- 
--uint64_t gdt_table[6];
-+uint64_t gdt_table[9];
- uint64_t idt_table[256];
- 
- /* only dpl matters as we do only user space emulation */
-@@ -1768,7 +1768,11 @@
-     int optind;
-     const char *r;
-     int gdbstub_port = 0;
--    
-+    char *assume_kernel = getenv("QEMU_ASSUME_KERNEL");
-+
-+    if (assume_kernel)
-+       setenv("LD_ASSUME_KERNEL", assume_kernel, 1);
-+
-     if (argc <= 1)
-         usage();
- 
-Index: qemu/linux-user/syscall.c
-===================================================================
---- qemu.orig/linux-user/syscall.c	2007-06-29 10:47:58.000000000 +0000
-+++ qemu/linux-user/syscall.c	2007-06-29 10:53:44.000000000 +0000
-@@ -60,6 +60,7 @@
- #define tchars host_tchars /* same as target */
- #define ltchars host_ltchars /* same as target */
- 
-+#include <linux/futex.h>
- #include <linux/termios.h>
- #include <linux/unistd.h>
- #include <linux/utsname.h>
-@@ -2122,6 +2123,80 @@
-     return ret;
- }
- 
-+int do_set_thread_area(CPUX86State *env, target_ulong ptr)
-+{
-+    uint64_t *gdt_table = g2h(env->gdt.base);
-+    struct target_modify_ldt_ldt_s ldt_info;
-+    struct target_modify_ldt_ldt_s *target_ldt_info;
-+    int seg_32bit, contents, read_exec_only, limit_in_pages;
-+    int seg_not_present, useable;
-+    uint32_t *lp, entry_1, entry_2;
-+    int i;
-+
-+    lock_user_struct(target_ldt_info, ptr, 1);
-+    ldt_info.entry_number = tswap32(target_ldt_info->entry_number);
-+    ldt_info.base_addr = tswapl(target_ldt_info->base_addr);
-+    ldt_info.limit = tswap32(target_ldt_info->limit);
-+    ldt_info.flags = tswap32(target_ldt_info->flags);
-+    if (ldt_info.entry_number == -1) {
-+           for (i=6; i<8; i++)
-+                   if (gdt_table[i] == 0) {
-+                           ldt_info.entry_number = i;
-+                           target_ldt_info->entry_number = tswap32(i);
-+                           break;
-+                   }
-+    }
-+    unlock_user_struct(target_ldt_info, ptr, 0);
-+    
-+    if (ldt_info.entry_number < 6 || ldt_info.entry_number > 8)
-+           return -EINVAL;
-+    seg_32bit = ldt_info.flags & 1;
-+    contents = (ldt_info.flags >> 1) & 3;
-+    read_exec_only = (ldt_info.flags >> 3) & 1;
-+    limit_in_pages = (ldt_info.flags >> 4) & 1;
-+    seg_not_present = (ldt_info.flags >> 5) & 1;
-+    useable = (ldt_info.flags >> 6) & 1;
-+
-+    if (contents == 3) {
-+        if (seg_not_present == 0)
-+            return -EINVAL;
-+    }
-+
-+    /* NOTE: same code as Linux kernel */
-+    /* Allow LDTs to be cleared by the user. */
-+    if (ldt_info.base_addr == 0 && ldt_info.limit == 0) {
-+        if ((contents == 0             &&
-+             read_exec_only == 1       &&
-+             seg_32bit == 0            &&
-+             limit_in_pages == 0       &&
-+             seg_not_present == 1      &&
-+             useable == 0 )) {
-+            entry_1 = 0;
-+            entry_2 = 0;
-+            goto install;
-+        }
-+    }
-+    
-+    entry_1 = ((ldt_info.base_addr & 0x0000ffff) << 16) |
-+        (ldt_info.limit & 0x0ffff);
-+    entry_2 = (ldt_info.base_addr & 0xff000000) |
-+        ((ldt_info.base_addr & 0x00ff0000) >> 16) |
-+        (ldt_info.limit & 0xf0000) |
-+        ((read_exec_only ^ 1) << 9) |
-+        (contents << 10) |
-+        ((seg_not_present ^ 1) << 15) |
-+        (seg_32bit << 22) |
-+        (limit_in_pages << 23) |
-+       (useable << 20) |
-+       0x7000;
-+
-+    /* Install the new entry ...  */
-+install:
-+    lp = (uint32_t *)(gdt_table + ldt_info.entry_number);
-+    lp[0] = tswap32(entry_1);
-+    lp[1] = tswap32(entry_2);
-+    return 0;
-+}
- #endif /* defined(TARGET_I386) */
- 
- /* this stack is the equivalent of the kernel stack associated with a
-@@ -2154,15 +2229,20 @@
-     TaskState *ts;
-     uint8_t *new_stack;
-     CPUState *new_env;
-+#if defined(TARGET_I386)
-+       uint64_t *new_gdt_table;
-+#endif
- #ifdef USE_NPTL
-     unsigned int nptl_flags;
- 
-     if (flags & CLONE_PARENT_SETTID)
-         *parent_tidptr = gettid();
- #endif
--    
-+
-     if (flags & CLONE_VM) {
-         ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE);
-+               if (!ts)
-+                       return -ENOMEM;
-         memset(ts, 0, sizeof(TaskState));
-         new_stack = ts->stack;
-         ts->used = 1;
-@@ -2174,6 +2254,29 @@
- #if defined(TARGET_I386)
-         if (!newsp)
-             newsp = env->regs[R_ESP];
-+       new_gdt_table = malloc(9 * 8);
-+       if (!new_gdt_table) {
-+               free(new_env);
-+               return -ENOMEM;
-+       }
-+       /* Copy main GDT table from parent, but clear TLS entries */
-+       memcpy(new_gdt_table, g2h(env->gdt.base), 6 * 8);
-+       memset(&new_gdt_table[6], 0, 3 * 8); 
-+       new_env->gdt.base = h2g(new_gdt_table);
-+       if (flags & 0x00080000 /* CLONE_SETTLS */) {
-+               ret = do_set_thread_area(new_env, new_env->regs[R_ESI]);
-+               if (ret) {
-+                       free(new_gdt_table);
-+                       free(new_env);
-+                       return ret;
-+               }
-+       }
-+       cpu_x86_load_seg(env, R_CS, new_env->regs[R_CS]);
-+       cpu_x86_load_seg(env, R_DS, new_env->regs[R_DS]);
-+       cpu_x86_load_seg(env, R_ES, new_env->regs[R_ES]);
-+       cpu_x86_load_seg(env, R_SS, new_env->regs[R_SS]);
-+       cpu_x86_load_seg(env, R_FS, new_env->regs[R_FS]);
-+       cpu_x86_load_seg(env, R_GS, new_env->regs[R_GS]);
-         new_env->regs[R_ESP] = newsp;
-         new_env->regs[R_EAX] = 0;
- #elif defined(TARGET_ARM)
-@@ -2517,6 +2620,68 @@
-     unlock_user_struct(target_ts, target_addr, 1);
- }
- 
-+static long do_futex(target_ulong uaddr, int op, uint32_t val,
-+                    target_ulong utime, target_ulong uaddr2,
-+                    uint32_t val3)
-+{
-+       struct timespec host_utime;
-+       unsigned long val2 = utime;
-+
-+       if (utime && (op == FUTEX_WAIT || op == FUTEX_LOCK_PI)) {
-+               target_to_host_timespec(&host_utime, utime);
-+               val2 = (unsigned long)&host_utime;
-+       }
-+ 
-+#ifdef BSWAP_NEEDED
-+       switch(op) {
-+       case FUTEX_CMP_REQUEUE:
-+               val3 = tswap32(val3);
-+       case FUTEX_REQUEUE:
-+               val2 = tswap32(val2);
-+       case FUTEX_WAIT:
-+       case FUTEX_WAKE:
-+               val = tswap32(val);
-+       case FUTEX_LOCK_PI: /* This one's icky, but comes out OK */
-+       case FUTEX_UNLOCK_PI:
-+               break;
-+       default: 
-+               gemu_log("qemu: Unsupported futex op %d\n", op);
-+               return -ENOSYS;
-+       } 
-+#if 0 /* No, it's worse than this */
-+       if (op == FUTEX_WAKE_OP) {
-+               /* Need to munge the secondary operation (val3) */
-+               val3 = tswap32(val3);
-+               int op2 = (val3 >> 28) & 7;
-+               int cmp = (val3 >> 24) & 15;
-+               int oparg = (val3 << 8) >> 20;
-+               int cmparg = (val3 << 20) >> 20;
-+               int shift = val3 & (FUTEX_OP_OPARG_SHIFT << 28);
-+
-+               if (shift)
-+                   oparg = (oparg & 7) + 24 - (oparg & 24);
-+               else oparg = 
-+               if (op2 == FUTEX_OP_ADD) {
-+                       gemu_log("qemu: Unsupported wrong-endian FUTEX_OP_ADD\n");
-+                       return -ENOSYS;
-+               }
-+               if (cmparg == FUTEX_OP_CMP_LT || cmparg == FUTEX_OP_CMP_GE ||
-+                   cmparg == FUTEX_OP_CMP_LE || cmparg == FUTEX_OP_CMP_GT) {
-+                       gemu_log("qemu: Unsupported wrong-endian futex cmparg %d\n", cmparg);
-+                       return -ENOSYS;
-+               }
-+               val3 = shift | (op2<<28) | (cmp<<24) | (oparg<<12) | cmparg;
-+       }
-+#endif
-+#endif
-+       return syscall(__NR_futex, g2h(uaddr), op, val, val2, g2h(uaddr2), val3);
-+}
-+
-+int do_set_tid_address(target_ulong tidptr)
-+{
-+       return syscall(__NR_set_tid_address, g2h(tidptr));
-+}
-+
- long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3, 
-                 long arg4, long arg5, long arg6)
- {
-@@ -2534,7 +2699,7 @@
-         _mcleanup();
- #endif
-         gdb_exit(cpu_env, arg1);
--        /* XXX: should free thread stack and CPU env */
-+        /* XXX: should free thread stack, GDT and CPU env */
-         _exit(arg1);
-         ret = 0; /* avoid warning */
-         break;
-@@ -4642,6 +4807,9 @@
-       ((CPUMIPSState *) cpu_env)->tls_value = arg1;
-       ret = 0;
-       break;
-+#elif TARGET_i386
-+	  ret = get_errno(do_set_thread_area(cpu_env, arg1));
-+	  break;
- #else
-       goto unimplemented_nowarn;
- #endif
-@@ -4655,6 +4823,21 @@
-         goto unimplemented_nowarn;
- #endif
- 
-+#ifdef TARGET_NR_futex
-+    case TARGET_NR_futex:
-+       ret = get_errno(do_futex(arg1, arg2, arg3, arg4, arg5, arg6));
-+       break;
-+#endif
-+#ifdef TARGET_NR_set_tid_address
-+    case TARGET_NR_set_tid_address:
-+        ret = get_errno(do_set_tid_address(arg1));
-+       break;
-+#endif
-+#ifdef TARGET_NR_set_robust_list
-+    case TARGET_NR_set_robust_list:
-+           goto unimplemented_nowarn;
-+#endif
-+
- #ifdef TARGET_NR_clock_gettime
-     case TARGET_NR_clock_gettime:
-     {
-@@ -4678,12 +4861,6 @@
-     }
- #endif
- 
--#if defined(TARGET_NR_set_tid_address) && defined(__NR_set_tid_address)
--    case TARGET_NR_set_tid_address:
--      ret = get_errno(set_tid_address((int *) arg1));
--      break;
--#endif
--
-     default:
-     unimplemented:
-         gemu_log("qemu: Unsupported syscall: %d\n", num);
diff --git a/packages/qemu/files/qemu-0.9.0-nptl.patch b/packages/qemu/files/qemu-0.9.0-nptl.patch
deleted file mode 100644
index fc7b0cfa4b..0000000000
--- a/packages/qemu/files/qemu-0.9.0-nptl.patch
+++ /dev/null
@@ -1,892 +0,0 @@
-These are Paul Brook's patches to QEMU-0.8.2 to enable the running of single
-ARM binaries under QEMU's user-emulation mode. Without them, QEMU-0.8.1
-immediately dies saying:
-	Error: f0005
-	qemu: uncaught target signal 6 (Aborted) - exiting
-while qemu-0.8.2 dies saying:
-	qemu: Unsupported syscall: 983045
-	cannot set up thread-local storage: unknown error
-
-This file is a rediffing of the patches visible at
-https://nowt.dyndns.org/patch.qemu_nptl on 27 Sept 2006
-which "patch" fails to apply automatically.
-See also http://lists.gnu.org/archive/html/qemu-devel/2006-09/msg00194.html
-
-	Martin Guy, 27 Sept 2006
-
-Index: qemu/configure
-===================================================================
---- qemu.orig/configure	2007-06-29 10:47:39.000000000 +0000
-+++ qemu/configure	2007-06-29 10:47:58.000000000 +0000
-@@ -101,6 +101,7 @@
- darwin_user="no"
- build_docs="no"
- uname_release=""
-+nptl="yes"
- 
- # OS specific
- targetos=`uname -s`
-@@ -281,6 +282,8 @@
-         *)     echo "undefined SPARC architecture. Exiting";exit 1;;
-       esac
-   ;;
-+  --disable-nptl) nptl="no"
-+  ;;
-   esac
- done
- 
-@@ -355,6 +358,7 @@
- echo "  --disable-linux-user     disable all linux usermode emulation targets"
- echo "  --enable-darwin-user     enable all darwin usermode emulation targets"
- echo "  --disable-darwin-user    disable all darwin usermode emulation targets"
-+echo "  --disable-nptl           disable usermode NPTL guest support"
- echo "  --fmod-lib               path to FMOD library"
- echo "  --fmod-inc               path to FMOD includes"
- echo "  --enable-uname-release=R Return R for uname -r in usermode emulation"
-@@ -524,6 +528,23 @@
- }
- EOF
- 
-+# check NPTL support
-+cat > $TMPC <<EOF
-+#include <sched.h>
-+void foo()
-+{
-+#ifndef CLONE_SETTLS
-+#error bork
-+#endif
-+}
-+EOF
-+
-+if $cc -c -o $TMPO $TMPC 2> /dev/null ; then
-+  :
-+else
-+   nptl="no"
-+fi
-+
- ##########################################
- # SDL probe
- 
-@@ -678,6 +699,7 @@
- echo "Documentation     $build_docs"
- [ ! -z "$uname_release" ] && \
- echo "uname -r          $uname_release"
-+echo "NPTL support      $nptl"
- 
- if test $sdl_too_old = "yes"; then
- echo "-> Your SDL version is too old - please upgrade to have SDL support"
-@@ -1057,6 +1079,14 @@
-             echo "SDL_CFLAGS=`$sdl_config --cflags`" >> $config_mak
-         fi
-     fi
-+else
-+    if test "$nptl" = "yes" ; then
-+        case "$target_cpu" in
-+          arm | armeb)
-+            echo "#define USE_NPTL 1" >> $config_h
-+          ;;
-+        esac
-+    fi
- fi
- 
- if test "$cocoa" = "yes" ; then
-Index: qemu/exec-all.h
-===================================================================
---- qemu.orig/exec-all.h	2007-06-29 10:47:39.000000000 +0000
-+++ qemu/exec-all.h	2007-06-29 10:47:58.000000000 +0000
-@@ -360,170 +360,7 @@
- extern CPUReadMemoryFunc *io_mem_read[IO_MEM_NB_ENTRIES][4];
- extern void *io_mem_opaque[IO_MEM_NB_ENTRIES];
- 
--#if defined(__powerpc__)
--static inline int testandset (int *p)
--{
--    int ret;
--    __asm__ __volatile__ (
--                          "0:    lwarx %0,0,%1\n"
--                          "      xor. %0,%3,%0\n"
--                          "      bne 1f\n"
--                          "      stwcx. %2,0,%1\n"
--                          "      bne- 0b\n"
--                          "1:    "
--                          : "=&r" (ret)
--                          : "r" (p), "r" (1), "r" (0)
--                          : "cr0", "memory");
--    return ret;
--}
--#elif defined(__i386__)
--static inline int testandset (int *p)
--{
--    long int readval = 0;
--    
--    __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
--                          : "+m" (*p), "+a" (readval)
--                          : "r" (1)
--                          : "cc");
--    return readval;
--}
--#elif defined(__x86_64__)
--static inline int testandset (int *p)
--{
--    long int readval = 0;
--    
--    __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
--                          : "+m" (*p), "+a" (readval)
--                          : "r" (1)
--                          : "cc");
--    return readval;
--}
--#elif defined(__s390__)
--static inline int testandset (int *p)
--{
--    int ret;
--
--    __asm__ __volatile__ ("0: cs    %0,%1,0(%2)\n"
--			  "   jl    0b"
--			  : "=&d" (ret)
--			  : "r" (1), "a" (p), "0" (*p) 
--			  : "cc", "memory" );
--    return ret;
--}
--#elif defined(__alpha__)
--static inline int testandset (int *p)
--{
--    int ret;
--    unsigned long one;
--
--    __asm__ __volatile__ ("0:	mov 1,%2\n"
--			  "	ldl_l %0,%1\n"
--			  "	stl_c %2,%1\n"
--			  "	beq %2,1f\n"
--			  ".subsection 2\n"
--			  "1:	br 0b\n"
--			  ".previous"
--			  : "=r" (ret), "=m" (*p), "=r" (one)
--			  : "m" (*p));
--    return ret;
--}
--#elif defined(__sparc__)
--static inline int testandset (int *p)
--{
--	int ret;
--
--	__asm__ __volatile__("ldstub	[%1], %0"
--			     : "=r" (ret)
--			     : "r" (p)
--			     : "memory");
--
--	return (ret ? 1 : 0);
--}
--#elif defined(__arm__)
--static inline int testandset (int *spinlock)
--{
--    register unsigned int ret;
--    __asm__ __volatile__("swp %0, %1, [%2]"
--                         : "=r"(ret)
--                         : "0"(1), "r"(spinlock));
--    
--    return ret;
--}
--#elif defined(__mc68000)
--static inline int testandset (int *p)
--{
--    char ret;
--    __asm__ __volatile__("tas %1; sne %0"
--                         : "=r" (ret)
--                         : "m" (p)
--                         : "cc","memory");
--    return ret;
--}
--#elif defined(__ia64)
--
--#include <ia64intrin.h>
--
--static inline int testandset (int *p)
--{
--    return __sync_lock_test_and_set (p, 1);
--}
--#elif defined(__mips__)
--static inline int testandset (int *p)
--{
--    int ret;
--
--    __asm__ __volatile__ (
--	"	.set push		\n"
--	"	.set noat		\n"
--	"	.set mips2		\n"
--	"1:	li	$1, 1		\n"
--	"	ll	%0, %1		\n"
--	"	sc	$1, %1		\n"
--	"	beqz	$1, 1b		\n"
--	"	.set pop		"
--	: "=r" (ret), "+R" (*p)
--	:
--	: "memory");
--
--    return ret;
--}
--#else
--#error unimplemented CPU support
--#endif
--
--typedef int spinlock_t;
--
--#define SPIN_LOCK_UNLOCKED 0
--
--#if defined(CONFIG_USER_ONLY)
--static inline void spin_lock(spinlock_t *lock)
--{
--    while (testandset(lock));
--}
--
--static inline void spin_unlock(spinlock_t *lock)
--{
--    *lock = 0;
--}
--
--static inline int spin_trylock(spinlock_t *lock)
--{
--    return !testandset(lock);
--}
--#else
--static inline void spin_lock(spinlock_t *lock)
--{
--}
--
--static inline void spin_unlock(spinlock_t *lock)
--{
--}
--
--static inline int spin_trylock(spinlock_t *lock)
--{
--    return 1;
--}
--#endif
-+#include "qemu_spinlock.h"
- 
- extern spinlock_t tb_lock;
- 
-Index: qemu/linux-user/arm/syscall.h
-===================================================================
---- qemu.orig/linux-user/arm/syscall.h	2007-06-29 10:47:39.000000000 +0000
-+++ qemu/linux-user/arm/syscall.h	2007-06-29 10:47:58.000000000 +0000
-@@ -28,7 +28,9 @@
- #define ARM_SYSCALL_BASE	0x900000
- #define ARM_THUMB_SYSCALL	0
- 
--#define ARM_NR_cacheflush (ARM_SYSCALL_BASE + 0xf0000 + 2)
-+#define ARM_NR_BASE	  0xf0000
-+#define ARM_NR_cacheflush (ARM_NR_BASE + 2)
-+#define ARM_NR_set_tls	  (ARM_NR_BASE + 5)
- 
- #define ARM_NR_semihosting	  0x123456
- #define ARM_NR_thumb_semihosting  0xAB
-Index: qemu/linux-user/main.c
-===================================================================
---- qemu.orig/linux-user/main.c	2007-06-29 10:47:39.000000000 +0000
-+++ qemu/linux-user/main.c	2007-06-29 10:53:47.000000000 +0000
-@@ -325,6 +325,50 @@
-     }
- }
- 
-+/* Handle a jump to the kernel code page.  */
-+static int
-+do_kernel_trap(CPUARMState *env)
-+{
-+    uint32_t addr;
-+    uint32_t *ptr;
-+    uint32_t cpsr;
-+
-+    switch (env->regs[15]) {
-+    case 0xffff0fc0: /* __kernel_cmpxchg */
-+        /* XXX: This only works between threads, not between processes.
-+           Use native atomic operations.  */
-+        /* ??? This probably breaks horribly if the access segfaults.  */
-+        cpu_lock();
-+        ptr = (uint32_t *)env->regs[2];
-+        cpsr = cpsr_read(env);
-+        if (*ptr == env->regs[0]) {
-+            *ptr = env->regs[1];
-+            env->regs[0] = 0;
-+            cpsr |= CPSR_C;
-+        } else {
-+            env->regs[0] = -1;
-+            cpsr &= ~CPSR_C;
-+        }
-+        cpsr_write(env, cpsr, CPSR_C);
-+        cpu_unlock();
-+        break;
-+    case 0xffff0fe0: /* __kernel_get_tls */
-+        env->regs[0] = env->cp15.c13_tls;
-+        break;
-+    default:
-+        return 1;
-+    }
-+    /* Jump back to the caller.  */
-+    addr = env->regs[14];
-+    if (addr & 1) {
-+        env->thumb = 1;
-+        addr &= ~1;
-+    }
-+    env->regs[15] = addr;
-+
-+    return 0;
-+}
-+
- void cpu_loop(CPUARMState *env)
- {
-     int trapnr;
-@@ -381,10 +425,8 @@
-                     }
-                 }
- 
--                if (n == ARM_NR_cacheflush) {
--                    arm_cache_flush(env->regs[0], env->regs[1]);
--                } else if (n == ARM_NR_semihosting
--                           || n == ARM_NR_thumb_semihosting) {
-+                if (n == ARM_NR_semihosting
-+                    || n == ARM_NR_thumb_semihosting) {
-                     env->regs[0] = do_arm_semihosting (env);
-                 } else if (n == 0 || n >= ARM_SYSCALL_BASE
-                            || (env->thumb && n == ARM_THUMB_SYSCALL)) {
-@@ -395,14 +437,34 @@
-                         n -= ARM_SYSCALL_BASE;
-                         env->eabi = 0;
-                     }
--                    env->regs[0] = do_syscall(env, 
--                                              n, 
--                                              env->regs[0],
--                                              env->regs[1],
--                                              env->regs[2],
--                                              env->regs[3],
--                                              env->regs[4],
--                                              env->regs[5]);
-+                    if ( n > ARM_NR_BASE) {
-+                        switch (n)
-+                          {
-+                          case ARM_NR_cacheflush:
-+                              arm_cache_flush(env->regs[0], env->regs[1]);
-+                              break;
-+#ifdef USE_NPTL
-+                          case ARM_NR_set_tls:
-+                              cpu_set_tls(env, env->regs[0]);
-+                              env->regs[0] = 0;
-+                              break;
-+#endif
-+                          default:
-+                              printf ("Error: Bad syscall: %x\n", n);
-+                              goto error;
-+                          }
-+                      }
-+                    else
-+                      {
-+                        env->regs[0] = do_syscall(env, 
-+                                                  n, 
-+                                                  env->regs[0],
-+                                                  env->regs[1],
-+                                                  env->regs[2],
-+                                                  env->regs[3],
-+                                                  env->regs[4],
-+                                                  env->regs[5]);
-+                      }
-                 } else {
-                     goto error;
-                 }
-@@ -441,6 +503,10 @@
-                   }
-             }
-             break;
-+        case EXCP_KERNEL_TRAP:
-+            if (do_kernel_trap(env))
-+              goto error;
-+            break;
-         default:
-         error:
-             fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n", 
-@@ -2047,6 +2113,10 @@
-     ts->heap_base = info->brk;
-     /* This will be filled in on the first SYS_HEAPINFO call.  */
-     ts->heap_limit = 0;
-+    /* Register the magic kernel code page.  The cpu will generate a
-+       special exception when it tries to execute code here.  We can't
-+       put real code here because it may be in use by the host kernel.  */
-+    page_set_flags(0xffff0000, 0xffff0fff, 0);
- #endif
- 
-     if (gdbstub_port) {
-Index: qemu/linux-user/qemu.h
-===================================================================
---- qemu.orig/linux-user/qemu.h	2007-06-29 10:47:39.000000000 +0000
-+++ qemu/linux-user/qemu.h	2007-06-29 10:47:58.000000000 +0000
-@@ -80,6 +80,9 @@
-     uint32_t heap_base;
-     uint32_t heap_limit;
- #endif
-+#ifdef USE_NPTL
-+    uint32_t *child_tidptr;
-+#endif
-     int used; /* non zero if used */
-     struct image_info *info;
-     uint8_t stack[0];
-Index: qemu/linux-user/syscall.c
-===================================================================
---- qemu.orig/linux-user/syscall.c	2007-06-29 10:47:39.000000000 +0000
-+++ qemu/linux-user/syscall.c	2007-06-29 10:53:47.000000000 +0000
-@@ -70,9 +70,18 @@
- #include <linux/kd.h>
- 
- #include "qemu.h"
-+#include "qemu_spinlock.h"
- 
- //#define DEBUG
- 
-+#ifdef USE_NPTL
-+#define CLONE_NPTL_FLAGS2 (CLONE_SETTLS | \
-+    CLONE_PARENT_SETTID | CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID)
-+#else
-+/* XXX: Hardcode the above values.  */
-+#define CLONE_NPTL_FLAGS2 0
-+#endif
-+
- #if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SPARC) \
-     || defined(TARGET_M68K) || defined(TARGET_SH4)
- /* 16 bit uid wrappers emulation */
-@@ -2119,20 +2128,38 @@
-    thread/process */
- #define NEW_STACK_SIZE 8192
- 
-+#ifdef USE_NPTL
-+static spinlock_t nptl_lock = SPIN_LOCK_UNLOCKED;
-+#endif
-+
- static int clone_func(void *arg)
- {
-     CPUState *env = arg;
-+#ifdef HAVE_NPTL
-+    /* Wait until the parent has finshed initializing the tls state.  */
-+    while (!spin_trylock(&nptl_lock))
-+        usleep(1);
-+    spin_unlock(&nptl_lock);
-+#endif
-     cpu_loop(env);
-     /* never exits */
-     return 0;
- }
- 
--int do_fork(CPUState *env, unsigned int flags, unsigned long newsp)
-+int do_fork(CPUState *env, unsigned int flags, unsigned long newsp,
-+            uint32_t *parent_tidptr, void *newtls,
-+            uint32_t *child_tidptr)
- {
-     int ret;
-     TaskState *ts;
-     uint8_t *new_stack;
-     CPUState *new_env;
-+#ifdef USE_NPTL
-+    unsigned int nptl_flags;
-+
-+    if (flags & CLONE_PARENT_SETTID)
-+        *parent_tidptr = gettid();
-+#endif
-     
-     if (flags & CLONE_VM) {
-         ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE);
-@@ -2199,16 +2226,67 @@
- #error unsupported target CPU
- #endif
-         new_env->opaque = ts;
-+#ifdef USE_NPTL
-+        nptl_flags = flags;
-+        flags &= ~CLONE_NPTL_FLAGS2;
-+
-+        if (nptl_flags & CLONE_CHILD_CLEARTID) {
-+            ts->child_tidptr = child_tidptr;
-+        }
-+
-+        if (nptl_flags & CLONE_SETTLS)
-+            cpu_set_tls (new_env, newtls);
-+
-+        /* Grab the global cpu lock so that the thread setup appears
-+           atomic.  */
-+        if (nptl_flags & CLONE_CHILD_SETTID)
-+            spin_lock(&nptl_lock);
-+
-+#else
-+        if (flags & CLONE_NPTL_FLAGS2)
-+            return -EINVAL;
-+#endif
-+
-+	 if (CLONE_VFORK & flags)
-+		flags ^= CLONE_VM;
- #ifdef __ia64__
-         ret = __clone2(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
- #else
- 	ret = clone(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
- #endif
-+#ifdef USE_NPTL
-+        if (ret != -1) {
-+            if (nptl_flags & CLONE_CHILD_SETTID)
-+                *child_tidptr = ret;
-+        }
-+
-+        /* Allow the child to continue.  */
-+        if (nptl_flags & CLONE_CHILD_SETTID)
-+            spin_unlock(&nptl_lock);
-+#endif
-     } else {
-         /* if no CLONE_VM, we consider it is a fork */
--        if ((flags & ~CSIGNAL) != 0)
-+        if ((flags & ~(CSIGNAL | CLONE_NPTL_FLAGS2)) != 0)
-             return -EINVAL;
-         ret = fork();
-+#ifdef USE_NPTL
-+        /* There is a race condition here.  The parent process could
-+           theoretically read the TID in the child process before the child
-+           tid is set.  This would require using either ptrace
-+           (not implemented) or having *_tidptr to point at a shared memory
-+           mapping.  We can't repeat the spinlock hack used above because
-+           the child process gets its own copy of the lock.  */
-+        if (ret == 0) {
-+            /* Child Process.  */
-+            if (flags & CLONE_CHILD_SETTID)
-+                *child_tidptr = gettid();
-+            ts = (TaskState *)env->opaque;
-+            if (flags & CLONE_CHILD_CLEARTID)
-+                ts->child_tidptr = child_tidptr;
-+            if (flags & CLONE_SETTLS)
-+                cpu_set_tls (env, newtls);
-+        }
-+#endif
-     }
-     return ret;
- }
-@@ -2485,7 +2563,7 @@
-         ret = do_brk(arg1);
-         break;
-     case TARGET_NR_fork:
--        ret = get_errno(do_fork(cpu_env, SIGCHLD, 0));
-+        ret = get_errno(do_fork(cpu_env, SIGCHLD, 0, NULL, NULL, NULL));
-         break;
- #ifdef TARGET_NR_waitpid
-     case TARGET_NR_waitpid:
-@@ -3649,7 +3727,8 @@
-         ret = get_errno(fsync(arg1));
-         break;
-     case TARGET_NR_clone:
--        ret = get_errno(do_fork(cpu_env, arg1, arg2));
-+        ret = get_errno(do_fork(cpu_env, arg1, arg2, (uint32_t *)arg3,
-+                        (void *)arg4, (uint32_t *)arg5));
-         break;
- #ifdef __NR_exit_group
-         /* new thread calls */
-@@ -4037,7 +4116,8 @@
- #endif
- #ifdef TARGET_NR_vfork
-     case TARGET_NR_vfork:
--        ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0));
-+        ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0,
-+                                NULL, NULL, NULL));
-         break;
- #endif
- #ifdef TARGET_NR_ugetrlimit
-@@ -4619,4 +4699,3 @@
- #endif
-     return ret;
- }
--
-Index: qemu/qemu_spinlock.h
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ qemu/qemu_spinlock.h	2007-06-29 10:47:58.000000000 +0000
-@@ -0,0 +1,181 @@
-+/*
-+ * Atomic operation helper include
-+ * 
-+ *  Copyright (c) 2005 Fabrice Bellard
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-+ */
-+#ifndef QEMU_SPINLOCK_H
-+#define QEMU_SPINLOCK_H
-+
-+#ifdef __powerpc__
-+static inline int testandset (int *p)
-+{
-+    int ret;
-+    __asm__ __volatile__ (
-+                          "0:    lwarx %0,0,%1\n"
-+                          "      xor. %0,%3,%0\n"
-+                          "      bne 1f\n"
-+                          "      stwcx. %2,0,%1\n"
-+                          "      bne- 0b\n"
-+                          "1:    "
-+                          : "=&r" (ret)
-+                          : "r" (p), "r" (1), "r" (0)
-+                          : "cr0", "memory");
-+    return ret;
-+}
-+#endif
-+
-+#ifdef __i386__
-+static inline int testandset (int *p)
-+{
-+    long int readval = 0;
-+    
-+    __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
-+                          : "+m" (*p), "+a" (readval)
-+                          : "r" (1)
-+                          : "cc");
-+    return readval;
-+}
-+#endif
-+
-+#ifdef __x86_64__
-+static inline int testandset (int *p)
-+{
-+    long int readval = 0;
-+    
-+    __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
-+                          : "+m" (*p), "+a" (readval)
-+                          : "r" (1)
-+                          : "cc");
-+    return readval;
-+}
-+#endif
-+
-+#ifdef __s390__
-+static inline int testandset (int *p)
-+{
-+    int ret;
-+
-+    __asm__ __volatile__ ("0: cs    %0,%1,0(%2)\n"
-+			  "   jl    0b"
-+			  : "=&d" (ret)
-+			  : "r" (1), "a" (p), "0" (*p) 
-+			  : "cc", "memory" );
-+    return ret;
-+}
-+#endif
-+
-+#ifdef __alpha__
-+static inline int testandset (int *p)
-+{
-+    int ret;
-+    unsigned long one;
-+
-+    __asm__ __volatile__ ("0:	mov 1,%2\n"
-+			  "	ldl_l %0,%1\n"
-+			  "	stl_c %2,%1\n"
-+			  "	beq %2,1f\n"
-+			  ".subsection 2\n"
-+			  "1:	br 0b\n"
-+			  ".previous"
-+			  : "=r" (ret), "=m" (*p), "=r" (one)
-+			  : "m" (*p));
-+    return ret;
-+}
-+#endif
-+
-+#ifdef __sparc__
-+static inline int testandset (int *p)
-+{
-+	int ret;
-+
-+	__asm__ __volatile__("ldstub	[%1], %0"
-+			     : "=r" (ret)
-+			     : "r" (p)
-+			     : "memory");
-+
-+	return (ret ? 1 : 0);
-+}
-+#endif
-+
-+#ifdef __arm__
-+static inline int testandset (int *spinlock)
-+{
-+    register unsigned int ret;
-+    __asm__ __volatile__("swp %0, %1, [%2]"
-+                         : "=r"(ret)
-+                         : "0"(1), "r"(spinlock));
-+    
-+    return ret;
-+}
-+#endif
-+
-+#ifdef __mc68000
-+static inline int testandset (int *p)
-+{
-+    char ret;
-+    __asm__ __volatile__("tas %1; sne %0"
-+                         : "=r" (ret)
-+                         : "m" (p)
-+                         : "cc","memory");
-+    return ret;
-+}
-+#endif
-+
-+#ifdef __ia64
-+#include <ia64intrin.h>
-+
-+static inline int testandset (int *p)
-+{
-+    return __sync_lock_test_and_set (p, 1);
-+}
-+#endif
-+
-+typedef int spinlock_t;
-+
-+#define SPIN_LOCK_UNLOCKED 0
-+
-+#if defined(CONFIG_USER_ONLY)
-+static inline void spin_lock(spinlock_t *lock)
-+{
-+    while (testandset(lock));
-+}
-+
-+static inline void spin_unlock(spinlock_t *lock)
-+{
-+    *lock = 0;
-+}
-+
-+static inline int spin_trylock(spinlock_t *lock)
-+{
-+    return !testandset(lock);
-+}
-+#else
-+static inline void spin_lock(spinlock_t *lock)
-+{
-+}
-+
-+static inline void spin_unlock(spinlock_t *lock)
-+{
-+}
-+
-+static inline int spin_trylock(spinlock_t *lock)
-+{
-+    return 1;
-+}
-+#endif
-+
-+#endif
-Index: qemu/target-arm/cpu.h
-===================================================================
---- qemu.orig/target-arm/cpu.h	2007-06-29 10:47:39.000000000 +0000
-+++ qemu/target-arm/cpu.h	2007-06-29 10:47:58.000000000 +0000
-@@ -37,6 +37,7 @@
- #define EXCP_IRQ             5
- #define EXCP_FIQ             6
- #define EXCP_BKPT            7
-+#define EXCP_KERNEL_TRAP     8   /* Jumped to kernel code page.  */
- 
- typedef void ARMWriteCPFunc(void *opaque, int cp_info,
-                             int srcreg, int operand, uint32_t value);
-@@ -97,6 +98,7 @@
-         uint32_t c9_data;
-         uint32_t c13_fcse; /* FCSE PID.  */
-         uint32_t c13_context; /* Context ID.  */
-+        uint32_t c13_tls; /* Context ID.  */
-         uint32_t c15_cpar; /* XScale Coprocessor Access Register */
-     } cp15;
- 
-@@ -169,6 +171,15 @@
- int cpu_arm_signal_handler(int host_signum, void *pinfo, 
-                            void *puc);
- 
-+void cpu_lock(void);
-+void cpu_unlock(void);
-+#if defined(USE_NPTL)
-+static inline void cpu_set_tls(CPUARMState *env, void *newtls)
-+{
-+  env->cp15.c13_tls = (uint32_t)(long)newtls;
-+}
-+#endif
-+
- #define CPSR_M (0x1f)
- #define CPSR_T (1 << 5)
- #define CPSR_F (1 << 6)
-@@ -180,7 +191,11 @@
- #define CPSR_J (1 << 24)
- #define CPSR_IT_0_1 (3 << 25)
- #define CPSR_Q (1 << 27)
--#define CPSR_NZCV (0xf << 28)
-+#define CPSR_V (1 << 28)
-+#define CPSR_C (1 << 29)
-+#define CPSR_Z (1 << 30)
-+#define CPSR_N (1 << 31)
-+#define CPSR_NZCV (CPSR_N | CPSR_Z | CPSR_C | CPSR_V)
- 
- #define CACHED_CPSR_BITS (CPSR_T | CPSR_Q | CPSR_NZCV)
- /* Return the current CPSR value.  */
-Index: qemu/target-arm/exec.h
-===================================================================
---- qemu.orig/target-arm/exec.h	2007-06-29 10:47:39.000000000 +0000
-+++ qemu/target-arm/exec.h	2007-06-29 10:47:58.000000000 +0000
-@@ -68,8 +68,6 @@
- 
- /* In op_helper.c */
- 
--void cpu_lock(void);
--void cpu_unlock(void);
- void helper_set_cp(CPUState *, uint32_t, uint32_t);
- uint32_t helper_get_cp(CPUState *, uint32_t);
- void helper_set_cp15(CPUState *, uint32_t, uint32_t);
-Index: qemu/target-arm/op.c
-===================================================================
---- qemu.orig/target-arm/op.c	2007-06-29 10:47:39.000000000 +0000
-+++ qemu/target-arm/op.c	2007-06-29 10:47:58.000000000 +0000
-@@ -891,6 +891,12 @@
-     cpu_loop_exit();
- }
- 
-+void OPPROTO op_kernel_trap(void)
-+{
-+    env->exception_index = EXCP_KERNEL_TRAP;
-+    cpu_loop_exit();
-+}
-+
- /* VFP support.  We follow the convention used for VFP instrunctions:
-    Single precition routines have a "s" suffix, double precision a
-    "d" suffix.  */
-Index: qemu/target-arm/op_mem.h
-===================================================================
---- qemu.orig/target-arm/op_mem.h	2007-06-29 10:47:39.000000000 +0000
-+++ qemu/target-arm/op_mem.h	2007-06-29 10:47:58.000000000 +0000
-@@ -1,5 +1,6 @@
- /* ARM memory operations.  */
- 
-+void helper_ld(uint32_t);
- /* Load from address T1 into T0.  */
- #define MEM_LD_OP(name) \
- void OPPROTO glue(op_ld##name,MEMSUFFIX)(void) \
-Index: qemu/target-arm/translate.c
-===================================================================
---- qemu.orig/target-arm/translate.c	2007-06-29 10:47:39.000000000 +0000
-+++ qemu/target-arm/translate.c	2007-06-29 10:47:58.000000000 +0000
-@@ -3548,6 +3548,15 @@
-     nb_gen_labels = 0;
-     lj = -1;
-     do {
-+#ifdef CONFIG_USER_ONLY
-+        /* Intercept jump to the magic kernel page.  */
-+        if (dc->pc > 0xffff0000) {
-+            gen_op_kernel_trap();
-+            dc->is_jmp = DISAS_UPDATE;
-+            break;
-+        }
-+#endif
-+
-         if (env->nb_breakpoints > 0) {
-             for(j = 0; j < env->nb_breakpoints; j++) {
-                 if (env->breakpoints[j] == dc->pc) {
diff --git a/packages/qemu/files/qemu-amd64-32b-mapping-0.9.0.patch b/packages/qemu/files/qemu-amd64-32b-mapping-0.9.0.patch
deleted file mode 100644
index d9303e3464..0000000000
--- a/packages/qemu/files/qemu-amd64-32b-mapping-0.9.0.patch
+++ /dev/null
@@ -1,31 +0,0 @@
---- qemu.orig/linux-user/mmap.c
-+++ qemu/linux-user/mmap.c
-@@ -29,6 +29,10 @@
- 
- //#define DEBUG_MMAP
- 
-+#ifndef MAP_32BIT
-+#define MAP_32BIT 0
-+#endif
-+
- /* NOTE: all the constants are the HOST ones, but addresses are target. */
- int target_mprotect(target_ulong start, target_ulong len, int prot)
- {
-@@ -234,7 +238,7 @@
-             host_offset = offset & qemu_host_page_mask;
-             host_len = len + offset - host_offset;
-             host_start = (long)mmap(real_start ? g2h(real_start) : NULL,
--                                    host_len, prot, flags, fd, host_offset);
-+                                    host_len, prot, (flags | MAP_32BIT), fd, host_offset);
-             if (host_start == -1)
-                 return host_start;
-             /* update start so that it points to the file position at 'offset' */
-@@ -388,7 +392,7 @@
-     int prot;
- 
-     /* XXX: use 5 args syscall */
--    new_addr = (long)mremap(g2h(old_addr), old_size, new_size, flags);
-+    new_addr = (long)mremap(g2h(old_addr), old_size, new_size, (flags | MAP_32BIT));
-     if (new_addr == -1)
-         return new_addr;
-     new_addr = h2g(new_addr);
diff --git a/packages/qemu/files/qemu-pci-irq-sharing.patch b/packages/qemu/files/qemu-pci-irq-sharing.patch
deleted file mode 100644
index c47e89895f..0000000000
--- a/packages/qemu/files/qemu-pci-irq-sharing.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-diff -pNaur qemu-cvs-ts-orig/hw/pci.c qemu-cvs-ts/hw/pci.c
---- qemu-cvs-ts-orig/hw/pci.c	2006-08-17 10:46:34.000000000 +0000
-+++ qemu-cvs-ts/hw/pci.c	2006-09-23 17:02:41.000000000 +0000
-@@ -34,6 +34,7 @@ struct PCIBus {
-     SetIRQFunc *low_set_irq;
-     void *irq_opaque;
-     PCIDevice *devices[256];
-+    int irq_count[4];
- };
- 
- static void pci_update_mappings(PCIDevice *d);
-@@ -49,6 +50,7 @@ PCIBus *pci_register_bus(pci_set_irq_fn 
-     bus->set_irq = set_irq;
-     bus->irq_opaque = pic;
-     bus->devfn_min = devfn_min;
-+    memset(bus->irq_count, 0, sizeof(bus->irq_count));
-     first_bus = bus;
-     return bus;
- }
-@@ -100,6 +102,7 @@ PCIDevice *pci_register_device(PCIBus *b
-     pci_dev->bus = bus;
-     pci_dev->devfn = devfn;
-     pstrcpy(pci_dev->name, sizeof(pci_dev->name), name);
-+    memset(pci_dev->irq_state, 0, sizeof(pci_dev->irq_state));
- 
-     if (!config_read)
-         config_read = pci_default_read_config;
-@@ -404,7 +407,10 @@ uint32_t pci_data_read(void *opaque, uin
- void pci_set_irq(PCIDevice *pci_dev, int irq_num, int level)
- {
-     PCIBus *bus = pci_dev->bus;
--    bus->set_irq(pci_dev, bus->irq_opaque, irq_num, level);
-+    bus->irq_count[irq_num] += level - pci_dev->irq_state[irq_num];
-+    pci_dev->irq_state[irq_num] = level;
-+    bus->set_irq(pci_dev, bus->irq_opaque,
-+                 irq_num, !!bus->irq_count[irq_num]);
- }
- 
- /***********************************************************/
-diff -pNaur qemu-cvs-ts-orig/vl.h qemu-cvs-ts/vl.h
---- qemu-cvs-ts-orig/vl.h	2006-09-18 01:15:29.000000000 +0000
-+++ qemu-cvs-ts/vl.h	2006-09-23 17:15:21.000000000 +0000
-@@ -733,6 +733,9 @@ struct PCIDevice {
-     PCIConfigWriteFunc *config_write;
-     /* ??? This is a PC-specific hack, and should be removed.  */
-     int irq_index;
-+
-+    /* remember last irq levels */
-+    int irq_state[4];
- };
- 
- PCIDevice *pci_register_device(PCIBus *bus, const char *name,
diff --git a/packages/qemu/files/qemu-sdl-cursor.patch b/packages/qemu/files/qemu-sdl-cursor.patch
deleted file mode 100644
index bd6a51a1f5..0000000000
--- a/packages/qemu/files/qemu-sdl-cursor.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-Index: qemu/sdl.c
-===================================================================
---- qemu.orig/sdl.c	2006-10-02 17:06:12.000000000 +0100
-+++ qemu/sdl.c	2006-10-02 17:06:59.000000000 +0100
-@@ -287,7 +287,7 @@
- {
-     if (kbd_mouse_is_absolute()) {
-         SDL_ShowCursor(1);
--        SDL_SetCursor(sdl_cursor_hidden);
-+        /* SDL_SetCursor(sdl_cursor_hidden); */
-     } else {
-         SDL_ShowCursor(0);
-     }
diff --git a/packages/qemu/files/qemu-usb-wacom-0.8.2.patch b/packages/qemu/files/qemu-usb-wacom-0.8.2.patch
deleted file mode 100644
index 33a6db3f18..0000000000
--- a/packages/qemu/files/qemu-usb-wacom-0.8.2.patch
+++ /dev/null
@@ -1,445 +0,0 @@
-diff -pNaur qemu-cvs-ts-orig/hw/usb-wacom.c qemu-cvs-ts/hw/usb-wacom.c
---- qemu-cvs-ts-orig/hw/usb-wacom.c	1970-01-01 01:00:00.000000000 +0100
-+++ qemu-cvs-ts/hw/usb-wacom.c	2006-09-22 20:44:26.000000000 +0200
-@@ -0,0 +1,408 @@
-+/*
-+ * Wacom PenPartner USB tablet emulation.
-+ *
-+ * Copyright (c) 2006 Openedhand Ltd.
-+ *
-+ * Author: Andrzej Zaborowski <balrog@zabor.org>
-+ *
-+ * Based on hw/usb-hid.c:
-+ * Copyright (c) 2005 Fabrice Bellard
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a copy
-+ * of this software and associated documentation files (the "Software"), to deal
-+ * in the Software without restriction, including without limitation the rights
-+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-+ * copies of the Software, and to permit persons to whom the Software is
-+ * furnished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice shall be included in
-+ * all copies or substantial portions of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-+ * THE SOFTWARE.
-+ */
-+#include "vl.h"
-+
-+/* Interface requests */
-+#define WACOM_GET_REPORT	0x2101
-+#define WACOM_SET_REPORT	0x2109
-+
-+/* HID interface requests */
-+#define HID_GET_REPORT		0xa101
-+#define HID_GET_IDLE		0xa102
-+#define HID_GET_PROTOCOL	0xa103
-+#define HID_SET_IDLE		0x210a
-+#define HID_SET_PROTOCOL	0x210b
-+
-+#define WACOM_MODE_HID		1
-+#define WACOM_MODE_WACOM	2
-+
-+typedef struct USBWacomState {
-+    USBDevice dev;
-+    int dx, dy, dz, buttons_state;
-+    int x, y;
-+    int mouse_grabbed;
-+    int mode;
-+} USBWacomState;
-+
-+static const uint8_t qemu_wacom_dev_descriptor[] = {
-+    0x12,	/*  u8 bLength; */
-+    0x01,	/*  u8 bDescriptorType; Device */
-+    0x10, 0x10,	/*  u16 bcdUSB; v1.10 */
-+
-+    0x00,	/*  u8  bDeviceClass; */
-+    0x00,	/*  u8  bDeviceSubClass; */
-+    0x00,	/*  u8  bDeviceProtocol; [ low/full speeds only ] */
-+    0x08,	/*  u8  bMaxPacketSize0; 8 Bytes */
-+
-+    0x6a, 0x05,	/*  u16 idVendor; */
-+    0x00, 0x00,	/*  u16 idProduct; */
-+    0x10, 0x42,	/*  u16 bcdDevice */
-+
-+    0x01,	/*  u8  iManufacturer; */
-+    0x02,	/*  u8  iProduct; */
-+    0x00,	/*  u8  iSerialNumber; */
-+    0x01,	/*  u8  bNumConfigurations; */
-+};
-+
-+static const uint8_t qemu_wacom_config_descriptor[] = {
-+    /* one configuration */
-+    0x09,	/*  u8  bLength; */
-+    0x02,	/*  u8  bDescriptorType; Configuration */
-+    0x22, 0x00,	/*  u16 wTotalLength; */
-+    0x01,	/*  u8  bNumInterfaces; (1) */
-+    0x01,	/*  u8  bConfigurationValue; */
-+    0x00,	/*  u8  iConfiguration; */
-+    0x80,	/*  u8  bmAttributes; 
-+				 Bit 7: must be set,
-+				     6: Self-powered,
-+				     5: Remote wakeup,
-+				     4..0: resvd */
-+    40,		/*  u8  MaxPower; */
-+
-+    /* one interface */
-+    0x09,	/*  u8  if_bLength; */
-+    0x04,	/*  u8  if_bDescriptorType; Interface */
-+    0x00,	/*  u8  if_bInterfaceNumber; */
-+    0x00,	/*  u8  if_bAlternateSetting; */
-+    0x01,	/*  u8  if_bNumEndpoints; */
-+    0x03,	/*  u8  if_bInterfaceClass; HID */
-+    0x01,	/*  u8  if_bInterfaceSubClass; Boot */
-+    0x02,	/*  u8  if_bInterfaceProtocol; [usb1.1 or single tt] */
-+    0x00,	/*  u8  if_iInterface; */
-+
-+    /* HID descriptor */
-+    0x09,	/*  u8  bLength; */
-+    0x21,	/*  u8  bDescriptorType; */
-+    0x01, 0x10,	/*  u16 HID_class */
-+    0x00,	/*  u8  country_code */
-+    0x01,	/*  u8  num_descriptors */
-+    0x22,	/*  u8  type; Report */
-+    0x6e, 0x00,	/*  u16 len */
-+
-+    /* one endpoint (status change endpoint) */
-+    0x07,	/*  u8  ep_bLength; */
-+    0x05,	/*  u8  ep_bDescriptorType; Endpoint */
-+    0x81,	/*  u8  ep_bEndpointAddress; IN Endpoint 1 */
-+    0x03,	/*  u8  ep_bmAttributes; Interrupt */
-+    0x08, 0x00,	/*  u16 ep_wMaxPacketSize; */
-+    0x0a,	/*  u8  ep_bInterval; */
-+};
-+
-+static void usb_mouse_event(void *opaque,
-+                            int dx1, int dy1, int dz1, int buttons_state)
-+{
-+    USBWacomState *s = opaque;
-+
-+    s->dx += dx1;
-+    s->dy += dy1;
-+    s->dz += dz1;
-+    s->buttons_state = buttons_state;
-+}
-+
-+static void usb_wacom_event(void *opaque,
-+                            int x, int y, int dz, int buttons_state)
-+{
-+    USBWacomState *s = opaque;
-+
-+    s->x = x;
-+    s->y = y;
-+    s->dz += dz;
-+    s->buttons_state = buttons_state;
-+}
-+
-+static inline int int_clamp(int val, int vmin, int vmax)
-+{
-+    if (val < vmin)
-+        return vmin;
-+    else if (val > vmax)
-+        return vmax;
-+    else
-+        return val;
-+}
-+
-+static int usb_mouse_poll(USBWacomState *s, uint8_t *buf, int len)
-+{
-+    int dx, dy, dz, b, l;
-+
-+    if (!s->mouse_grabbed) {
-+        qemu_add_mouse_event_handler(usb_mouse_event, s, 1);
-+        s->mouse_grabbed = 1;
-+    }
-+
-+    dx = int_clamp(s->dx, -128, 127);
-+    dy = int_clamp(s->dy, -128, 127);
-+    dz = int_clamp(s->dz, -128, 127);
-+
-+    s->dx -= dx;
-+    s->dy -= dy;
-+    s->dz -= dz;
-+
-+    b = 0;
-+    if (s->buttons_state & MOUSE_EVENT_LBUTTON)
-+        b |= 0x01;
-+    if (s->buttons_state & MOUSE_EVENT_RBUTTON)
-+        b |= 0x02;
-+    if (s->buttons_state & MOUSE_EVENT_MBUTTON)
-+        b |= 0x04;
-+
-+    buf[0] = b;
-+    buf[1] = dx;
-+    buf[2] = dy;
-+    l = 3;
-+    if (len >= 4) {
-+        buf[3] = dz;
-+        l = 4;
-+    }
-+    return l;
-+}
-+
-+static int usb_wacom_poll(USBWacomState *s, uint8_t *buf, int len)
-+{
-+    int b;
-+
-+    if (!s->mouse_grabbed) {
-+        qemu_add_mouse_event_handler(usb_wacom_event, s, 1);
-+        s->mouse_grabbed = 1;
-+    }
-+
-+    b = 0;
-+    if (s->buttons_state & MOUSE_EVENT_LBUTTON)
-+        b |= 0x01;
-+    if (s->buttons_state & MOUSE_EVENT_RBUTTON)
-+        b |= 0x02;
-+    if (s->buttons_state & MOUSE_EVENT_MBUTTON)
-+        b |= 0x04;
-+
-+    if (len < 7)
-+        return 0;
-+
-+    buf[0] = s->mode;
-+    buf[1] = s->x & 0xff;
-+    buf[2] = s->x >> 8;
-+    buf[3] = s->y & 0xff;
-+    buf[4] = s->y >> 8;
-+    if (b) {
-+        buf[5] = 0x40;
-+        buf[6] = 0;
-+    } else {
-+        buf[5] = 0x00;
-+        buf[6] = (unsigned char) -120;
-+    }
-+
-+    return 7;
-+}
-+
-+static void usb_wacom_handle_reset(USBDevice *dev)
-+{
-+    USBWacomState *s = (USBWacomState *) dev;
-+
-+    s->dx = 0;
-+    s->dy = 0;
-+    s->dz = 0;
-+    s->x = 0;
-+    s->y = 0;
-+    s->buttons_state = 0;
-+    s->mode = WACOM_MODE_HID;
-+}
-+
-+static int usb_wacom_handle_control(USBDevice *dev, int request, int value,
-+                                    int index, int length, uint8_t *data)
-+{
-+    USBWacomState *s = (USBWacomState *) dev;
-+    int ret = 0;
-+
-+    switch (request) {
-+    case DeviceRequest | USB_REQ_GET_STATUS:
-+        data[0] = (1 << USB_DEVICE_SELF_POWERED) |
-+            (dev->remote_wakeup << USB_DEVICE_REMOTE_WAKEUP);
-+        data[1] = 0x00;
-+        ret = 2;
-+        break;
-+    case DeviceOutRequest | USB_REQ_CLEAR_FEATURE:
-+        if (value == USB_DEVICE_REMOTE_WAKEUP) {
-+            dev->remote_wakeup = 0;
-+        } else {
-+            goto fail;
-+        }
-+        ret = 0;
-+        break;
-+    case DeviceOutRequest | USB_REQ_SET_FEATURE:
-+        if (value == USB_DEVICE_REMOTE_WAKEUP) {
-+            dev->remote_wakeup = 1;
-+        } else {
-+            goto fail;
-+        }
-+        ret = 0;
-+        break;
-+    case DeviceOutRequest | USB_REQ_SET_ADDRESS:
-+        dev->addr = value;
-+        ret = 0;
-+        break;
-+    case DeviceRequest | USB_REQ_GET_DESCRIPTOR:
-+        switch (value >> 8) {
-+        case USB_DT_DEVICE:
-+            memcpy(data, qemu_wacom_dev_descriptor, 
-+                   sizeof(qemu_wacom_dev_descriptor));
-+            ret = sizeof(qemu_wacom_dev_descriptor);
-+            break;
-+        case USB_DT_CONFIG:
-+       	    memcpy(data, qemu_wacom_config_descriptor, 
-+                   sizeof(qemu_wacom_config_descriptor));
-+            ret = sizeof(qemu_wacom_config_descriptor);
-+            break;
-+        case USB_DT_STRING:
-+            switch (value & 0xff) {
-+            case 0:
-+                /* language ids */
-+                data[0] = 4;
-+                data[1] = 3;
-+                data[2] = 0x09;
-+                data[3] = 0x04;
-+                ret = 4;
-+                break;
-+            case 1:
-+                /* serial number */
-+                ret = set_usb_string(data, "1");
-+                break;
-+            case 2:
-+		ret = set_usb_string(data, "Wacom PenPartner");
-+                break;
-+            case 3:
-+                /* vendor description */
-+                ret = set_usb_string(data, "QEMU " QEMU_VERSION);
-+                break;
-+            case 4:
-+                ret = set_usb_string(data, "Wacom Tablet");
-+                break;
-+            case 5:
-+                ret = set_usb_string(data, "Endpoint1 Interrupt Pipe");
-+                break;
-+            default:
-+                goto fail;
-+            }
-+            break;
-+        default:
-+            goto fail;
-+        }
-+        break;
-+    case DeviceRequest | USB_REQ_GET_CONFIGURATION:
-+        data[0] = 1;
-+        ret = 1;
-+        break;
-+    case DeviceOutRequest | USB_REQ_SET_CONFIGURATION:
-+        ret = 0;
-+        break;
-+    case DeviceRequest | USB_REQ_GET_INTERFACE:
-+        data[0] = 0;
-+        ret = 1;
-+        break;
-+    case DeviceOutRequest | USB_REQ_SET_INTERFACE:
-+        ret = 0;
-+        break;
-+    case WACOM_SET_REPORT:
-+        qemu_add_mouse_event_handler(NULL, NULL, 0);
-+	s->mouse_grabbed = 0;
-+        s->mode = data[0];
-+        ret = 0;
-+        break;
-+    case WACOM_GET_REPORT:
-+        data[0] = 0;
-+        data[1] = s->mode;
-+        ret = 2;
-+        break;
-+    /* USB HID requests */
-+    case HID_GET_REPORT:
-+        if (s->mode == WACOM_MODE_HID)
-+            ret = usb_mouse_poll(s, data, length);
-+        else if (s->mode == WACOM_MODE_WACOM)
-+            ret = usb_wacom_poll(s, data, length);
-+        break;
-+    case HID_SET_IDLE:
-+        ret = 0;
-+        break;
-+    default:
-+    fail:
-+        ret = USB_RET_STALL;
-+        break;
-+    }
-+    return ret;
-+}
-+
-+static int usb_wacom_handle_data(USBDevice *dev, int pid, 
-+                                 uint8_t devep, uint8_t *data, int len)
-+{
-+    USBWacomState *s = (USBWacomState *) dev;
-+    int ret = 0;
-+
-+    switch (pid) {
-+    case USB_TOKEN_IN:
-+        if (devep == 1) {
-+            if (s->mode == WACOM_MODE_HID)
-+                ret = usb_mouse_poll(s, data, len);
-+            else if (s->mode == WACOM_MODE_WACOM)
-+                ret = usb_wacom_poll(s, data, len);
-+            break;
-+        }
-+        /* Fall through.  */
-+    case USB_TOKEN_OUT:
-+    default:
-+        ret = USB_RET_STALL;
-+        break;
-+    }
-+    return ret;
-+}
-+
-+static void usb_wacom_handle_destroy(USBDevice *dev)
-+{
-+    USBWacomState *s = (USBWacomState *) dev;
-+
-+    qemu_add_mouse_event_handler(NULL, NULL, 0);
-+    qemu_free(s);
-+}
-+
-+USBDevice *usb_wacom_init(void)
-+{
-+    USBWacomState *s;
-+
-+    s = qemu_mallocz(sizeof(USBWacomState));
-+    if (!s)
-+        return NULL;
-+    s->dev.speed = USB_SPEED_FULL;
-+    s->dev.handle_packet = usb_generic_handle_packet;
-+
-+    s->dev.handle_reset = usb_wacom_handle_reset;
-+    s->dev.handle_control = usb_wacom_handle_control;
-+    s->dev.handle_data = usb_wacom_handle_data;
-+    s->dev.handle_destroy = usb_wacom_handle_destroy;
-+
-+    pstrcpy(s->dev.devname, sizeof(s->dev.devname),
-+            "QEMU PenPartner Tablet");
-+
-+    return (USBDevice *) s;
-+}
-diff -pNaur qemu-cvs-ts-orig/hw/usb.h qemu-cvs-ts/hw/usb.h
---- qemu-cvs-ts-orig/hw/usb.h	2006-08-12 03:04:27.000000000 +0200
-+++ qemu-cvs-ts/hw/usb.h	2006-09-21 01:40:40.000000000 +0200
-@@ -218,3 +218,6 @@ USBDevice *usb_tablet_init(void);
- 
- /* usb-msd.c */
- USBDevice *usb_msd_init(const char *filename);
-+
-+/* usb-wacom.c */
-+USBDevice *usb_wacom_init(void);
-diff -pNaur qemu-cvs-ts-orig/vl.c qemu-cvs-ts/vl.c
---- qemu-cvs-ts-orig/vl.c	2006-09-10 16:39:54.000000000 +0200
-+++ qemu-cvs-ts/vl.c	2006-09-21 01:45:16.000000000 +0200
-@@ -3765,6 +3765,8 @@ static int usb_device_add(const char *de
- 	dev = usb_tablet_init();
-     } else if (strstart(devname, "disk:", &p)) {
-         dev = usb_msd_init(p);
-+    } else if (!strcmp(devname, "wacom-tablet")) {
-+        dev = usb_wacom_init();
-     } else {
-         return -1;
-     }
-diff -pNaur qemu-cvs-ts-orig/Makefile.target qemu-cvs-ts/Makefile.target
---- qemu-cvs-ts-orig/Makefile.target	2006-09-18 03:15:29.000000000 +0200
-+++ qemu-cvs-ts/Makefile.target	2006-09-21 02:32:19.000000000 +0200
-@@ -330,6 +330,7 @@ VL_OBJS+= scsi-disk.o cdrom.o lsi53c895a
- 
- # USB layer
- VL_OBJS+= usb.o usb-hub.o usb-linux.o usb-hid.o usb-ohci.o usb-msd.o
-+VL_OBJS+= usb-wacom.o
- 
- # PCI network cards
- VL_OBJS+= ne2000.o rtl8139.o pcnet.o
diff --git a/packages/qemu/files/qemu-usb-wacom-buttons.patch b/packages/qemu/files/qemu-usb-wacom-buttons.patch
deleted file mode 100644
index ee24c15780..0000000000
--- a/packages/qemu/files/qemu-usb-wacom-buttons.patch
+++ /dev/null
@@ -1,23 +0,0 @@
---- qemu-cvs-ts-orig/hw/usb-wacom.c	2006-09-29 22:53:06.000000000 +0000
-+++ qemu-cvs-ts/hw/usb-wacom.c	2006-09-29 22:44:14.000000000 +0000
-@@ -203,19 +203,18 @@ static int usb_wacom_poll(USBWacomState 
-         return 0;
- 
-     buf[0] = s->mode;
-+    buf[5] = 0x00;
-     if (b) {
-         buf[1] = s->x & 0xff;
-         buf[2] = s->x >> 8;
-         buf[3] = s->y & 0xff;
-         buf[4] = s->y >> 8;
--        buf[5] = 0x40;
-         buf[6] = 0;
-     } else {
-         buf[1] = 0;
-         buf[2] = 0;
-         buf[3] = 0;
-         buf[4] = 0;
--        buf[5] = 0x00;
-         buf[6] = (unsigned char) -127;
-     }
- 
diff --git a/packages/qemu/files/qemu-usb-wacom-pressure.patch b/packages/qemu/files/qemu-usb-wacom-pressure.patch
deleted file mode 100644
index 668d50d5f2..0000000000
--- a/packages/qemu/files/qemu-usb-wacom-pressure.patch
+++ /dev/null
@@ -1,28 +0,0 @@
---- qemu-cvs-ts-orig/hw/usb-wacom.c	2006-09-29 17:27:43.000000000 +0000
-+++ qemu-cvs-ts/hw/usb-wacom.c	2006-09-29 17:48:13.000000000 +0000
-@@ -203,16 +203,20 @@ static int usb_wacom_poll(USBWacomState 
-         return 0;
- 
-     buf[0] = s->mode;
--    buf[1] = s->x & 0xff;
--    buf[2] = s->x >> 8;
--    buf[3] = s->y & 0xff;
--    buf[4] = s->y >> 8;
-     if (b) {
-+        buf[1] = s->x & 0xff;
-+        buf[2] = s->x >> 8;
-+        buf[3] = s->y & 0xff;
-+        buf[4] = s->y >> 8;
-         buf[5] = 0x40;
-         buf[6] = 0;
-     } else {
-+        buf[1] = 0;
-+        buf[2] = 0;
-+        buf[3] = 0;
-+        buf[4] = 0;
-         buf[5] = 0x00;
--        buf[6] = (unsigned char) -120;
-+        buf[6] = (unsigned char) -127;
-     }
- 
-     return 7;
diff --git a/packages/qemu/files/workaround_bad_futex_headers.patch b/packages/qemu/files/workaround_bad_futex_headers.patch
deleted file mode 100644
index cc122ebdba..0000000000
--- a/packages/qemu/files/workaround_bad_futex_headers.patch
+++ /dev/null
@@ -1,25 +0,0 @@
----
- linux-user/syscall.c |   10 +++++++++-
- 1 file changed, 9 insertions(+), 1 deletion(-)
-
-Index: qemu/linux-user/syscall.c
-===================================================================
---- qemu.orig/linux-user/syscall.c	2007-08-09 20:28:06.000000000 +0100
-+++ qemu/linux-user/syscall.c	2007-08-09 20:28:41.000000000 +0100
-@@ -61,7 +61,15 @@
- #define tchars host_tchars /* same as target */
- #define ltchars host_ltchars /* same as target */
- 
--#include <linux/futex.h>
-+#define FUTEX_WAIT              0
-+#define FUTEX_WAKE              1
-+#define FUTEX_FD                2
-+#define FUTEX_REQUEUE           3
-+#define FUTEX_CMP_REQUEUE       4
-+#define FUTEX_WAKE_OP           5
-+#define FUTEX_LOCK_PI           6
-+#define FUTEX_UNLOCK_PI         7
-+
- #include <linux/termios.h>
- #include <linux/unistd.h>
- #include <linux/utsname.h>
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/.mtn2git_empty b/packages/qemu/qemu-0.9.0+cvs20070613/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/02_snapshot_use_tmpdir.patch b/packages/qemu/qemu-0.9.0+cvs20070613/02_snapshot_use_tmpdir.patch
new file mode 100644
index 0000000000..bd955b6db3
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/02_snapshot_use_tmpdir.patch
@@ -0,0 +1,23 @@
+#DPATCHLEVEL=0
+---
+# block.c |    6 +++++-
+# 1 file changed, 5 insertions(+), 1 deletion(-)
+#
+Index: block.c
+===================================================================
+--- block.c.orig	2007-06-13 11:51:52.000000000 +0100
++++ block.c	2007-06-13 11:51:53.000000000 +0100
+@@ -188,8 +188,12 @@ void get_tmp_filename(char *filename, in
+ void get_tmp_filename(char *filename, int size)
+ {
+     int fd;
++    char *tmpdir;
+     /* XXX: race condition possible */
+-    pstrcpy(filename, size, "/tmp/vl.XXXXXX");
++    tmpdir = getenv("TMPDIR");
++    if (!tmpdir)
++        tmpdir = "/tmp";
++    snprintf(filename, size, "%s/vl.XXXXXX", tmpdir);
+     fd = mkstemp(filename);
+     close(fd);
+ }
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/03_machines_list_no_error.patch b/packages/qemu/qemu-0.9.0+cvs20070613/03_machines_list_no_error.patch
new file mode 100644
index 0000000000..73f31550fe
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/03_machines_list_no_error.patch
@@ -0,0 +1,18 @@
+#DPATCHLEVEL=0
+---
+# vl.c |    2 +-
+# 1 file changed, 1 insertion(+), 1 deletion(-)
+#
+Index: vl.c
+===================================================================
+--- vl.c.orig	2007-06-13 11:51:52.000000000 +0100
++++ vl.c	2007-06-13 11:52:24.000000000 +0100
+@@ -7242,7 +7242,7 @@ int main(int argc, char **argv)
+                                m->name, m->desc, 
+                                m == first_machine ? " (default)" : "");
+                     }
+-                    exit(1);
++                    exit(strcmp(optarg, "?"));
+                 }
+                 break;
+             case QEMU_OPTION_cpu:
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/04_do_not_print_rtc_freq_if_ok.patch b/packages/qemu/qemu-0.9.0+cvs20070613/04_do_not_print_rtc_freq_if_ok.patch
new file mode 100644
index 0000000000..1575cbce63
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/04_do_not_print_rtc_freq_if_ok.patch
@@ -0,0 +1,25 @@
+#DPATCHLEVEL=1
+---
+# vl.c |    6 +++++-
+# 1 file changed, 5 insertions(+), 1 deletion(-)
+#
+Index: qemu/vl.c
+===================================================================
+--- qemu.orig/vl.c	2007-06-13 11:51:53.000000000 +0100
++++ qemu/vl.c	2007-06-13 11:52:19.000000000 +0100
+@@ -1026,10 +1026,14 @@ static int rtc_fd;
+ 
+ static int start_rtc_timer(void)
+ {
++    unsigned long current_rtc_freq = 0;
++
+     rtc_fd = open("/dev/rtc", O_RDONLY);
+     if (rtc_fd < 0)
+         return -1;
+-    if (ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) {
++    ioctl(rtc_fd, RTC_IRQP_READ, &current_rtc_freq);
++    if (current_rtc_freq != RTC_FREQ &&
++        ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) {
+         fprintf(stderr, "Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal\n"
+                 "error, but for better emulation accuracy either use a 2.6 host Linux kernel or\n"
+                 "type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.\n");
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/05_non-fatal_if_linux_hd_missing.patch b/packages/qemu/qemu-0.9.0+cvs20070613/05_non-fatal_if_linux_hd_missing.patch
new file mode 100644
index 0000000000..b7c4732f24
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/05_non-fatal_if_linux_hd_missing.patch
@@ -0,0 +1,17 @@
+#DPATCHLEVEL=1
+---
+# hw/pc.c |    1 -
+# 1 file changed, 1 deletion(-)
+#
+Index: qemu/hw/pc.c
+===================================================================
+--- qemu.orig/hw/pc.c	2007-06-13 11:51:52.000000000 +0100
++++ qemu/hw/pc.c	2007-06-13 11:51:53.000000000 +0100
+@@ -355,7 +355,6 @@ static void generate_bootsect(uint32_t g
+     if (bs_table[0] == NULL) {
+ 	fprintf(stderr, "A disk image must be given for 'hda' when booting "
+ 		"a Linux kernel\n");
+-	exit(1);
+     }
+ 
+     memset(bootsect, 0, sizeof(bootsect));
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/06_exit_segfault.patch b/packages/qemu/qemu-0.9.0+cvs20070613/06_exit_segfault.patch
new file mode 100644
index 0000000000..447c3550b8
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/06_exit_segfault.patch
@@ -0,0 +1,45 @@
+#DPATCHLEVEL=0
+---
+# linux-user/main.c |    8 ++++----
+# 1 file changed, 4 insertions(+), 4 deletions(-)
+#
+Index: linux-user/main.c
+===================================================================
+--- linux-user/main.c.orig	2007-06-13 11:51:52.000000000 +0100
++++ linux-user/main.c	2007-06-13 11:52:16.000000000 +0100
+@@ -642,7 +642,7 @@ void cpu_loop (CPUSPARCState *env)
+         default:
+             printf ("Unhandled trap: 0x%x\n", trapnr);
+             cpu_dump_state(env, stderr, fprintf, 0);
+-            exit (1);
++            _exit (1);
+         }
+         process_pending_signals (env);
+     }
+@@ -1471,7 +1471,7 @@ void cpu_loop (CPUState *env)
+         default:
+             printf ("Unhandled trap: 0x%x\n", trapnr);
+             cpu_dump_state(env, stderr, fprintf, 0);
+-            exit (1);
++            _exit (1);
+         }
+         process_pending_signals (env);
+     }
+@@ -1735,7 +1735,7 @@ int main(int argc, char **argv)
+                 for(item = cpu_log_items; item->mask != 0; item++) {
+                     printf("%-10s %s\n", item->name, item->help);
+                 }
+-                exit(1);
++                _exit(1);
+             }
+             cpu_set_log(mask);
+         } else if (!strcmp(r, "s")) {
+@@ -1754,7 +1754,7 @@ int main(int argc, char **argv)
+             if (qemu_host_page_size == 0 ||
+                 (qemu_host_page_size & (qemu_host_page_size - 1)) != 0) {
+                 fprintf(stderr, "page size must be a power of two\n");
+-                exit(1);
++                _exit(1);
+             }
+         } else if (!strcmp(r, "g")) {
+             gdbstub_port = atoi(argv[optind++]);
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/10_signal_jobs.patch b/packages/qemu/qemu-0.9.0+cvs20070613/10_signal_jobs.patch
new file mode 100644
index 0000000000..794a538676
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/10_signal_jobs.patch
@@ -0,0 +1,26 @@
+#DPATCHLEVEL=0
+---
+# linux-user/signal.c |    7 ++++++-
+# 1 file changed, 6 insertions(+), 1 deletion(-)
+#
+Index: linux-user/signal.c
+===================================================================
+--- linux-user/signal.c.orig	2007-06-13 11:51:52.000000000 +0100
++++ linux-user/signal.c	2007-06-13 11:52:21.000000000 +0100
+@@ -341,10 +341,15 @@ int queue_signal(int sig, target_siginfo
+     k = &sigact_table[sig - 1];
+     handler = k->sa._sa_handler;
+     if (handler == TARGET_SIG_DFL) {
++        if (sig == TARGET_SIGTSTP || sig == TARGET_SIGTTIN || sig == TARGET_SIGTTOU) {
++            kill(getpid(),SIGSTOP);
++            return 0;
++        } else
+         /* default handler : ignore some signal. The other are fatal */
+         if (sig != TARGET_SIGCHLD && 
+             sig != TARGET_SIGURG && 
+-            sig != TARGET_SIGWINCH) {
++            sig != TARGET_SIGWINCH &&
++            sig != TARGET_SIGCONT) {
+             force_sig(sig);
+         } else {
+             return 0; /* indicate ignored */
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/11_signal_sigaction.patch b/packages/qemu/qemu-0.9.0+cvs20070613/11_signal_sigaction.patch
new file mode 100644
index 0000000000..5446efc562
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/11_signal_sigaction.patch
@@ -0,0 +1,21 @@
+#DPATCHLEVEL=0
+---
+# linux-user/signal.c |    5 +++++
+# 1 file changed, 5 insertions(+)
+#
+Index: linux-user/signal.c
+===================================================================
+--- linux-user/signal.c.orig	2007-06-13 11:51:54.000000000 +0100
++++ linux-user/signal.c	2007-06-13 11:52:20.000000000 +0100
+@@ -429,6 +429,11 @@ int do_sigaction(int sig, const struct t
+ 
+     if (sig < 1 || sig > TARGET_NSIG || sig == SIGKILL || sig == SIGSTOP)
+         return -EINVAL;
++
++    /* no point doing the stuff as those are not allowed for sigaction */
++    if ((sig == TARGET_SIGKILL) || (sig == TARGET_SIGSTOP))
++        return -EINVAL;
++
+     k = &sigact_table[sig - 1];
+ #if defined(DEBUG_SIGNAL)
+     fprintf(stderr, "sigaction sig=%d act=0x%08x, oact=0x%08x\n", 
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/12_signal_powerpc_support.patch b/packages/qemu/qemu-0.9.0+cvs20070613/12_signal_powerpc_support.patch
new file mode 100644
index 0000000000..d8d4198784
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/12_signal_powerpc_support.patch
@@ -0,0 +1,401 @@
+#DPATCHLEVEL=1
+---
+# linux-user/signal.c |  371 ++++++++++++++++++++++++++++++++++++++++++++++++++++
+# 1 file changed, 371 insertions(+)
+#
+Index: qemu/linux-user/signal.c
+===================================================================
+--- qemu.orig/linux-user/signal.c	2007-06-13 11:51:54.000000000 +0100
++++ qemu/linux-user/signal.c	2007-06-13 11:51:54.000000000 +0100
+@@ -2,6 +2,7 @@
+  *  Emulation of Linux signals
+  * 
+  *  Copyright (c) 2003 Fabrice Bellard
++ *  Copyright (c) 2005 Josh Triplett <josh@psas.pdx.edu>
+  *
+  *  This program is free software; you can redistribute it and/or modify
+  *  it under the terms of the GNU General Public License as published by
+@@ -16,6 +17,12 @@
+  *  You should have received a copy of the GNU General Public License
+  *  along with this program; if not, write to the Free Software
+  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ *  Various portions adapted from the Linux kernel:
++ *  Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org)
++ *    Derived from "arch/i386/kernel/signal.c"
++ *      Copyright (C) 1991, 1992 Linus Torvalds
++ *      1997-11-28  Modified for POSIX.1b signals by Richard Henderson
+  */
+ #include <stdlib.h>
+ #include <stdio.h>
+@@ -1964,6 +1971,370 @@ long do_rt_sigreturn(CPUState *env)
+     return -ENOSYS;
+ }
+ 
++#elif defined(TARGET_PPC)
++/* Adapted from the Linux kernel:
++ * arch/ppc/kernel/signal.c
++ * include/asm-ppc/elf.h
++ * include/asm-ppc/ptrace.h
++ * include/asm-ppc/sigcontext.h
++ * include/asm-ppc/ucontext.h
++ */
++
++/*
++ * When we have signals to deliver, we set up on the
++ * user stack, going down from the original stack pointer:
++ *	a sigregs struct
++ *	a sigcontext struct
++ *	a gap of __SIGNAL_FRAMESIZE bytes
++ *
++ * Each of these things must be a multiple of 16 bytes in size.
++ *
++ */
++
++#define TARGET_ELF_NGREG	48	/* includes nip, msr, lr, etc. */
++#define TARGET_ELF_NFPREG	33	/* includes fpscr */
++#define TARGET_ELF_NVRREG	33	/* includes vscr */
++
++/* General registers */
++typedef unsigned long target_elf_greg_t;
++typedef target_elf_greg_t target_elf_gregset_t[TARGET_ELF_NGREG];
++
++/* Floating point registers */
++typedef double target_elf_fpreg_t;
++typedef target_elf_fpreg_t target_elf_fpregset_t[TARGET_ELF_NFPREG];
++
++/* Altivec registers */
++/* FIXME: Altivec not supported yet. */
++/* typedef __vector128 elf_vrreg_t; */
++typedef uint64_t target_elf_vrreg_t[2];
++typedef target_elf_vrreg_t target_elf_vrregset_t[TARGET_ELF_NVRREG];
++
++struct target_mcontext {
++	target_elf_gregset_t	mc_gregs;
++	target_elf_fpregset_t	mc_fregs;
++	/* The kernel calls this mc_pad, but does #define tramp mc_pad */
++	target_ulong		tramp[2];
++	target_elf_vrregset_t	mc_vregs __attribute__((__aligned__(16)));
++};
++
++struct target_sigregs {
++	struct target_mcontext	mctx;		/* all the register values */
++	/* Programs using the rs6000/xcoff abi can save up to 19 gp regs
++	   and 18 fp regs below sp before decrementing it. */
++	int		abigap[56];
++};
++
++struct target_sigcontext {
++	target_ulong   _unused[4];
++	uint32_t       signal;
++	target_ulong   handler;
++	target_ulong   oldmask;
++	struct target_pt_regs *regs;
++};
++
++#define __SIGNAL_FRAMESIZE	64
++
++static int
++save_user_regs(CPUState *env, struct target_mcontext *frame, int sigret)
++{
++	/* save general and floating-point registers */
++#if 0 /* FIXME: handle floating-point, Altivec, SPE */
++	CHECK_FULL_REGS(regs);
++	preempt_disable();
++	if (regs->msr & MSR_FP)
++		giveup_fpu(current);
++#ifdef CONFIG_ALTIVEC
++	if (current->thread.used_vr && (regs->msr & MSR_VEC))
++		giveup_altivec(current);
++#endif /* CONFIG_ALTIVEC */
++#ifdef CONFIG_SPE
++	if (current->thread.used_spe && (regs->msr & MSR_SPE))
++		giveup_spe(current);
++#endif /* CONFIG_ALTIVEC */
++	preempt_enable();
++#endif /* 0 */
++
++	/* Note: this needs to be in the same order as target_pt_regs */
++	if(!memcpy(&frame->mc_gregs, env->gpr,
++	                  32*sizeof(target_elf_greg_t))
++	   || __put_user(env->nip, &frame->mc_gregs[32])
++	   || __put_user(do_load_msr(env), &frame->mc_gregs[33])
++	   /* FIXME: || __put_user(orig_gpr3, &frame->mc_gregs[34]) */
++	   || __put_user(env->ctr, &frame->mc_gregs[35])
++	   || __put_user(env->lr, &frame->mc_gregs[36])
++	   || __put_user(do_load_xer(env), &frame->mc_gregs[37])
++	   || __put_user(do_load_cr(env), &frame->mc_gregs[38])
++	   || __put_user(env->spr[SPR_MQ], &frame->mc_gregs[39])
++	   /* FIXME: || __put_user(trap, &frame->mc_gregs[40]) */
++	   || __put_user(env->spr[SPR_DAR], &frame->mc_gregs[41])
++	   || __put_user(env->spr[SPR_DSISR], &frame->mc_gregs[42])
++	   /* FIXME: || __put_user(result, &frame->mc_gregs[43]) */)
++		return 1;
++
++	if(!memcpy(&frame->mc_fregs, env->fpr,
++	                  32*sizeof(target_elf_fpreg_t))
++	   || __put_user(do_load_fpscr(env), &frame->mc_fregs[32]))
++
++	do_store_fpscr(env, 0, 0xFF); /* turn off all fp exceptions */
++
++#if 0 /* FIXME: handle Altivec, SPE */
++#ifdef CONFIG_ALTIVEC
++	/* save altivec registers */
++	if (current->thread.used_vr) {
++		if (!memcpy(&frame->mc_vregs, current->thread.vr,
++				   ELF_NVRREG * sizeof(vector128)))
++			return 1;
++		/* set MSR_VEC in the saved MSR value to indicate that
++		   frame->mc_vregs contains valid data */
++		if (__put_user(regs->msr | MSR_VEC, &frame->mc_gregs[PT_MSR]))
++			return 1;
++	}
++	/* else assert((regs->msr & MSR_VEC) == 0) */
++
++	/* We always copy to/from vrsave, it's 0 if we don't have or don't
++	 * use altivec. Since VSCR only contains 32 bits saved in the least
++	 * significant bits of a vector, we "cheat" and stuff VRSAVE in the
++	 * most significant bits of that same vector. --BenH
++	 */
++	if (__put_user(current->thread.vrsave, (u32 __user *)&frame->mc_vregs[32]))
++		return 1;
++#endif /* CONFIG_ALTIVEC */
++
++#ifdef CONFIG_SPE
++	/* save spe registers */
++	if (current->thread.used_spe) {
++		if (!memcpy(&frame->mc_vregs, current->thread.evr,
++				   ELF_NEVRREG * sizeof(u32)))
++			return 1;
++		/* set MSR_SPE in the saved MSR value to indicate that
++		   frame->mc_vregs contains valid data */
++		if (__put_user(regs->msr | MSR_SPE, &frame->mc_gregs[PT_MSR]))
++			return 1;
++	}
++	/* else assert((regs->msr & MSR_SPE) == 0) */
++
++	/* We always copy to/from spefscr */
++	if (__put_user(current->thread.spefscr, (u32 *)&frame->mc_vregs + ELF_NEVRREG))
++		return 1;
++#endif /* CONFIG_SPE */
++#endif /* 0 */
++
++	if (sigret) {
++		/* Set up the sigreturn trampoline: li r0,sigret; sc */
++		if (__put_user(0x38000000UL + sigret, &frame->tramp[0])
++		    || __put_user(0x44000002UL, &frame->tramp[1]))
++			return 1;
++#if 0
++		flush_icache_range((unsigned long) &frame->tramp[0],
++				   (unsigned long) &frame->tramp[2]);
++#endif
++	}
++
++	return 0;
++}
++
++static int
++restore_user_regs(CPUState *env, struct target_mcontext *sr, int sig)
++{
++	target_ulong save_r2 = 0;
++	target_ulong saved_xer;
++	target_ulong saved_cr;
++	double saved_fpscr;
++
++#if 0 /* FIXME: handle Altivec, SPE */
++#if defined(CONFIG_ALTIVEC) || defined(CONFIG_SPE)
++	unsigned long msr;
++#endif
++#endif /* 0 */
++
++	/* backup/restore the TLS as we don't want it to be modified */
++	if (!sig)
++		save_r2 = env->gpr[2];
++
++	/* Copy all registers except MSR */
++	/* Note: this needs to be in the same order as target_pt_regs */
++	if(!memcpy(env->gpr, &sr->mc_gregs,
++	                    32*sizeof(target_elf_greg_t))
++	   || __get_user(env->nip, &sr->mc_gregs[32])
++	   /* FIXME: || __get_user(orig_gpr3, &sr->mc_gregs[34]) */
++	   || __get_user(env->ctr, &sr->mc_gregs[35])
++	   || __get_user(env->lr, &sr->mc_gregs[36])
++	   || __get_user(saved_xer, &sr->mc_gregs[37])
++	   || __get_user(saved_cr, &sr->mc_gregs[38])
++	   || __get_user(env->spr[SPR_MQ], &sr->mc_gregs[39])
++	   /* FIXME: || __get_user(trap, &sr->mc_gregs[40]) */
++	   || __get_user(env->spr[SPR_DAR], &sr->mc_gregs[41])
++	   || __get_user(env->spr[SPR_DSISR], &sr->mc_gregs[42])
++	   /* FIXME: || __get_user(result, &sr->mc_gregs[43]) */)
++		return 1;
++	do_store_xer(env, saved_xer);
++	do_store_cr(env, saved_cr, 0xFF);
++
++	if (!sig)
++		env->gpr[2] = save_r2;
++
++	/* The kernel delays restoring the floating-point registers until the
++	 * thread uses floating-point again.  For simplicity, just restore the
++	 * registers now. */
++	if(!memcpy(env->fpr, &sr->mc_fregs,
++	                    32*sizeof(target_elf_fpreg_t))
++	   || __get_user(saved_fpscr, &sr->mc_fregs[32]))
++		return 1;
++	do_store_fpscr(env, saved_fpscr, 0xFF);
++
++#if 0 /* FIXME: handle Altivec, SPE */
++#ifdef CONFIG_ALTIVEC
++	/* force the process to reload the altivec registers from
++	   current->thread when it next does altivec instructions */
++	regs->msr &= ~MSR_VEC;
++	if (!__get_user(msr, &sr->mc_gregs[PT_MSR]) && (msr & MSR_VEC) != 0) {
++		/* restore altivec registers from the stack */
++		if (!memcpy(current->thread.vr, &sr->mc_vregs,
++				     sizeof(sr->mc_vregs)))
++			return 1;
++	} else if (current->thread.used_vr)
++		memset(&current->thread.vr, 0, ELF_NVRREG * sizeof(vector128));
++
++	/* Always get VRSAVE back */
++	if (__get_user(current->thread.vrsave, (u32 __user *)&sr->mc_vregs[32]))
++		return 1;
++#endif /* CONFIG_ALTIVEC */
++
++#ifdef CONFIG_SPE
++	/* force the process to reload the spe registers from
++	   current->thread when it next does spe instructions */
++	regs->msr &= ~MSR_SPE;
++	if (!__get_user(msr, &sr->mc_gregs[PT_MSR]) && (msr & MSR_SPE) != 0) {
++		/* restore spe registers from the stack */
++		if (!memcpy(current->thread.evr, &sr->mc_vregs,
++				     ELF_NEVRREG * sizeof(u32)))
++			return 1;
++	} else if (current->thread.used_spe)
++		memset(&current->thread.evr, 0, ELF_NEVRREG * sizeof(u32));
++
++	/* Always get SPEFSCR back */
++	if (__get_user(current->thread.spefscr, (u32 *)&sr->mc_vregs + ELF_NEVRREG))
++		return 1;
++#endif /* CONFIG_SPE */
++#endif /* 0 */
++
++#if 0 /* FIXME: handle floating-point, Altivec, SPE */
++#ifndef CONFIG_SMP
++	preempt_disable();
++	if (last_task_used_math == current)
++		last_task_used_math = NULL;
++	if (last_task_used_altivec == current)
++		last_task_used_altivec = NULL;
++	if (last_task_used_spe == current)
++		last_task_used_spe = NULL;
++	preempt_enable();
++#endif
++#endif /* 0 */
++	return 0;
++}
++
++static void setup_frame(int sig, struct emulated_sigaction *ka,
++                        target_sigset_t *oldset, CPUState *env)
++{
++	struct target_sigcontext *sc;
++	struct target_sigregs *frame;
++	target_ulong origsp = env->gpr[1];
++	target_ulong newsp = origsp;
++
++	/* Set up Signal Frame */
++	newsp -= sizeof(struct target_sigregs);
++	frame = (struct target_sigregs *) newsp;
++
++	/* Put a sigcontext on the stack */
++	newsp -= sizeof(*sc);
++	sc = (struct target_sigcontext *) newsp;
++
++	/* create a stack frame for the caller of the handler */
++	newsp -= __SIGNAL_FRAMESIZE;
++
++	if (!access_ok(VERIFY_WRITE, (void *) newsp, origsp - newsp))
++		goto badframe;
++
++#if TARGET_NSIG != 64
++#error "Please adjust handle_signal()"
++#endif
++	if (__put_user((target_ulong) ka->sa._sa_handler, &sc->handler)
++	    || __put_user(oldset->sig[0], &sc->oldmask)
++	    || __put_user(oldset->sig[1], &sc->_unused[3])
++	    || __put_user(frame, (target_ulong *)&sc->regs)
++	    || __put_user(sig, &sc->signal))
++		goto badframe;
++
++	if (save_user_regs(env, &frame->mctx, TARGET_NR_sigreturn))
++		goto badframe;
++
++	if (put_user(env->gpr[1], (unsigned long *)newsp))
++		goto badframe;
++	env->gpr[1] = newsp;
++	env->gpr[3] = sig;
++	env->gpr[4] = (unsigned long) sc;
++	env->nip = (unsigned long) ka->sa._sa_handler;
++	env->lr = (unsigned long) frame->mctx.tramp;
++	/* FIXME: env->trap = 0; */
++
++	return;
++
++badframe:
++#ifdef DEBUG_SIGNAL
++	fprintf(stderr,
++		"badframe in handle_signal, frame=%p newsp=%lx\n",
++		frame, newsp);
++#endif
++	force_sig(TARGET_SIGSEGV);
++}
++
++static void setup_rt_frame(int sig, struct emulated_sigaction *ka, 
++                           target_siginfo_t *info,
++                           target_sigset_t *set, CPUState *env)
++{
++    fprintf(stderr, "setup_rt_frame: not implemented\n");
++}
++
++long do_sigreturn(CPUState *env)
++{
++	struct target_sigcontext *sc;
++	struct target_sigcontext sigctx;
++	struct target_mcontext *sr;
++	target_sigset_t set;
++	sigset_t host_set;
++
++	/* Always make any pending restarted system calls return -EINTR */
++#if 0 /* FIXME */
++	current_thread_info()->restart_block.fn = do_no_restart_syscall;
++#endif
++
++	sc = (struct target_sigcontext *)(env->gpr[1] + __SIGNAL_FRAMESIZE);
++	if (!memcpy(&sigctx, sc, sizeof(sigctx)))
++		goto badframe;
++
++	set.sig[0] = sigctx.oldmask;
++	set.sig[1] = sigctx._unused[3];
++	target_to_host_sigset_internal(&host_set, &set);
++	sigprocmask(SIG_SETMASK, &host_set, NULL);
++
++	sr = (struct target_mcontext *) tswapl((target_ulong)sigctx.regs);
++	if (!access_ok(VERIFY_READ, sr, sizeof(*sr))
++	    || restore_user_regs(env, sr, 1))
++		goto badframe;
++
++	return 0;
++
++badframe:
++	force_sig(TARGET_SIGSEGV);
++	return 0;
++}
++
++long do_rt_sigreturn(CPUState *env)
++{
++    fprintf(stderr, "do_rt_sigreturn: not implemented\n");
++    return -ENOSYS;
++}
++
+ #else
+ 
+ static void setup_frame(int sig, struct emulated_sigaction *ka,
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/22_net_tuntap_stall.patch b/packages/qemu/qemu-0.9.0+cvs20070613/22_net_tuntap_stall.patch
new file mode 100644
index 0000000000..e9b31dfe40
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/22_net_tuntap_stall.patch
@@ -0,0 +1,18 @@
+#DPATCHLEVEL=0
+---
+# vl.c |    2 +-
+# 1 file changed, 1 insertion(+), 1 deletion(-)
+#
+Index: vl.c
+===================================================================
+--- vl.c.orig	2007-06-13 11:51:53.000000000 +0100
++++ vl.c	2007-06-13 11:52:10.000000000 +0100
+@@ -3617,7 +3617,7 @@ static int tap_open(char *ifname, int if
+         return -1;
+     }
+     memset(&ifr, 0, sizeof(ifr));
+-    ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
++    ifr.ifr_flags = IFF_TAP | IFF_NO_PI | IFF_ONE_QUEUE;
+     if (ifname[0] != '\0')
+         pstrcpy(ifr.ifr_name, IFNAMSIZ, ifname);
+     else
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/30_syscall_ipc.patch b/packages/qemu/qemu-0.9.0+cvs20070613/30_syscall_ipc.patch
new file mode 100644
index 0000000000..3dc58102ad
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/30_syscall_ipc.patch
@@ -0,0 +1,34 @@
+#DPATCHLEVEL=0
+---
+# linux-user/syscall.c |    7 +++++--
+# 1 file changed, 5 insertions(+), 2 deletions(-)
+#
+Index: linux-user/syscall.c
+===================================================================
+--- linux-user/syscall.c.orig	2007-04-18 13:25:40.000000000 +0100
++++ linux-user/syscall.c	2007-04-18 13:37:27.000000000 +0100
+@@ -43,7 +43,10 @@
+ #include <sys/poll.h>
+ #include <sys/times.h>
+ #include <sys/shm.h>
++#include <sys/ipc.h>
+ #include <sys/sem.h>
++#include <sys/shm.h>
++#include <sys/msg.h>
+ #include <sys/statfs.h>
+ #include <utime.h>
+ #include <sys/sysinfo.h>
+@@ -1240,11 +1243,11 @@ static long do_ipc(long call, long first
+             ret = get_errno(shmctl(first, second, NULL));
+             break;
+         default:
+-            goto unimplemented;
++            ret = get_errno(shmctl(first, second, (struct shmid_ds *) ptr));
++            break;
+         }
+         break;
+     default:
+-    unimplemented:
+ 	gemu_log("Unsupported ipc call: %ld (version %d)\n", call, version);
+ 	ret = -ENOSYS;
+ 	break;
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/31_syscalls.patch b/packages/qemu/qemu-0.9.0+cvs20070613/31_syscalls.patch
new file mode 100644
index 0000000000..3878079f19
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/31_syscalls.patch
@@ -0,0 +1,49 @@
+#DPATCHLEVEL=0
+---
+# Makefile.target      |    2 +-
+# linux-user/syscall.c |   11 ++++++++---
+# 2 files changed, 9 insertions(+), 4 deletions(-)
+#
+Index: linux-user/syscall.c
+===================================================================
+--- linux-user/syscall.c.orig	2007-06-13 11:51:52.000000000 +0100
++++ linux-user/syscall.c	2007-06-13 11:52:18.000000000 +0100
+@@ -180,6 +180,7 @@ extern int getresuid(uid_t *, uid_t *, u
+ extern int setresgid(gid_t, gid_t, gid_t);
+ extern int getresgid(gid_t *, gid_t *, gid_t *);
+ extern int setgroups(int, gid_t *);
++extern int uselib(const char*);
+ 
+ /*
+  * This list is the union of errno values overidden in asm-<arch>/errno.h
+@@ -3215,7 +3216,8 @@ long do_syscall(void *cpu_env, int num, 
+         break;
+ #ifdef TARGET_NR_uselib
+     case TARGET_NR_uselib:
+-        goto unimplemented;
++        ret = get_errno(uselib(path((const char*)arg1)));
++        break;
+ #endif
+ #ifdef TARGET_NR_swapon
+     case TARGET_NR_swapon:
+@@ -4405,7 +4407,9 @@ long do_syscall(void *cpu_env, int num, 
+         goto unimplemented;
+ #ifdef TARGET_NR_mincore
+     case TARGET_NR_mincore:
+-        goto unimplemented;
++        page_unprotect_range((void*)arg3, ((size_t)arg2 + TARGET_PAGE_SIZE - 1) / TARGET_PAGE_SIZE);
++        ret = get_errno(mincore((void*)arg1, (size_t)arg2, (unsigned char*)arg3));
++        break;
+ #endif
+ #ifdef TARGET_NR_madvise
+     case TARGET_NR_madvise:
+@@ -4539,7 +4543,8 @@ long do_syscall(void *cpu_env, int num, 
+         break;
+ #ifdef TARGET_NR_readahead
+     case TARGET_NR_readahead:
+-        goto unimplemented;
++        ret = get_errno(readahead((int)arg1, (off64_t)arg2, (size_t)arg3));
++        break;
+ #endif
+ #ifdef TARGET_NR_setxattr
+     case TARGET_NR_setxattr:
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/32_syscall_sysctl.patch b/packages/qemu/qemu-0.9.0+cvs20070613/32_syscall_sysctl.patch
new file mode 100644
index 0000000000..d175cf96ba
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/32_syscall_sysctl.patch
@@ -0,0 +1,56 @@
+#DPATCHLEVEL=0
+---
+# linux-user/syscall.c |   33 ++++++++++++++++++++++++++++++---
+# 1 file changed, 30 insertions(+), 3 deletions(-)
+#
+Index: linux-user/syscall.c
+===================================================================
+--- linux-user/syscall.c.orig	2007-06-13 11:51:54.000000000 +0100
++++ linux-user/syscall.c	2007-06-13 11:52:17.000000000 +0100
+@@ -52,6 +52,7 @@
+ //#include <sys/user.h>
+ #include <netinet/ip.h>
+ #include <netinet/tcp.h>
++#include <sys/sysctl.h>
+ 
+ #define termios host_termios
+ #define winsize host_winsize
+@@ -3912,9 +3913,35 @@ long do_syscall(void *cpu_env, int num, 
+         break;
+ #endif
+     case TARGET_NR__sysctl:
+-        /* We don't implement this, but ENODIR is always a safe
+-           return value. */
+-        return -ENOTDIR;
++        {
++            struct __sysctl_args *args = (struct __sysctl_args *) arg1;
++            int *name_target, *name, nlen, *oldlenp, oldlen, newlen, i;
++            void *oldval, *newval;
++
++            name_target = (int *) tswapl((long) args->name);
++            nlen = tswapl(args->nlen);
++            oldval = (void *) tswapl((long) args->oldval);
++            oldlenp = (int *) tswapl((long) args->oldlenp);
++            oldlen = tswapl(*oldlenp);
++            newval = (void *) tswapl((long) args->newval);
++            newlen = tswapl(args->newlen);
++
++            name = alloca(nlen * sizeof (int));
++            for (i = 0; i < nlen; i++)
++                name[i] = tswapl(name_target[i]);
++
++            if (nlen == 2 && name[0] == CTL_KERN && name[1] == KERN_VERSION) {
++                ret = get_errno(
++                        sysctl(name, nlen, oldval, &oldlen, newval, newlen));
++                if (!is_error(ret)) {
++                    *oldlenp = tswapl(oldlen);
++                }
++            } else {
++                gemu_log("qemu: Unsupported sysctl name\n");
++                ret = -ENOSYS;
++            }
++        }
++        break;
+     case TARGET_NR_sched_setparam:
+         {
+             struct sched_param *target_schp;
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/33_syscall_ppc_clone.patch b/packages/qemu/qemu-0.9.0+cvs20070613/33_syscall_ppc_clone.patch
new file mode 100644
index 0000000000..a71f8b1944
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/33_syscall_ppc_clone.patch
@@ -0,0 +1,22 @@
+#DPATCHLEVEL=0
+---
+# linux-user/syscall.c |    6 +-----
+# 1 file changed, 1 insertion(+), 5 deletions(-)
+#
+Index: linux-user/syscall.c
+===================================================================
+--- linux-user/syscall.c.orig	2007-06-13 11:51:54.000000000 +0100
++++ linux-user/syscall.c	2007-06-13 11:52:17.000000000 +0100
+@@ -2177,11 +2177,7 @@ int do_fork(CPUState *env, unsigned int 
+         if (!newsp)
+             newsp = env->gpr[1];
+         new_env->gpr[1] = newsp;
+-        { 
+-            int i;
+-            for (i = 7; i < 32; i++)
+-                new_env->gpr[i] = 0;
+-        }
++        new_env->gpr[3] = 0;
+ #elif defined(TARGET_SH4)
+ 	if (!newsp)
+ 	  newsp = env->gregs[15];
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/39_syscall_fadvise64.patch b/packages/qemu/qemu-0.9.0+cvs20070613/39_syscall_fadvise64.patch
new file mode 100644
index 0000000000..0a7f4c48dd
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/39_syscall_fadvise64.patch
@@ -0,0 +1,21 @@
+---
+ linux-user/syscall.c |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+Index: linux-user/syscall.c
+===================================================================
+--- linux-user/syscall.c.orig	2007-06-13 11:51:55.000000000 +0100
++++ linux-user/syscall.c	2007-06-13 11:52:13.000000000 +0100
+@@ -4434,6 +4434,12 @@ long do_syscall(void *cpu_env, int num, 
+         ret = get_errno(mincore((void*)arg1, (size_t)arg2, (unsigned char*)arg3));
+         break;
+ #endif
++#ifdef TARGET_NR_fadvise64_64
++     case TARGET_NR_fadvise64_64:
++        /* Just return success */
++        ret = get_errno(0);
++        break;
++#endif
+ #ifdef TARGET_NR_madvise
+     case TARGET_NR_madvise:
+         /* A straight passthrough may not be safe because qemu sometimes
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/41_arm_fpa_sigfpe.patch b/packages/qemu/qemu-0.9.0+cvs20070613/41_arm_fpa_sigfpe.patch
new file mode 100644
index 0000000000..d579dbc66e
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/41_arm_fpa_sigfpe.patch
@@ -0,0 +1,105 @@
+#DPATCHLEVEL=0
+---
+# linux-user/main.c        |   53 +++++++++++++++++++++++++++++++++++++++++++++--
+# target-arm/nwfpe/fpa11.c |    7 ++++++
+# 2 files changed, 58 insertions(+), 2 deletions(-)
+#
+Index: linux-user/main.c
+===================================================================
+--- linux-user/main.c.orig	2007-06-13 11:51:53.000000000 +0100
++++ linux-user/main.c	2007-06-13 11:52:07.000000000 +0100
+@@ -339,18 +339,67 @@ void cpu_loop(CPUARMState *env)
+             {
+                 TaskState *ts = env->opaque;
+                 uint32_t opcode;
++                int rc;
+ 
+                 /* we handle the FPU emulation here, as Linux */
+                 /* we get the opcode */
+                 opcode = tget32(env->regs[15]);
+                 
+-                if (EmulateAll(opcode, &ts->fpa, env) == 0) {
++                rc = EmulateAll(opcode, &ts->fpa, env);
++                if (rc == 0) { /* illegal instruction */
+                     info.si_signo = SIGILL;
+                     info.si_errno = 0;
+                     info.si_code = TARGET_ILL_ILLOPN;
+                     info._sifields._sigfault._addr = env->regs[15];
+                     queue_signal(info.si_signo, &info);
+-                } else {
++                } else if (rc < 0) { /* FP exception */
++                    int arm_fpe=0;
++
++                    /* translate softfloat flags to FPSR flags */
++                    if (-rc & float_flag_invalid)
++                      arm_fpe |= BIT_IOC;
++                    if (-rc & float_flag_divbyzero)
++                      arm_fpe |= BIT_DZC;
++                    if (-rc & float_flag_overflow)
++                      arm_fpe |= BIT_OFC;
++                    if (-rc & float_flag_underflow)
++                      arm_fpe |= BIT_UFC;
++                    if (-rc & float_flag_inexact)
++                      arm_fpe |= BIT_IXC;
++
++                    FPSR fpsr = ts->fpa.fpsr;
++                    //printf("fpsr 0x%x, arm_fpe 0x%x\n",fpsr,arm_fpe);
++
++                    if (fpsr & (arm_fpe << 16)) { /* exception enabled? */
++                      info.si_signo = SIGFPE;
++                      info.si_errno = 0;
++
++                      /* ordered by priority, least first */
++                      if (arm_fpe & BIT_IXC) info.si_code = TARGET_FPE_FLTRES;
++                      if (arm_fpe & BIT_UFC) info.si_code = TARGET_FPE_FLTUND;
++                      if (arm_fpe & BIT_OFC) info.si_code = TARGET_FPE_FLTOVF;
++                      if (arm_fpe & BIT_DZC) info.si_code = TARGET_FPE_FLTDIV;
++                      if (arm_fpe & BIT_IOC) info.si_code = TARGET_FPE_FLTINV;
++
++                      info._sifields._sigfault._addr = env->regs[15];
++                      queue_signal(info.si_signo, &info);
++                    } else {
++                      env->regs[15] += 4;
++                    }
++
++                    /* accumulate unenabled exceptions */
++                    if ((!(fpsr & BIT_IXE)) && (arm_fpe & BIT_IXC))
++                      fpsr |= BIT_IXC;
++                    if ((!(fpsr & BIT_UFE)) && (arm_fpe & BIT_UFC))
++                      fpsr |= BIT_UFC;
++                    if ((!(fpsr & BIT_OFE)) && (arm_fpe & BIT_OFC))
++                      fpsr |= BIT_OFC;
++                    if ((!(fpsr & BIT_DZE)) && (arm_fpe & BIT_DZC))
++                      fpsr |= BIT_DZC;
++                    if ((!(fpsr & BIT_IOE)) && (arm_fpe & BIT_IOC))
++                      fpsr |= BIT_IOC;
++                    ts->fpa.fpsr=fpsr;
++                } else { /* everything OK */
+                     /* increment PC */
+                     env->regs[15] += 4;
+                 }
+Index: target-arm/nwfpe/fpa11.c
+===================================================================
+--- target-arm/nwfpe/fpa11.c.orig	2007-06-13 11:51:52.000000000 +0100
++++ target-arm/nwfpe/fpa11.c	2007-06-13 11:51:55.000000000 +0100
+@@ -162,6 +162,8 @@ unsigned int EmulateAll(unsigned int opc
+     fpa11->initflag = 1;
+   }
+ 
++  set_float_exception_flags(0, &fpa11->fp_status);  
++
+   if (TEST_OPCODE(opcode,MASK_CPRT))
+   {
+     //fprintf(stderr,"emulating CPRT\n");
+@@ -191,6 +193,11 @@ unsigned int EmulateAll(unsigned int opc
+   }
+ 
+ //  restore_flags(flags);
++  if(nRc == 1 && get_float_exception_flags(&fpa11->fp_status))
++  {
++    //printf("fef 0x%x\n",float_exception_flags);
++    nRc=-get_float_exception_flags(&fpa11->fp_status);
++  }
+ 
+   //printf("returning %d\n",nRc);
+   return(nRc);
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/52_ne2000_return.patch b/packages/qemu/qemu-0.9.0+cvs20070613/52_ne2000_return.patch
new file mode 100644
index 0000000000..f0316c8042
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/52_ne2000_return.patch
@@ -0,0 +1,17 @@
+---
+ hw/ne2000.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: qemu/hw/ne2000.c
+===================================================================
+--- qemu.orig/hw/ne2000.c	2007-06-13 11:51:52.000000000 +0100
++++ qemu/hw/ne2000.c	2007-06-13 11:51:55.000000000 +0100
+@@ -214,7 +214,7 @@ static int ne2000_can_receive(void *opaq
+     NE2000State *s = opaque;
+     
+     if (s->cmd & E8390_STOP)
+-        return 1;
++        return 0;
+     return !ne2000_buffer_full(s);
+ }
+ 
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/61_safe_64bit_int.patch b/packages/qemu/qemu-0.9.0+cvs20070613/61_safe_64bit_int.patch
new file mode 100644
index 0000000000..553e57623e
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/61_safe_64bit_int.patch
@@ -0,0 +1,27 @@
+#DPATCHLEVEL=0
+---
+# dyngen-exec.h |    4 ++--
+# 1 file changed, 2 insertions(+), 2 deletions(-)
+#
+Index: dyngen-exec.h
+===================================================================
+--- dyngen-exec.h.orig	2007-06-13 11:48:22.000000000 +0100
++++ dyngen-exec.h	2007-06-13 11:51:55.000000000 +0100
+@@ -38,7 +38,7 @@ typedef unsigned int uint32_t;
+ // Linux/Sparc64 defines uint64_t
+ #if !(defined (__sparc_v9__) && defined(__linux__))
+ /* XXX may be done for all 64 bits targets ? */
+-#if defined (__x86_64__) || defined(__ia64)
++#if defined (__x86_64__) || defined(__ia64) || defined(__alpha__) || defined(__sparc__)
+ typedef unsigned long uint64_t;
+ #else
+ typedef unsigned long long uint64_t;
+@@ -55,7 +55,7 @@ typedef signed short int16_t;
+ typedef signed int int32_t;
+ // Linux/Sparc64 defines int64_t
+ #if !(defined (__sparc_v9__) && defined(__linux__))
+-#if defined (__x86_64__) || defined(__ia64)
++#if defined (__x86_64__) || defined(__ia64) || defined(__alpha__) || defined(__sparc__)
+ typedef signed long int64_t;
+ #else
+ typedef signed long long int64_t;
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/63_sparc_build.patch b/packages/qemu/qemu-0.9.0+cvs20070613/63_sparc_build.patch
new file mode 100644
index 0000000000..32a6bc0ee0
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/63_sparc_build.patch
@@ -0,0 +1,18 @@
+#DPATCHLEVEL=0
+---
+# sparc.ld |    2 +-
+# 1 file changed, 1 insertion(+), 1 deletion(-)
+#
+Index: sparc.ld
+===================================================================
+--- sparc.ld.orig	2007-06-13 11:48:22.000000000 +0100
++++ sparc.ld	2007-06-13 11:51:56.000000000 +0100
+@@ -6,7 +6,7 @@ ENTRY(_start)
+ SECTIONS
+ {
+   /* Read-only sections, merged into text segment: */
+-  . = 0x60000000 + SIZEOF_HEADERS;
++  . = 0x60000000 + 0x400;
+   .interp     : { *(.interp) 	}
+   .hash          : { *(.hash)		}
+   .dynsym        : { *(.dynsym)		}
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/64_ppc_asm_constraints.patch b/packages/qemu/qemu-0.9.0+cvs20070613/64_ppc_asm_constraints.patch
new file mode 100644
index 0000000000..e4858b79d7
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/64_ppc_asm_constraints.patch
@@ -0,0 +1,18 @@
+#DPATCHLEVEL=1
+---
+# cpu-all.h |    2 +-
+# 1 file changed, 1 insertion(+), 1 deletion(-)
+#
+Index: qemu/cpu-all.h
+===================================================================
+--- qemu.orig/cpu-all.h	2007-06-13 11:48:22.000000000 +0100
++++ qemu/cpu-all.h	2007-06-13 11:51:56.000000000 +0100
+@@ -250,7 +250,7 @@ static inline void stw_le_p(void *ptr, i
+ static inline void stl_le_p(void *ptr, int v)
+ {
+ #ifdef __powerpc__
+-    __asm__ __volatile__ ("stwbrx %1,0,%2" : "=m" (*(uint32_t *)ptr) : "r" (v), "r" (ptr));
++    __asm__ __volatile__ ("stwbrx %0,0,%1" : : "r" (v), "r" (ptr) : "memory");
+ #else
+     uint8_t *p = ptr;
+     p[0] = v;
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/65_kfreebsd.patch b/packages/qemu/qemu-0.9.0+cvs20070613/65_kfreebsd.patch
new file mode 100644
index 0000000000..ea060811a1
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/65_kfreebsd.patch
@@ -0,0 +1,44 @@
+---
+ configure |    6 ++++++
+ vl.c      |    4 +++-
+ 2 files changed, 9 insertions(+), 1 deletion(-)
+
+Index: configure
+===================================================================
+--- configure.orig	2007-06-13 11:48:22.000000000 +0100
++++ configure	2007-06-13 11:52:07.000000000 +0100
+@@ -112,6 +112,12 @@ OS_CFLAGS="-mno-cygwin"
+ MINGW32*)
+ mingw32="yes"
+ ;;
++GNU/kFreeBSD)
++oss="yes"
++if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
++    kqemu="yes"
++fi
++;;
+ FreeBSD)
+ bsd="yes"
+ oss="yes"
+Index: vl.c
+===================================================================
+--- vl.c.orig	2007-06-13 11:51:54.000000000 +0100
++++ vl.c	2007-06-13 11:51:56.000000000 +0100
+@@ -47,6 +47,8 @@
+ #ifndef __APPLE__
+ #include <libutil.h>
+ #endif
++#elif defined (__GLIBC__) && defined (__FreeBSD_kernel__)
++#include <freebsd/stdlib.h>
+ #else
+ #ifndef __sun__
+ #include <linux/if.h>
+@@ -3454,7 +3456,7 @@ static TAPState *net_tap_fd_init(VLANSta
+     return s;
+ }
+ 
+-#ifdef _BSD
++#if defined (_BSD) || defined (__FreeBSD_kernel__)
+ static int tap_open(char *ifname, int ifname_size)
+ {
+     int fd;
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/66_tls_ld.patch b/packages/qemu/qemu-0.9.0+cvs20070613/66_tls_ld.patch
new file mode 100644
index 0000000000..54e02eff8b
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/66_tls_ld.patch
@@ -0,0 +1,55 @@
+---
+ arm.ld  |    7 +++++++
+ i386.ld |    7 +++++++
+ 2 files changed, 14 insertions(+)
+
+Index: arm.ld
+===================================================================
+--- arm.ld.orig	2007-06-13 11:48:22.000000000 +0100
++++ arm.ld	2007-06-13 11:51:56.000000000 +0100
+@@ -26,6 +26,10 @@ SECTIONS
+     { *(.rel.rodata) *(.rel.gnu.linkonce.r*) }
+   .rela.rodata   :
+     { *(.rela.rodata) *(.rela.gnu.linkonce.r*) }
++  .rel.tdata     : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
++  .rela.tdata    : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
++  .rel.tbss      : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
++  .rela.tbss     : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+   .rel.got       : { *(.rel.got)		}
+   .rela.got      : { *(.rela.got)		}
+   .rel.ctors     : { *(.rel.ctors)	}
+@@ -58,6 +62,9 @@ SECTIONS
+   .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+    __exidx_end = .;
+   .reginfo : { *(.reginfo) }
++  /* Thread Local Storage sections  */
++  .tdata	  : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
++  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+   /* Adjust the address for the data segment.  We want to adjust up to
+      the same address within the page on the next page up.  */
+   . = ALIGN(0x100000) + (. & (0x100000 - 1));
+Index: i386.ld
+===================================================================
+--- i386.ld.orig	2007-06-13 11:48:22.000000000 +0100
++++ i386.ld	2007-06-13 11:51:56.000000000 +0100
+@@ -28,6 +28,10 @@ SECTIONS
+     { *(.rel.rodata) *(.rel.gnu.linkonce.r*) }
+   .rela.rodata   :
+     { *(.rela.rodata) *(.rela.gnu.linkonce.r*) }
++  .rel.tdata     : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
++  .rela.tdata    : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
++  .rel.tbss      : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
++  .rela.tbss     : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+   .rel.got       : { *(.rel.got)		}
+   .rela.got      : { *(.rela.got)		}
+   .rel.ctors     : { *(.rel.ctors)	}
+@@ -53,6 +57,9 @@ SECTIONS
+   _etext = .;
+   PROVIDE (etext = .);
+   .fini      : { *(.fini)    } =0x47ff041f
++  /* Thread Local Storage sections  */
++  .tdata	  : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
++  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+   . = ALIGN(32 / 8);
+   PROVIDE (__preinit_array_start = .);
+   .preinit_array     : { *(.preinit_array) }
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/91-oh-sdl-cursor.patch b/packages/qemu/qemu-0.9.0+cvs20070613/91-oh-sdl-cursor.patch
new file mode 100644
index 0000000000..5280a5bd4a
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/91-oh-sdl-cursor.patch
@@ -0,0 +1,18 @@
+=== modified file 'sdl.c'
+---
+ sdl.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: sdl.c
+===================================================================
+--- sdl.c.orig	2007-06-13 11:48:22.000000000 +0100
++++ sdl.c	2007-06-13 11:51:56.000000000 +0100
+@@ -241,7 +241,7 @@ static void sdl_hide_cursor(void)
+ 
+     if (kbd_mouse_is_absolute()) {
+         SDL_ShowCursor(1);
+-        SDL_SetCursor(sdl_cursor_hidden);
++        /* SDL_SetCursor(sdl_cursor_hidden); */
+     } else {
+         SDL_ShowCursor(0);
+     }
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/93-oh-pl110-rgb.patch b/packages/qemu/qemu-0.9.0+cvs20070613/93-oh-pl110-rgb.patch
new file mode 100644
index 0000000000..4911ac131f
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/93-oh-pl110-rgb.patch
@@ -0,0 +1,223 @@
+=== modified file 'hw/pl110.c'
+---
+ hw/pl110.c          |   13 ++++--
+ hw/pl110_template.h |  107 ++++++++++++++++++++++++++++++++++++----------------
+ 2 files changed, 86 insertions(+), 34 deletions(-)
+
+Index: hw/pl110.c
+===================================================================
+--- hw/pl110.c.orig	2007-06-13 11:48:22.000000000 +0100
++++ hw/pl110.c	2007-06-13 11:51:57.000000000 +0100
+@@ -10,6 +10,7 @@
+ #include "vl.h"
+ 
+ #define PL110_CR_EN   0x001
++#define PL110_CR_BGR  0x100
+ #define PL110_CR_BEBO 0x200
+ #define PL110_CR_BEPO 0x400
+ #define PL110_CR_PWR  0x800
+@@ -114,6 +115,7 @@ static void pl110_update_display(void *o
+     int first, last = 0;
+     int dirty, new_dirty;
+     int i;
++    int bpp_offset;
+ 
+     if (!pl110_enabled(s))
+         return;
+@@ -145,12 +147,17 @@ static void pl110_update_display(void *o
+         fprintf(stderr, "pl110: Bad color depth\n");
+         exit(1);
+     }
++    if (s->cr & PL110_CR_BGR)
++	bpp_offset = 0;
++    else
++	bpp_offset = 18;
++
+     if (s->cr & PL110_CR_BEBO)
+-      fn = fntable[s->bpp + 6];
++      fn = fntable[s->bpp + 6 + bpp_offset];
+     else if (s->cr & PL110_CR_BEPO)
+-      fn = fntable[s->bpp + 12];
++      fn = fntable[s->bpp + 12 + bpp_offset];
+     else
+-      fn = fntable[s->bpp];
++      fn = fntable[s->bpp + bpp_offset];
+     
+     src_width = s->cols;
+     switch (s->bpp) {
+Index: hw/pl110_template.h
+===================================================================
+--- hw/pl110_template.h.orig	2007-06-13 11:48:22.000000000 +0100
++++ hw/pl110_template.h	2007-06-13 11:51:57.000000000 +0100
+@@ -24,6 +24,16 @@
+ #error unknown bit depth
+ #endif
+ 
++#undef RGB
++#define BORDER bgr
++#define ORDER 0
++#include "pl110_template.h"
++#define ORDER 1
++#include "pl110_template.h"
++#define ORDER 2
++#include "pl110_template.h"
++#define RGB
++#define BORDER rgb
+ #define ORDER 0
+ #include "pl110_template.h"
+ #define ORDER 1
+@@ -33,26 +43,47 @@
+ 
+ static drawfn glue(pl110_draw_fn_,BITS)[18] =
+ {
+-    glue(pl110_draw_line1_lblp,BITS),
+-    glue(pl110_draw_line2_lblp,BITS),
+-    glue(pl110_draw_line4_lblp,BITS),
+-    glue(pl110_draw_line8_lblp,BITS),
+-    glue(pl110_draw_line16_lblp,BITS),
+-    glue(pl110_draw_line32_lblp,BITS),
++    glue(pl110_draw_line1_lblp_bgr,BITS),
++    glue(pl110_draw_line2_lblp_bgr,BITS),
++    glue(pl110_draw_line4_lblp_bgr,BITS),
++    glue(pl110_draw_line8_lblp_bgr,BITS),
++    glue(pl110_draw_line16_lblp_bgr,BITS),
++    glue(pl110_draw_line32_lblp_bgr,BITS),
+ 
+-    glue(pl110_draw_line1_bbbp,BITS),
+-    glue(pl110_draw_line2_bbbp,BITS),
+-    glue(pl110_draw_line4_bbbp,BITS),
+-    glue(pl110_draw_line8_bbbp,BITS),
+-    glue(pl110_draw_line16_bbbp,BITS),
+-    glue(pl110_draw_line32_bbbp,BITS),
++    glue(pl110_draw_line1_bbbp_bgr,BITS),
++    glue(pl110_draw_line2_bbbp_bgr,BITS),
++    glue(pl110_draw_line4_bbbp_bgr,BITS),
++    glue(pl110_draw_line8_bbbp_bgr,BITS),
++    glue(pl110_draw_line16_bbbp_bgr,BITS),
++    glue(pl110_draw_line32_bbbp_bgr,BITS),
+ 
+-    glue(pl110_draw_line1_lbbp,BITS),
+-    glue(pl110_draw_line2_lbbp,BITS),
+-    glue(pl110_draw_line4_lbbp,BITS),
+-    glue(pl110_draw_line8_lbbp,BITS),
+-    glue(pl110_draw_line16_lbbp,BITS),
+-    glue(pl110_draw_line32_lbbp,BITS)
++    glue(pl110_draw_line1_lbbp_bgr,BITS),
++    glue(pl110_draw_line2_lbbp_bgr,BITS),
++    glue(pl110_draw_line4_lbbp_bgr,BITS),
++    glue(pl110_draw_line8_lbbp_bgr,BITS),
++    glue(pl110_draw_line16_lbbp_bgr,BITS),
++    glue(pl110_draw_line32_lbbp_bgr,BITS),
++
++    glue(pl110_draw_line1_lblp_rgb,BITS),
++    glue(pl110_draw_line2_lblp_rgb,BITS),
++    glue(pl110_draw_line4_lblp_rgb,BITS),
++    glue(pl110_draw_line8_lblp_rgb,BITS),
++    glue(pl110_draw_line16_lblp_rgb,BITS),
++    glue(pl110_draw_line32_lblp_rgb,BITS),
++
++    glue(pl110_draw_line1_bbbp_rgb,BITS),
++    glue(pl110_draw_line2_bbbp_rgb,BITS),
++    glue(pl110_draw_line4_bbbp_rgb,BITS),
++    glue(pl110_draw_line8_bbbp_rgb,BITS),
++    glue(pl110_draw_line16_bbbp_rgb,BITS),
++    glue(pl110_draw_line32_bbbp_rgb,BITS),
++
++    glue(pl110_draw_line1_lbbp_rgb,BITS),
++    glue(pl110_draw_line2_lbbp_rgb,BITS),
++    glue(pl110_draw_line4_lbbp_rgb,BITS),
++    glue(pl110_draw_line8_lbbp_rgb,BITS),
++    glue(pl110_draw_line16_lbbp_rgb,BITS),
++    glue(pl110_draw_line32_lbbp_rgb,BITS),
+ };
+ 
+ #undef BITS
+@@ -61,18 +92,18 @@ static drawfn glue(pl110_draw_fn_,BITS)[
+ #else
+ 
+ #if ORDER == 0
+-#define NAME glue(lblp, BITS)
++#define NAME glue(glue(lblp_, BORDER), BITS)
+ #ifdef WORDS_BIGENDIAN
+ #define SWAP_WORDS 1
+ #endif
+ #elif ORDER == 1
+-#define NAME glue(bbbp, BITS)
++#define NAME glue(glue(bbbp_, BORDER), BITS)
+ #ifndef WORDS_BIGENDIAN
+ #define SWAP_WORDS 1
+ #endif
+ #else
+ #define SWAP_PIXELS 1
+-#define NAME glue(lbbp, BITS)
++#define NAME glue(glue(lbbp_, BORDER), BITS)
+ #ifdef WORDS_BIGENDIAN
+ #define SWAP_WORDS 1
+ #endif
+@@ -195,27 +226,34 @@ static void glue(pl110_draw_line16_,NAME
+ #ifdef SWAP_WORDS
+         data = bswap32(data);
+ #endif
++#ifdef RGB
++#define LSB r
++#define MSB b
++#else
++#define LSB b
++#define MSB r
++#endif
+ #if 0
+-        r = data & 0x1f;
++        LSB = data & 0x1f;
+         data >>= 5;
+         g = data & 0x3f;
+         data >>= 6;
+-        b = data & 0x1f;
++        MSB = data & 0x1f;
+         data >>= 5;
+ #else
+-        r = (data & 0x1f) << 3;
++        LSB = (data & 0x1f) << 3;
+         data >>= 5;
+         g = (data & 0x3f) << 2;
+         data >>= 6;
+-        b = (data & 0x1f) << 3;
++        MSB = (data & 0x1f) << 3;
+         data >>= 5;
+ #endif
+         COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b));
+-        r = (data & 0x1f) << 3;
++        LSB = (data & 0x1f) << 3;
+         data >>= 5;
+         g = (data & 0x3f) << 2;
+         data >>= 6;
+-        b = (data & 0x1f) << 3;
++        MSB = (data & 0x1f) << 3;
+         data >>= 5;
+         COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b));
+         width -= 2;
+@@ -229,14 +267,21 @@ static void glue(pl110_draw_line32_,NAME
+     unsigned int r, g, b;
+     while (width > 0) {
+         data = *(uint32_t *)src;
++#ifdef RGB
++#define LSB r
++#define MSB b
++#else
++#define LSB b
++#define MSB r
++#endif
+ #ifdef SWAP_WORDS
+-        r = data & 0xff;
++        LSB = data & 0xff;
+         g = (data >> 8) & 0xff;
+-        b = (data >> 16) & 0xff;
++        MSB = (data >> 16) & 0xff;
+ #else
+-        r = (data >> 24) & 0xff;
++        LSB = (data >> 24) & 0xff;
+         g = (data >> 16) & 0xff;
+-        b = (data >> 8) & 0xff;
++        MSB = (data >> 8) & 0xff;
+ #endif
+         COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b));
+         width--;
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/arm_nptl.patch b/packages/qemu/qemu-0.9.0+cvs20070613/arm_nptl.patch
new file mode 100644
index 0000000000..f9b10aebc5
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/arm_nptl.patch
@@ -0,0 +1,857 @@
+Index: qemu/configure
+===================================================================
+--- qemu.orig/configure	2006-08-26 16:31:53.000000000 +0100
++++ qemu/configure	2006-08-26 16:31:53.000000000 +0100
+@@ -97,6 +97,7 @@
+ build_docs="no"
+ build_acpi_tables="no"
+ uname_release=""
++nptl="yes"
+ 
+ # OS specific
+ targetos=`uname -s`
+@@ -243,6 +244,8 @@
+   ;;
+   --enable-iasl) build_acpi_tables="yes"
+   ;;
++  --disable-nptl) nptl="no"
++  ;;
+   esac
+ done
+ 
+@@ -441,6 +444,23 @@
+     fi
+ fi
+ 
++# check NPTL support
++cat > $TMPC <<EOF
++#include <sched.h>
++void foo()
++{
++#ifndef CLONE_SETTLS
++#error bork
++#endif
++}
++EOF
++
++if $cc -c -o $TMPO $TMPC 2> /dev/null ; then
++  :
++else
++   nptl="no"
++fi
++
+ ##########################################
+ # SDL probe
+ 
+@@ -559,6 +579,7 @@
+ fi
+ echo "FMOD support      $fmod $fmod_support"
+ echo "kqemu support     $kqemu"
++echo "NPTL support      $nptl"
+ echo "Documentation     $build_docs"
+ [ ! -z "$uname_release" ] && \
+ echo "uname -r          $uname_release"
+@@ -880,6 +901,14 @@
+             echo "SDL_CFLAGS=`$sdl_config --cflags`" >> $config_mak
+         fi
+     fi
++else
++    if test "$nptl" = "yes" ; then
++        case "$target_cpu" in
++          arm | armeb)
++            echo "#define USE_NPTL 1" >> $config_h
++          ;;
++        esac
++    fi
+ fi
+ 
+ if test "$cocoa" = "yes" ; then
+Index: qemu/exec-all.h
+===================================================================
+--- qemu.orig/exec-all.h	2006-08-26 16:28:32.000000000 +0100
++++ qemu/exec-all.h	2006-08-26 16:31:53.000000000 +0100
+@@ -347,163 +347,7 @@
+ extern CPUReadMemoryFunc *io_mem_read[IO_MEM_NB_ENTRIES][4];
+ extern void *io_mem_opaque[IO_MEM_NB_ENTRIES];
+ 
+-#ifdef __powerpc__
+-static inline int testandset (int *p)
+-{
+-    int ret;
+-    __asm__ __volatile__ (
+-                          "0:    lwarx %0,0,%1\n"
+-                          "      xor. %0,%3,%0\n"
+-                          "      bne 1f\n"
+-                          "      stwcx. %2,0,%1\n"
+-                          "      bne- 0b\n"
+-                          "1:    "
+-                          : "=&r" (ret)
+-                          : "r" (p), "r" (1), "r" (0)
+-                          : "cr0", "memory");
+-    return ret;
+-}
+-#endif
+-
+-#ifdef __i386__
+-static inline int testandset (int *p)
+-{
+-    long int readval = 0;
+-    
+-    __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
+-                          : "+m" (*p), "+a" (readval)
+-                          : "r" (1)
+-                          : "cc");
+-    return readval;
+-}
+-#endif
+-
+-#ifdef __x86_64__
+-static inline int testandset (int *p)
+-{
+-    long int readval = 0;
+-    
+-    __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
+-                          : "+m" (*p), "+a" (readval)
+-                          : "r" (1)
+-                          : "cc");
+-    return readval;
+-}
+-#endif
+-
+-#ifdef __s390__
+-static inline int testandset (int *p)
+-{
+-    int ret;
+-
+-    __asm__ __volatile__ ("0: cs    %0,%1,0(%2)\n"
+-			  "   jl    0b"
+-			  : "=&d" (ret)
+-			  : "r" (1), "a" (p), "0" (*p) 
+-			  : "cc", "memory" );
+-    return ret;
+-}
+-#endif
+-
+-#ifdef __alpha__
+-static inline int testandset (int *p)
+-{
+-    int ret;
+-    unsigned long one;
+-
+-    __asm__ __volatile__ ("0:	mov 1,%2\n"
+-			  "	ldl_l %0,%1\n"
+-			  "	stl_c %2,%1\n"
+-			  "	beq %2,1f\n"
+-			  ".subsection 2\n"
+-			  "1:	br 0b\n"
+-			  ".previous"
+-			  : "=r" (ret), "=m" (*p), "=r" (one)
+-			  : "m" (*p));
+-    return ret;
+-}
+-#endif
+-
+-#ifdef __sparc__
+-static inline int testandset (int *p)
+-{
+-	int ret;
+-
+-	__asm__ __volatile__("ldstub	[%1], %0"
+-			     : "=r" (ret)
+-			     : "r" (p)
+-			     : "memory");
+-
+-	return (ret ? 1 : 0);
+-}
+-#endif
+-
+-#ifdef __arm__
+-static inline int testandset (int *spinlock)
+-{
+-    register unsigned int ret;
+-    __asm__ __volatile__("swp %0, %1, [%2]"
+-                         : "=r"(ret)
+-                         : "0"(1), "r"(spinlock));
+-    
+-    return ret;
+-}
+-#endif
+-
+-#ifdef __mc68000
+-static inline int testandset (int *p)
+-{
+-    char ret;
+-    __asm__ __volatile__("tas %1; sne %0"
+-                         : "=r" (ret)
+-                         : "m" (p)
+-                         : "cc","memory");
+-    return ret;
+-}
+-#endif
+-
+-#ifdef __ia64
+-#include <ia64intrin.h>
+-
+-static inline int testandset (int *p)
+-{
+-    return __sync_lock_test_and_set (p, 1);
+-}
+-#endif
+-
+-typedef int spinlock_t;
+-
+-#define SPIN_LOCK_UNLOCKED 0
+-
+-#if defined(CONFIG_USER_ONLY)
+-static inline void spin_lock(spinlock_t *lock)
+-{
+-    while (testandset(lock));
+-}
+-
+-static inline void spin_unlock(spinlock_t *lock)
+-{
+-    *lock = 0;
+-}
+-
+-static inline int spin_trylock(spinlock_t *lock)
+-{
+-    return !testandset(lock);
+-}
+-#else
+-static inline void spin_lock(spinlock_t *lock)
+-{
+-}
+-
+-static inline void spin_unlock(spinlock_t *lock)
+-{
+-}
+-
+-static inline int spin_trylock(spinlock_t *lock)
+-{
+-    return 1;
+-}
+-#endif
++#include "qemu_spinlock.h"
+ 
+ extern spinlock_t tb_lock;
+ 
+Index: qemu/linux-user/arm/syscall.h
+===================================================================
+--- qemu.orig/linux-user/arm/syscall.h	2006-03-09 19:18:11.000000000 +0000
++++ qemu/linux-user/arm/syscall.h	2006-08-26 16:31:53.000000000 +0100
+@@ -28,7 +28,9 @@
+ #define ARM_SYSCALL_BASE	0x900000
+ #define ARM_THUMB_SYSCALL	0
+ 
+-#define ARM_NR_cacheflush (ARM_SYSCALL_BASE + 0xf0000 + 2)
++#define ARM_NR_BASE	  0xf0000
++#define ARM_NR_cacheflush (ARM_NR_BASE + 2)
++#define ARM_NR_set_tls	  (ARM_NR_BASE + 5)
+ 
+ #define ARM_NR_semihosting	  0x123456
+ #define ARM_NR_thumb_semihosting  0xAB
+Index: qemu/linux-user/main.c
+===================================================================
+--- qemu.orig/linux-user/main.c	2006-08-26 16:28:40.000000000 +0100
++++ qemu/linux-user/main.c	2006-08-26 16:31:53.000000000 +0100
+@@ -309,6 +309,50 @@
+     }
+ }
+ 
++/* Handle a jump to the kernel code page.  */
++static int
++do_kernel_trap(CPUARMState *env)
++{
++    uint32_t addr;
++    uint32_t *ptr;
++    uint32_t cpsr;
++
++    switch (env->regs[15]) {
++    case 0xffff0fc0: /* __kernel_cmpxchg */
++        /* XXX: This only works between threads, not between processes.
++           Use native atomic operations.  */
++        /* ??? This probably breaks horribly if the access segfaults.  */
++        cpu_lock();
++        ptr = (uint32_t *)env->regs[2];
++        cpsr = cpsr_read(env);
++        if (*ptr == env->regs[0]) {
++            *ptr = env->regs[1];
++            env->regs[0] = 0;
++            cpsr |= CPSR_C;
++        } else {
++            env->regs[0] = -1;
++            cpsr &= ~CPSR_C;
++        }
++        cpsr_write(env, cpsr, CPSR_C);
++        cpu_unlock();
++        break;
++    case 0xffff0fe0: /* __kernel_get_tls */
++        env->regs[0] = env->cp15.c13_tls;
++        break;
++    default:
++        return 1;
++    }
++    /* Jump back to the caller.  */
++    addr = env->regs[14];
++    if (addr & 1) {
++        env->thumb = 1;
++        addr &= ~1;
++    }
++    env->regs[15] = addr;
++
++    return 0;
++}
++
+ void cpu_loop(CPUARMState *env)
+ {
+     int trapnr;
+@@ -365,10 +409,8 @@
+                     }
+                 }
+ 
+-                if (n == ARM_NR_cacheflush) {
+-                    arm_cache_flush(env->regs[0], env->regs[1]);
+-                } else if (n == ARM_NR_semihosting
+-                           || n == ARM_NR_thumb_semihosting) {
++                if (n == ARM_NR_semihosting
++                    || n == ARM_NR_thumb_semihosting) {
+                     env->regs[0] = do_arm_semihosting (env);
+                 } else if (n == 0 || n >= ARM_SYSCALL_BASE
+                            || (env->thumb && n == ARM_THUMB_SYSCALL)) {
+@@ -379,14 +421,34 @@
+                         n -= ARM_SYSCALL_BASE;
+                         env->eabi = 0;
+                     }
+-                    env->regs[0] = do_syscall(env, 
+-                                              n, 
+-                                              env->regs[0],
+-                                              env->regs[1],
+-                                              env->regs[2],
+-                                              env->regs[3],
+-                                              env->regs[4],
+-                                              env->regs[5]);
++                    if ( n > ARM_NR_BASE) {
++                        switch (n)
++                          {
++                          case ARM_NR_cacheflush:
++                              arm_cache_flush(env->regs[0], env->regs[1]);
++                              break;
++#ifdef USE_NPTL
++                          case ARM_NR_set_tls:
++                              cpu_set_tls(env, env->regs[0]);
++                              env->regs[0] = 0;
++                              break;
++#endif
++                          default:
++                              printf ("Error: Bad syscall: %x\n", n);
++                              goto error;
++                          }
++                      }
++                    else
++                      {
++                        env->regs[0] = do_syscall(env, 
++                                                  n, 
++                                                  env->regs[0],
++                                                  env->regs[1],
++                                                  env->regs[2],
++                                                  env->regs[3],
++                                                  env->regs[4],
++                                                  env->regs[5]);
++                      }
+                 } else {
+                     goto error;
+                 }
+@@ -425,6 +487,10 @@
+                   }
+             }
+             break;
++        case EXCP_KERNEL_TRAP:
++            if (do_kernel_trap(env))
++              goto error;
++            break;
+         default:
+         error:
+             fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n", 
+@@ -1639,6 +1705,10 @@
+         ts->heap_base = info->brk;
+         /* This will be filled in on the first SYS_HEAPINFO call.  */
+         ts->heap_limit = 0;
++        /* Register the magic kernel code page.  The cpu will generate a
++           special exception when it tries to execute code here.  We can't
++           put real code here because it may be in use by the host kernel.  */
++        page_set_flags(0xffff0000, 0xffff0fff, 0);
+     }
+ #elif defined(TARGET_SPARC)
+     {
+Index: qemu/linux-user/qemu.h
+===================================================================
+--- qemu.orig/linux-user/qemu.h	2006-08-26 16:28:40.000000000 +0100
++++ qemu/linux-user/qemu.h	2006-08-26 16:33:50.000000000 +0100
+@@ -75,6 +75,9 @@
+     uint32_t v86mask;
+ #endif
+     int used; /* non zero if used */
++#ifdef USE_NPTL
++    uint32_t *child_tidptr;
++#endif
+     struct image_info *info;
+     uint8_t stack[0];
+ } __attribute__((aligned(16))) TaskState;
+Index: qemu/linux-user/syscall.c
+===================================================================
+--- qemu.orig/linux-user/syscall.c	2006-08-26 16:28:40.000000000 +0100
++++ qemu/linux-user/syscall.c	2006-08-26 16:31:53.000000000 +0100
+@@ -66,9 +66,18 @@
+ #include <linux/kd.h>
+ 
+ #include "qemu.h"
++#include "qemu_spinlock.h"
+ 
+ //#define DEBUG
+ 
++#ifdef USE_NPTL
++#define CLONE_NPTL_FLAGS2 (CLONE_SETTLS | \
++    CLONE_PARENT_SETTID | CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID)
++#else
++/* XXX: Hardcode the above values.  */
++#define CLONE_NPTL_FLAGS2 0
++#endif
++
+ #if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SPARC)
+ /* 16 bit uid wrappers emulation */
+ #define USE_UID16
+@@ -1602,20 +1611,38 @@
+    thread/process */
+ #define NEW_STACK_SIZE 8192
+ 
++#ifdef USE_NPTL
++static spinlock_t nptl_lock = SPIN_LOCK_UNLOCKED;
++#endif
++
+ static int clone_func(void *arg)
+ {
+     CPUState *env = arg;
++#ifdef HAVE_NPTL
++    /* Wait until the parent has finshed initializing the tls state.  */
++    while (!spin_trylock(&nptl_lock))
++        usleep(1);
++    spin_unlock(&nptl_lock);
++#endif
+     cpu_loop(env);
+     /* never exits */
+     return 0;
+ }
+ 
+-int do_fork(CPUState *env, unsigned int flags, unsigned long newsp)
++int do_fork(CPUState *env, unsigned int flags, unsigned long newsp,
++            uint32_t *parent_tidptr, void *newtls,
++            uint32_t *child_tidptr)
+ {
+     int ret;
+     TaskState *ts;
+     uint8_t *new_stack;
+     CPUState *new_env;
++#ifdef USE_NPTL
++    unsigned int nptl_flags;
++
++    if (flags & CLONE_PARENT_SETTID)
++        *parent_tidptr = gettid();
++#endif
+     
+     if (flags & CLONE_VM) {
+         ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE);
+@@ -1665,16 +1692,60 @@
+ #error unsupported target CPU
+ #endif
+         new_env->opaque = ts;
++#ifdef USE_NPTL
++     nptl_flags = flags;
++     flags &= ~CLONE_NPTL_FLAGS2;
++     if (nptl_flags & CLONE_CHILD_CLEARTID) {
++          ts->child_tidptr = child_tidptr;
++     }
++     if (nptl_flags & CLONE_SETTLS)
++         cpu_set_tls (new_env, newtls);
++     /* Grab the global cpu lock so that the thread setup appears
++        atomic.  */
++     if (nptl_flags & CLONE_CHILD_SETTID)
++         spin_lock(&nptl_lock);
++#else
++     if (flags & CLONE_NPTL_FLAGS2)
++         return -EINVAL;
++#endif
++
+ #ifdef __ia64__
+         ret = __clone2(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
+ #else
+ 	ret = clone(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
+ #endif
++#ifdef USE_NPTL
++     if (ret != -1) {
++         if (nptl_flags & CLONE_CHILD_SETTID)
++             *child_tidptr = ret;
++     }
++     /* Allow the child to continue.  */
++     if (nptl_flags & CLONE_CHILD_SETTID)
++         spin_unlock(&nptl_lock);
++#endif
+     } else {
+-        /* if no CLONE_VM, we consider it is a fork */
+-        if ((flags & ~CSIGNAL) != 0)
+-            return -EINVAL;
+-        ret = fork();
++    /* if no CLONE_VM, we consider it is a fork */
++    if ((flags & ~(CSIGNAL | CLONE_NPTL_FLAGS2)) != 0)
++          return -EINVAL;
++      ret = fork();
++#ifdef USE_NPTL
++     /* There is a race condition here.  The parent process could
++        theoretically read the TID in the child process before the child
++        tid is set.  This would require using either ptrace
++        (not implemented) or having *_tidptr to point at a shared memory
++        mapping.  We can't repeat the spinlock hack used above because
++        the child process gets its own copy of the lock.  */
++     if (ret == 0) {
++         /* Child Process.  */
++         if (flags & CLONE_CHILD_SETTID)
++             *child_tidptr = gettid();
++         ts = (TaskState *)env->opaque;
++         if (flags & CLONE_CHILD_CLEARTID)
++             ts->child_tidptr = child_tidptr;
++         if (flags & CLONE_SETTLS)
++             cpu_set_tls (env, newtls);
++     }
++#endif
+     }
+     return ret;
+ }
+@@ -1918,7 +1989,7 @@
+         ret = do_brk(arg1);
+         break;
+     case TARGET_NR_fork:
+-        ret = get_errno(do_fork(cpu_env, SIGCHLD, 0));
++        ret = get_errno(do_fork(cpu_env, SIGCHLD, 0, NULL, NULL, NULL));
+         break;
+     case TARGET_NR_waitpid:
+         {
+@@ -2989,7 +3060,8 @@
+         ret = get_errno(fsync(arg1));
+         break;
+     case TARGET_NR_clone:
+-        ret = get_errno(do_fork(cpu_env, arg1, arg2));
++        ret = get_errno(do_fork(cpu_env, arg1, arg2, (uint32_t *)arg3,
++                        (void *)arg4, (uint32_t *)arg5));
+         break;
+ #ifdef __NR_exit_group
+         /* new thread calls */
+@@ -3339,7 +3411,8 @@
+ #endif
+ #ifdef TARGET_NR_vfork
+     case TARGET_NR_vfork:
+-        ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0));
++        ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0,
++                                NULL, NULL, NULL));
+         break;
+ #endif
+ #ifdef TARGET_NR_ugetrlimit
+@@ -3838,4 +3911,3 @@
+ #endif
+     return ret;
+ }
+-
+Index: qemu/target-arm/cpu.h
+===================================================================
+--- qemu.orig/target-arm/cpu.h	2006-03-09 19:18:27.000000000 +0000
++++ qemu/target-arm/cpu.h	2006-08-26 16:31:53.000000000 +0100
+@@ -35,6 +35,9 @@
+ #define EXCP_IRQ             5
+ #define EXCP_FIQ             6
+ #define EXCP_BKPT            7
++#define EXCP_KERNEL_TRAP     8   /* Jumped to kernel code page.  */
++
++
+ 
+ /* We currently assume float and double are IEEE single and double
+    precision respectively.
+@@ -85,6 +88,7 @@
+         uint32_t c9_data;
+         uint32_t c13_fcse; /* FCSE PID.  */
+         uint32_t c13_context; /* Context ID.  */
++        uint32_t c13_tls; /* Paul Brook told me to just add this ;)  */
+     } cp15;
+ 
+     /* Internal CPU feature flags.  */
+@@ -135,6 +139,15 @@
+ int cpu_arm_signal_handler(int host_signum, struct siginfo *info, 
+                            void *puc);
+ 
++void cpu_lock(void);
++void cpu_unlock(void);
++#if defined(USE_NPTL)
++static inline void cpu_set_tls(CPUARMState *env, void *newtls)
++{
++  env->cp15.c13_tls = (uint32_t)newtls;
++}
++#endif
++
+ #define CPSR_M (0x1f)
+ #define CPSR_T (1 << 5)
+ #define CPSR_F (1 << 6)
+@@ -146,7 +159,11 @@
+ #define CPSR_J (1 << 24)
+ #define CPSR_IT_0_1 (3 << 25)
+ #define CPSR_Q (1 << 27)
+-#define CPSR_NZCV (0xf << 28)
++#define CPSR_V (1 << 28)
++#define CPSR_C (1 << 29)
++#define CPSR_Z (1 << 30)
++#define CPSR_N (1 << 31)
++#define CPSR_NZCV (CPSR_N | CPSR_Z | CPSR_C | CPSR_V)
+ 
+ #define CACHED_CPSR_BITS (CPSR_T | CPSR_Q | CPSR_NZCV)
+ /* Return the current CPSR value.  */
+Index: qemu/target-arm/exec.h
+===================================================================
+--- qemu.orig/target-arm/exec.h	2006-03-09 19:18:27.000000000 +0000
++++ qemu/target-arm/exec.h	2006-08-26 16:31:53.000000000 +0100
+@@ -51,8 +51,6 @@
+ 
+ /* In op_helper.c */
+ 
+-void cpu_lock(void);
+-void cpu_unlock(void);
+ void helper_set_cp15(CPUState *, uint32_t, uint32_t);
+ uint32_t helper_get_cp15(CPUState *, uint32_t);
+ 
+Index: qemu/target-arm/op.c
+===================================================================
+--- qemu.orig/target-arm/op.c	2006-08-26 16:28:48.000000000 +0100
++++ qemu/target-arm/op.c	2006-08-26 16:31:53.000000000 +0100
+@@ -891,6 +891,12 @@
+     cpu_loop_exit();
+ }
+ 
++void OPPROTO op_kernel_trap(void)
++{
++    env->exception_index = EXCP_KERNEL_TRAP;
++    cpu_loop_exit();
++}
++
+ /* VFP support.  We follow the convention used for VFP instrunctions:
+    Single precition routines have a "s" suffix, double precision a
+    "d" suffix.  */
+Index: qemu/target-arm/translate.c
+===================================================================
+--- qemu.orig/target-arm/translate.c	2006-08-26 16:28:48.000000000 +0100
++++ qemu/target-arm/translate.c	2006-08-26 16:31:53.000000000 +0100
+@@ -2382,6 +2382,7 @@
+     s->is_jmp = DISAS_JUMP;
+ }
+ 
++
+ /* generate intermediate code in gen_opc_buf and gen_opparam_buf for
+    basic block 'tb'. If search_pc is TRUE, also generate PC
+    information for each intermediate instruction. */
+@@ -2416,6 +2417,15 @@
+     nb_gen_labels = 0;
+     lj = -1;
+     do {
++#ifdef CONFIG_USER_ONLY
++        /* Intercept jump to the magic kernel page.  */
++        if (dc->pc > 0xffff0000) {
++            gen_op_kernel_trap();
++            dc->is_jmp = DISAS_UPDATE;
++            break;
++        }
++#endif
++
+         if (env->nb_breakpoints > 0) {
+             for(j = 0; j < env->nb_breakpoints; j++) {
+                 if (env->breakpoints[j] == dc->pc) {
+Index: qemu/qemu_spinlock.h
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ qemu/qemu_spinlock.h	2006-08-26 16:31:53.000000000 +0100
+@@ -0,0 +1,182 @@
++/*
++ * internal execution defines for qemu
++ *
++ *  Copyright (c) 2003 Fabrice Bellard
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++ */
++
++#ifndef _QEMU_SPINLOCK_H
++#define _QEMU_SPINLOCK_H
++
++#ifdef __powerpc__
++static inline int testandset (int *p)
++{
++    int ret;
++    __asm__ __volatile__ (
++                          "0:    lwarx %0,0,%1\n"
++                          "      xor. %0,%3,%0\n"
++                          "      bne 1f\n"
++                          "      stwcx. %2,0,%1\n"
++                          "      bne- 0b\n"
++                          "1:    "
++                          : "=&r" (ret)
++                          : "r" (p), "r" (1), "r" (0)
++                          : "cr0", "memory");
++    return ret;
++}
++#endif
++
++#ifdef __i386__
++static inline int testandset (int *p)
++{
++    long int readval = 0;
++
++    __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
++                          : "+m" (*p), "+a" (readval)
++                          : "r" (1)
++                          : "cc");
++    return readval;
++}
++#endif
++
++#ifdef __x86_64__
++static inline int testandset (int *p)
++{
++    long int readval = 0;
++
++    __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
++                          : "+m" (*p), "+a" (readval)
++                          : "r" (1)
++                          : "cc");
++    return readval;
++}
++#endif
++
++#ifdef __s390__
++static inline int testandset (int *p)
++{
++    int ret;
++
++    __asm__ __volatile__ ("0: cs    %0,%1,0(%2)\n"
++                         "   jl    0b"
++                         : "=&d" (ret)
++                         : "r" (1), "a" (p), "0" (*p)
++                         : "cc", "memory" );
++    return ret;
++}
++#endif
++
++#ifdef __alpha__
++static inline int testandset (int *p)
++{
++    int ret;
++    unsigned long one;
++
++    __asm__ __volatile__ ("0:  mov 1,%2\n"
++                         "     ldl_l %0,%1\n"
++                         "     stl_c %2,%1\n"
++                         "     beq %2,1f\n"
++                         ".subsection 2\n"
++                         "1:   br 0b\n"
++                         ".previous"
++                         : "=r" (ret), "=m" (*p), "=r" (one)
++                         : "m" (*p));
++    return ret;
++}
++#endif
++
++#ifdef __sparc__
++static inline int testandset (int *p)
++{
++       int ret;
++
++       __asm__ __volatile__("ldstub    [%1], %0"
++                            : "=r" (ret)
++                            : "r" (p)
++                            : "memory");
++
++       return (ret ? 1 : 0);
++}
++#endif
++
++#ifdef __arm__
++static inline int testandset (int *spinlock)
++{
++    register unsigned int ret;
++    __asm__ __volatile__("swp %0, %1, [%2]"
++                         : "=r"(ret)
++                         : "0"(1), "r"(spinlock));
++
++    return ret;
++}
++#endif
++
++#ifdef __mc68000
++static inline int testandset (int *p)
++{
++    char ret;
++    __asm__ __volatile__("tas %1; sne %0"
++                         : "=r" (ret)
++                         : "m" (p)
++                         : "cc","memory");
++    return ret;
++}
++#endif
++
++#ifdef __ia64
++#include <ia64intrin.h>
++
++static inline int testandset (int *p)
++{
++    return __sync_lock_test_and_set (p, 1);
++}
++#endif
++
++typedef int spinlock_t;
++
++#define SPIN_LOCK_UNLOCKED 0
++
++#if defined(CONFIG_USER_ONLY)
++static inline void spin_lock(spinlock_t *lock)
++{
++    while (testandset(lock));
++}
++
++static inline void spin_unlock(spinlock_t *lock)
++{
++    *lock = 0;
++}
++
++static inline int spin_trylock(spinlock_t *lock)
++{
++    return !testandset(lock);
++}
++#else
++static inline void spin_lock(spinlock_t *lock)
++{
++}
++
++static inline void spin_unlock(spinlock_t *lock)
++{
++}
++
++static inline int spin_trylock(spinlock_t *lock)
++{
++    return 1;
++}
++#endif
++
++#endif /* ! _QEMU_SPINLOCK_H */
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/compiler.patch b/packages/qemu/qemu-0.9.0+cvs20070613/compiler.patch
new file mode 100644
index 0000000000..dad18b3a61
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/compiler.patch
@@ -0,0 +1,10 @@
+--- qemu/usb-linux.c~	2006-07-19 19:06:15.000000000 +0100
++++ qemu/usb-linux.c	2006-10-02 12:49:00.000000000 +0100
+@@ -26,7 +26,6 @@
+ #if defined(__linux__)
+ #include <dirent.h>
+ #include <sys/ioctl.h>
+-#include <linux/compiler.h>
+ #include <linux/usbdevice_fs.h>
+ #include <linux/version.h>
+ 
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/configure.patch b/packages/qemu/qemu-0.9.0+cvs20070613/configure.patch
new file mode 100644
index 0000000000..ea83f8cd6d
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/configure.patch
@@ -0,0 +1,13 @@
+Index: qemu/configure
+===================================================================
+--- qemu.orig/configure	2006-02-09 17:58:47.000000000 +0000
++++ qemu/configure	2006-02-21 17:47:31.000000000 +0000
+@@ -482,7 +482,7 @@
+ fi
+ echo "HOST_CC=$host_cc" >> $config_mak
+ echo "AR=$ar" >> $config_mak
+-echo "STRIP=$strip -s -R .comment -R .note" >> $config_mak
++echo "STRIP=$strip" >> $config_mak
+ echo "CFLAGS=$CFLAGS" >> $config_mak
+ echo "LDFLAGS=$LDFLAGS" >> $config_mak
+ echo "EXESUF=$EXESUF" >> $config_mak
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/fix_segfault.patch b/packages/qemu/qemu-0.9.0+cvs20070613/fix_segfault.patch
new file mode 100644
index 0000000000..976c75cd60
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/fix_segfault.patch
@@ -0,0 +1,46 @@
+Index: qemu/Makefile.target
+===================================================================
+--- qemu.orig/Makefile.target	2007-06-29 10:57:58.000000000 +0000
++++ qemu/Makefile.target	2007-06-29 10:58:01.000000000 +0000
+@@ -241,7 +241,6 @@
+ ifdef CONFIG_LINUX_USER
+ OBJS= main.o syscall.o mmap.o signal.o path.o osdep.o thunk.o \
+       elfload.o linuxload.o
+-LIBS+= $(AIOLIBS)
+ ifdef TARGET_HAS_BFLT
+ OBJS+= flatload.o
+ endif
+Index: qemu/linux-user/syscall.c
+===================================================================
+--- qemu.orig/linux-user/syscall.c	2007-06-29 10:58:01.000000000 +0000
++++ qemu/linux-user/syscall.c	2007-06-29 10:58:30.000000000 +0000
+@@ -4872,29 +4872,6 @@
+            goto unimplemented_nowarn;
+ #endif
+ 
+-#ifdef TARGET_NR_clock_gettime
+-    case TARGET_NR_clock_gettime:
+-    {
+-        struct timespec ts;
+-        ret = get_errno(clock_gettime(arg1, &ts));
+-        if (!is_error(ret)) {
+-            host_to_target_timespec(arg2, &ts);
+-        }
+-        break;
+-    }
+-#endif
+-#ifdef TARGET_NR_clock_getres
+-    case TARGET_NR_clock_getres:
+-    {
+-        struct timespec ts;
+-        ret = get_errno(clock_getres(arg1, &ts));
+-        if (!is_error(ret)) {
+-            host_to_target_timespec(arg2, &ts);
+-        }
+-        break;
+-    }
+-#endif
+-
+     default:
+     unimplemented:
+         gemu_log("qemu: Unsupported syscall: %d\n", num);
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/makefile.patch b/packages/qemu/qemu-0.9.0+cvs20070613/makefile.patch
new file mode 100644
index 0000000000..75b5ac9c71
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/makefile.patch
@@ -0,0 +1,37 @@
+Index: qemu/Makefile
+===================================================================
+--- qemu.orig/Makefile	2007-07-30 18:25:50.000000000 +0200
++++ qemu/Makefile	2007-07-30 18:26:13.000000000 +0200
+@@ -5,14 +5,14 @@
+ .PHONY: all clean distclean dvi info install install-doc tar tarbin \
+ 	speed test test2 html dvi info
+ 
+-CFLAGS=-Wall -O2 -g -fno-strict-aliasing -I.
++CFLAGS+=-Wall -O2 -g -fno-strict-aliasing -I.
+ ifdef CONFIG_DARWIN
+ CFLAGS+= -mdynamic-no-pic
+ endif
+ ifeq ($(ARCH),sparc)
+ CFLAGS+=-mcpu=ultrasparc
+ endif
+-LDFLAGS=-g
++LDFLAGS+=-g
+ LIBS=
+ DEFINES+=-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
+ TOOLS=qemu-img$(EXESUF)
+Index: qemu/Makefile.target
+===================================================================
+--- qemu.orig/Makefile.target	2007-07-30 18:27:17.000000000 +0200
++++ qemu/Makefile.target	2007-07-30 18:27:23.000000000 +0200
+@@ -17,9 +17,9 @@
+ VPATH+=:$(SRC_PATH)/linux-user
+ DEFINES+=-I$(SRC_PATH)/linux-user -I$(SRC_PATH)/linux-user/$(TARGET_ARCH)
+ endif
+-CFLAGS=-Wall -O2 -g -fno-strict-aliasing
++CFLAGS+=-Wall -O2 -g -fno-strict-aliasing
+ #CFLAGS+=-Werror
+-LDFLAGS=-g
++LDFLAGS+=-g
+ LIBS=
+ HELPER_CFLAGS=$(CFLAGS)
+ DYNGEN=../dyngen$(EXESUF)
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/no-strip.patch b/packages/qemu/qemu-0.9.0+cvs20070613/no-strip.patch
new file mode 100644
index 0000000000..59ed8771fe
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/no-strip.patch
@@ -0,0 +1,22 @@
+--- qemu.orig/Makefile
++++ qemu/Makefile
+@@ -68,7 +68,7 @@
+ 
+ install: all $(if $(BUILD_DOCS),install-doc)
+ 	mkdir -p "$(DESTDIR)$(bindir)"
+-	$(INSTALL) -m 755 -s $(TOOLS) "$(DESTDIR)$(bindir)"
++	$(INSTALL) -m 755 $(TOOLS) "$(DESTDIR)$(bindir)"
+ 	mkdir -p "$(DESTDIR)$(datadir)"
+ 	for x in bios.bin vgabios.bin vgabios-cirrus.bin ppc_rom.bin \
+ 		video.x openbios-sparc32 pxe-ne2k_pci.bin \
+--- qemu.orig/Makefile.target
++++ qemu/Makefile.target
+@@ -655,7 +655,7 @@
+ 
+ install: all 
+ ifneq ($(PROGS),)
+-	$(INSTALL) -m 755 -s $(PROGS) "$(DESTDIR)$(bindir)"
++	$(INSTALL) -m 755 $(PROGS) "$(DESTDIR)$(bindir)"
+ endif
+ 
+ ifneq ($(wildcard .depend),)
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/pl110_rgb-r0.patch b/packages/qemu/qemu-0.9.0+cvs20070613/pl110_rgb-r0.patch
new file mode 100644
index 0000000000..09e5898d3a
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/pl110_rgb-r0.patch
@@ -0,0 +1,219 @@
+Index: qemu/hw/pl110.c
+===================================================================
+--- qemu.orig/hw/pl110.c	2006-04-11 21:49:46.000000000 +0100
++++ qemu/hw/pl110.c	2006-05-24 22:53:00.000000000 +0100
+@@ -10,6 +10,7 @@
+ #include "vl.h"
+ 
+ #define PL110_CR_EN   0x001
++#define PL110_CR_BGR  0x100
+ #define PL110_CR_BEBO 0x200
+ #define PL110_CR_BEPO 0x400
+ #define PL110_CR_PWR  0x800
+@@ -115,6 +116,7 @@
+     int first, last = 0;
+     int dirty, new_dirty;
+     int i;
++    int bpp_offset;
+ 
+     if (!pl110_enabled(s))
+         return;
+@@ -146,12 +148,17 @@
+         fprintf(stderr, "pl110: Bad color depth\n");
+         exit(1);
+     }
++    if (s->cr & PL110_CR_BGR)
++	bpp_offset = 0;
++    else
++	bpp_offset = 18;
++
+     if (s->cr & PL110_CR_BEBO)
+-      fn = fntable[s->bpp + 6];
++      fn = fntable[s->bpp + 6 + bpp_offset];
+     else if (s->cr & PL110_CR_BEPO)
+-      fn = fntable[s->bpp + 12];
++      fn = fntable[s->bpp + 12 + bpp_offset];
+     else
+-      fn = fntable[s->bpp];
++      fn = fntable[s->bpp + bpp_offset];
+     
+     src_width = s->cols;
+     switch (s->bpp) {
+Index: qemu/hw/pl110_template.h
+===================================================================
+--- qemu.orig/hw/pl110_template.h	2006-02-19 12:31:32.000000000 +0000
++++ qemu/hw/pl110_template.h	2006-05-24 23:04:03.000000000 +0100
+@@ -24,6 +24,16 @@
+ #error unknown bit depth
+ #endif
+ 
++#undef RGB
++#define BORDER bgr
++#define ORDER 0
++#include "pl110_template.h"
++#define ORDER 1
++#include "pl110_template.h"
++#define ORDER 2
++#include "pl110_template.h"
++#define RGB
++#define BORDER rgb
+ #define ORDER 0
+ #include "pl110_template.h"
+ #define ORDER 1
+@@ -33,26 +43,47 @@
+ 
+ static drawfn glue(pl110_draw_fn_,BITS)[18] =
+ {
+-    glue(pl110_draw_line1_lblp,BITS),
+-    glue(pl110_draw_line2_lblp,BITS),
+-    glue(pl110_draw_line4_lblp,BITS),
+-    glue(pl110_draw_line8_lblp,BITS),
+-    glue(pl110_draw_line16_lblp,BITS),
+-    glue(pl110_draw_line32_lblp,BITS),
+-
+-    glue(pl110_draw_line1_bbbp,BITS),
+-    glue(pl110_draw_line2_bbbp,BITS),
+-    glue(pl110_draw_line4_bbbp,BITS),
+-    glue(pl110_draw_line8_bbbp,BITS),
+-    glue(pl110_draw_line16_bbbp,BITS),
+-    glue(pl110_draw_line32_bbbp,BITS),
+-
+-    glue(pl110_draw_line1_lbbp,BITS),
+-    glue(pl110_draw_line2_lbbp,BITS),
+-    glue(pl110_draw_line4_lbbp,BITS),
+-    glue(pl110_draw_line8_lbbp,BITS),
+-    glue(pl110_draw_line16_lbbp,BITS),
+-    glue(pl110_draw_line32_lbbp,BITS)
++    glue(pl110_draw_line1_lblp_bgr,BITS),
++    glue(pl110_draw_line2_lblp_bgr,BITS),
++    glue(pl110_draw_line4_lblp_bgr,BITS),
++    glue(pl110_draw_line8_lblp_bgr,BITS),
++    glue(pl110_draw_line16_lblp_bgr,BITS),
++    glue(pl110_draw_line32_lblp_bgr,BITS),
++
++    glue(pl110_draw_line1_bbbp_bgr,BITS),
++    glue(pl110_draw_line2_bbbp_bgr,BITS),
++    glue(pl110_draw_line4_bbbp_bgr,BITS),
++    glue(pl110_draw_line8_bbbp_bgr,BITS),
++    glue(pl110_draw_line16_bbbp_bgr,BITS),
++    glue(pl110_draw_line32_bbbp_bgr,BITS),
++
++    glue(pl110_draw_line1_lbbp_bgr,BITS),
++    glue(pl110_draw_line2_lbbp_bgr,BITS),
++    glue(pl110_draw_line4_lbbp_bgr,BITS),
++    glue(pl110_draw_line8_lbbp_bgr,BITS),
++    glue(pl110_draw_line16_lbbp_bgr,BITS),
++    glue(pl110_draw_line32_lbbp_bgr,BITS),
++
++    glue(pl110_draw_line1_lblp_rgb,BITS),
++    glue(pl110_draw_line2_lblp_rgb,BITS),
++    glue(pl110_draw_line4_lblp_rgb,BITS),
++    glue(pl110_draw_line8_lblp_rgb,BITS),
++    glue(pl110_draw_line16_lblp_rgb,BITS),
++    glue(pl110_draw_line32_lblp_rgb,BITS),
++
++    glue(pl110_draw_line1_bbbp_rgb,BITS),
++    glue(pl110_draw_line2_bbbp_rgb,BITS),
++    glue(pl110_draw_line4_bbbp_rgb,BITS),
++    glue(pl110_draw_line8_bbbp_rgb,BITS),
++    glue(pl110_draw_line16_bbbp_rgb,BITS),
++    glue(pl110_draw_line32_bbbp_rgb,BITS),
++
++    glue(pl110_draw_line1_lbbp_rgb,BITS),
++    glue(pl110_draw_line2_lbbp_rgb,BITS),
++    glue(pl110_draw_line4_lbbp_rgb,BITS),
++    glue(pl110_draw_line8_lbbp_rgb,BITS),
++    glue(pl110_draw_line16_lbbp_rgb,BITS),
++    glue(pl110_draw_line32_lbbp_rgb,BITS),
+ };
+ 
+ #undef BITS
+@@ -61,18 +92,18 @@
+ #else
+ 
+ #if ORDER == 0
+-#define NAME glue(lblp, BITS)
++#define NAME glue(glue(lblp_, BORDER), BITS)
+ #ifdef WORDS_BIGENDIAN
+ #define SWAP_WORDS 1
+ #endif
+ #elif ORDER == 1
+-#define NAME glue(bbbp, BITS)
++#define NAME glue(glue(bbbp_, BORDER), BITS)
+ #ifndef WORDS_BIGENDIAN
+ #define SWAP_WORDS 1
+ #endif
+ #else
+ #define SWAP_PIXELS 1
+-#define NAME glue(lbbp, BITS)
++#define NAME glue(glue(lbbp_, BORDER), BITS)
+ #ifdef WORDS_BIGENDIAN
+ #define SWAP_WORDS 1
+ #endif
+@@ -195,27 +226,34 @@
+ #ifdef SWAP_WORDS
+         data = bswap32(data);
+ #endif
++#ifdef RGB
++#define LSB r
++#define MSB b
++#else
++#define LSB b
++#define MSB r
++#endif
+ #if 0
+-        r = data & 0x1f;
++        LSB = data & 0x1f;
+         data >>= 5;
+         g = data & 0x3f;
+         data >>= 6;
+-        b = data & 0x1f;
++        MSB = data & 0x1f;
+         data >>= 5;
+ #else
+-        r = (data & 0x1f) << 3;
++        LSB = (data & 0x1f) << 3;
+         data >>= 5;
+         g = (data & 0x3f) << 2;
+         data >>= 6;
+-        b = (data & 0x1f) << 3;
++        MSB = (data & 0x1f) << 3;
+         data >>= 5;
+ #endif
+         COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b));
+-        r = (data & 0x1f) << 3;
++        LSB = (data & 0x1f) << 3;
+         data >>= 5;
+         g = (data & 0x3f) << 2;
+         data >>= 6;
+-        b = (data & 0x1f) << 3;
++        MSB = (data & 0x1f) << 3;
+         data >>= 5;
+         COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b));
+         width -= 2;
+@@ -229,14 +267,21 @@
+     unsigned int r, g, b;
+     while (width > 0) {
+         data = *(uint32_t *)src;
++#ifdef RGB
++#define LSB r
++#define MSB b
++#else
++#define LSB b
++#define MSB r
++#endif
+ #ifdef SWAP_WORDS
+-        r = data & 0xff;
++        LSB = data & 0xff;
+         g = (data >> 8) & 0xff;
+-        b = (data >> 16) & 0xff;
++        MSB = (data >> 16) & 0xff;
+ #else
+-        r = (data >> 24) & 0xff;
++        LSB = (data >> 24) & 0xff;
+         g = (data >> 16) & 0xff;
+-        b = (data >> 8) & 0xff;
++        MSB = (data >> 8) & 0xff;
+ #endif
+         COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b));
+         width--;
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/qemu-0.9.0-nptl-update.patch b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-0.9.0-nptl-update.patch
new file mode 100644
index 0000000000..869acba2cf
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-0.9.0-nptl-update.patch
@@ -0,0 +1,294 @@
+Index: qemu/linux-user/main.c
+===================================================================
+--- qemu.orig/linux-user/main.c	2007-06-29 10:47:58.000000000 +0000
++++ qemu/linux-user/main.c	2007-06-29 10:47:58.000000000 +0000
+@@ -156,7 +156,7 @@
+     p[1] = tswapl(e2);
+ }
+ 
+-uint64_t gdt_table[6];
++uint64_t gdt_table[9];
+ uint64_t idt_table[256];
+ 
+ /* only dpl matters as we do only user space emulation */
+@@ -1768,7 +1768,11 @@
+     int optind;
+     const char *r;
+     int gdbstub_port = 0;
+-    
++    char *assume_kernel = getenv("QEMU_ASSUME_KERNEL");
++
++    if (assume_kernel)
++       setenv("LD_ASSUME_KERNEL", assume_kernel, 1);
++
+     if (argc <= 1)
+         usage();
+ 
+Index: qemu/linux-user/syscall.c
+===================================================================
+--- qemu.orig/linux-user/syscall.c	2007-06-29 10:47:58.000000000 +0000
++++ qemu/linux-user/syscall.c	2007-06-29 10:53:44.000000000 +0000
+@@ -60,6 +60,7 @@
+ #define tchars host_tchars /* same as target */
+ #define ltchars host_ltchars /* same as target */
+ 
++#include <linux/futex.h>
+ #include <linux/termios.h>
+ #include <linux/unistd.h>
+ #include <linux/utsname.h>
+@@ -2122,6 +2123,80 @@
+     return ret;
+ }
+ 
++int do_set_thread_area(CPUX86State *env, target_ulong ptr)
++{
++    uint64_t *gdt_table = g2h(env->gdt.base);
++    struct target_modify_ldt_ldt_s ldt_info;
++    struct target_modify_ldt_ldt_s *target_ldt_info;
++    int seg_32bit, contents, read_exec_only, limit_in_pages;
++    int seg_not_present, useable;
++    uint32_t *lp, entry_1, entry_2;
++    int i;
++
++    lock_user_struct(target_ldt_info, ptr, 1);
++    ldt_info.entry_number = tswap32(target_ldt_info->entry_number);
++    ldt_info.base_addr = tswapl(target_ldt_info->base_addr);
++    ldt_info.limit = tswap32(target_ldt_info->limit);
++    ldt_info.flags = tswap32(target_ldt_info->flags);
++    if (ldt_info.entry_number == -1) {
++           for (i=6; i<8; i++)
++                   if (gdt_table[i] == 0) {
++                           ldt_info.entry_number = i;
++                           target_ldt_info->entry_number = tswap32(i);
++                           break;
++                   }
++    }
++    unlock_user_struct(target_ldt_info, ptr, 0);
++    
++    if (ldt_info.entry_number < 6 || ldt_info.entry_number > 8)
++           return -EINVAL;
++    seg_32bit = ldt_info.flags & 1;
++    contents = (ldt_info.flags >> 1) & 3;
++    read_exec_only = (ldt_info.flags >> 3) & 1;
++    limit_in_pages = (ldt_info.flags >> 4) & 1;
++    seg_not_present = (ldt_info.flags >> 5) & 1;
++    useable = (ldt_info.flags >> 6) & 1;
++
++    if (contents == 3) {
++        if (seg_not_present == 0)
++            return -EINVAL;
++    }
++
++    /* NOTE: same code as Linux kernel */
++    /* Allow LDTs to be cleared by the user. */
++    if (ldt_info.base_addr == 0 && ldt_info.limit == 0) {
++        if ((contents == 0             &&
++             read_exec_only == 1       &&
++             seg_32bit == 0            &&
++             limit_in_pages == 0       &&
++             seg_not_present == 1      &&
++             useable == 0 )) {
++            entry_1 = 0;
++            entry_2 = 0;
++            goto install;
++        }
++    }
++    
++    entry_1 = ((ldt_info.base_addr & 0x0000ffff) << 16) |
++        (ldt_info.limit & 0x0ffff);
++    entry_2 = (ldt_info.base_addr & 0xff000000) |
++        ((ldt_info.base_addr & 0x00ff0000) >> 16) |
++        (ldt_info.limit & 0xf0000) |
++        ((read_exec_only ^ 1) << 9) |
++        (contents << 10) |
++        ((seg_not_present ^ 1) << 15) |
++        (seg_32bit << 22) |
++        (limit_in_pages << 23) |
++       (useable << 20) |
++       0x7000;
++
++    /* Install the new entry ...  */
++install:
++    lp = (uint32_t *)(gdt_table + ldt_info.entry_number);
++    lp[0] = tswap32(entry_1);
++    lp[1] = tswap32(entry_2);
++    return 0;
++}
+ #endif /* defined(TARGET_I386) */
+ 
+ /* this stack is the equivalent of the kernel stack associated with a
+@@ -2154,15 +2229,20 @@
+     TaskState *ts;
+     uint8_t *new_stack;
+     CPUState *new_env;
++#if defined(TARGET_I386)
++       uint64_t *new_gdt_table;
++#endif
+ #ifdef USE_NPTL
+     unsigned int nptl_flags;
+ 
+     if (flags & CLONE_PARENT_SETTID)
+         *parent_tidptr = gettid();
+ #endif
+-    
++
+     if (flags & CLONE_VM) {
+         ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE);
++               if (!ts)
++                       return -ENOMEM;
+         memset(ts, 0, sizeof(TaskState));
+         new_stack = ts->stack;
+         ts->used = 1;
+@@ -2174,6 +2254,29 @@
+ #if defined(TARGET_I386)
+         if (!newsp)
+             newsp = env->regs[R_ESP];
++       new_gdt_table = malloc(9 * 8);
++       if (!new_gdt_table) {
++               free(new_env);
++               return -ENOMEM;
++       }
++       /* Copy main GDT table from parent, but clear TLS entries */
++       memcpy(new_gdt_table, g2h(env->gdt.base), 6 * 8);
++       memset(&new_gdt_table[6], 0, 3 * 8); 
++       new_env->gdt.base = h2g(new_gdt_table);
++       if (flags & 0x00080000 /* CLONE_SETTLS */) {
++               ret = do_set_thread_area(new_env, new_env->regs[R_ESI]);
++               if (ret) {
++                       free(new_gdt_table);
++                       free(new_env);
++                       return ret;
++               }
++       }
++       cpu_x86_load_seg(env, R_CS, new_env->regs[R_CS]);
++       cpu_x86_load_seg(env, R_DS, new_env->regs[R_DS]);
++       cpu_x86_load_seg(env, R_ES, new_env->regs[R_ES]);
++       cpu_x86_load_seg(env, R_SS, new_env->regs[R_SS]);
++       cpu_x86_load_seg(env, R_FS, new_env->regs[R_FS]);
++       cpu_x86_load_seg(env, R_GS, new_env->regs[R_GS]);
+         new_env->regs[R_ESP] = newsp;
+         new_env->regs[R_EAX] = 0;
+ #elif defined(TARGET_ARM)
+@@ -2517,6 +2620,68 @@
+     unlock_user_struct(target_ts, target_addr, 1);
+ }
+ 
++static long do_futex(target_ulong uaddr, int op, uint32_t val,
++                    target_ulong utime, target_ulong uaddr2,
++                    uint32_t val3)
++{
++       struct timespec host_utime;
++       unsigned long val2 = utime;
++
++       if (utime && (op == FUTEX_WAIT || op == FUTEX_LOCK_PI)) {
++               target_to_host_timespec(&host_utime, utime);
++               val2 = (unsigned long)&host_utime;
++       }
++ 
++#ifdef BSWAP_NEEDED
++       switch(op) {
++       case FUTEX_CMP_REQUEUE:
++               val3 = tswap32(val3);
++       case FUTEX_REQUEUE:
++               val2 = tswap32(val2);
++       case FUTEX_WAIT:
++       case FUTEX_WAKE:
++               val = tswap32(val);
++       case FUTEX_LOCK_PI: /* This one's icky, but comes out OK */
++       case FUTEX_UNLOCK_PI:
++               break;
++       default: 
++               gemu_log("qemu: Unsupported futex op %d\n", op);
++               return -ENOSYS;
++       } 
++#if 0 /* No, it's worse than this */
++       if (op == FUTEX_WAKE_OP) {
++               /* Need to munge the secondary operation (val3) */
++               val3 = tswap32(val3);
++               int op2 = (val3 >> 28) & 7;
++               int cmp = (val3 >> 24) & 15;
++               int oparg = (val3 << 8) >> 20;
++               int cmparg = (val3 << 20) >> 20;
++               int shift = val3 & (FUTEX_OP_OPARG_SHIFT << 28);
++
++               if (shift)
++                   oparg = (oparg & 7) + 24 - (oparg & 24);
++               else oparg = 
++               if (op2 == FUTEX_OP_ADD) {
++                       gemu_log("qemu: Unsupported wrong-endian FUTEX_OP_ADD\n");
++                       return -ENOSYS;
++               }
++               if (cmparg == FUTEX_OP_CMP_LT || cmparg == FUTEX_OP_CMP_GE ||
++                   cmparg == FUTEX_OP_CMP_LE || cmparg == FUTEX_OP_CMP_GT) {
++                       gemu_log("qemu: Unsupported wrong-endian futex cmparg %d\n", cmparg);
++                       return -ENOSYS;
++               }
++               val3 = shift | (op2<<28) | (cmp<<24) | (oparg<<12) | cmparg;
++       }
++#endif
++#endif
++       return syscall(__NR_futex, g2h(uaddr), op, val, val2, g2h(uaddr2), val3);
++}
++
++int do_set_tid_address(target_ulong tidptr)
++{
++       return syscall(__NR_set_tid_address, g2h(tidptr));
++}
++
+ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3, 
+                 long arg4, long arg5, long arg6)
+ {
+@@ -2534,7 +2699,7 @@
+         _mcleanup();
+ #endif
+         gdb_exit(cpu_env, arg1);
+-        /* XXX: should free thread stack and CPU env */
++        /* XXX: should free thread stack, GDT and CPU env */
+         _exit(arg1);
+         ret = 0; /* avoid warning */
+         break;
+@@ -4642,6 +4807,9 @@
+       ((CPUMIPSState *) cpu_env)->tls_value = arg1;
+       ret = 0;
+       break;
++#elif TARGET_i386
++	  ret = get_errno(do_set_thread_area(cpu_env, arg1));
++	  break;
+ #else
+       goto unimplemented_nowarn;
+ #endif
+@@ -4655,6 +4823,21 @@
+         goto unimplemented_nowarn;
+ #endif
+ 
++#ifdef TARGET_NR_futex
++    case TARGET_NR_futex:
++       ret = get_errno(do_futex(arg1, arg2, arg3, arg4, arg5, arg6));
++       break;
++#endif
++#ifdef TARGET_NR_set_tid_address
++    case TARGET_NR_set_tid_address:
++        ret = get_errno(do_set_tid_address(arg1));
++       break;
++#endif
++#ifdef TARGET_NR_set_robust_list
++    case TARGET_NR_set_robust_list:
++           goto unimplemented_nowarn;
++#endif
++
+ #ifdef TARGET_NR_clock_gettime
+     case TARGET_NR_clock_gettime:
+     {
+@@ -4678,12 +4861,6 @@
+     }
+ #endif
+ 
+-#if defined(TARGET_NR_set_tid_address) && defined(__NR_set_tid_address)
+-    case TARGET_NR_set_tid_address:
+-      ret = get_errno(set_tid_address((int *) arg1));
+-      break;
+-#endif
+-
+     default:
+     unimplemented:
+         gemu_log("qemu: Unsupported syscall: %d\n", num);
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/qemu-0.9.0-nptl.patch b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-0.9.0-nptl.patch
new file mode 100644
index 0000000000..fc7b0cfa4b
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-0.9.0-nptl.patch
@@ -0,0 +1,892 @@
+These are Paul Brook's patches to QEMU-0.8.2 to enable the running of single
+ARM binaries under QEMU's user-emulation mode. Without them, QEMU-0.8.1
+immediately dies saying:
+	Error: f0005
+	qemu: uncaught target signal 6 (Aborted) - exiting
+while qemu-0.8.2 dies saying:
+	qemu: Unsupported syscall: 983045
+	cannot set up thread-local storage: unknown error
+
+This file is a rediffing of the patches visible at
+https://nowt.dyndns.org/patch.qemu_nptl on 27 Sept 2006
+which "patch" fails to apply automatically.
+See also http://lists.gnu.org/archive/html/qemu-devel/2006-09/msg00194.html
+
+	Martin Guy, 27 Sept 2006
+
+Index: qemu/configure
+===================================================================
+--- qemu.orig/configure	2007-06-29 10:47:39.000000000 +0000
++++ qemu/configure	2007-06-29 10:47:58.000000000 +0000
+@@ -101,6 +101,7 @@
+ darwin_user="no"
+ build_docs="no"
+ uname_release=""
++nptl="yes"
+ 
+ # OS specific
+ targetos=`uname -s`
+@@ -281,6 +282,8 @@
+         *)     echo "undefined SPARC architecture. Exiting";exit 1;;
+       esac
+   ;;
++  --disable-nptl) nptl="no"
++  ;;
+   esac
+ done
+ 
+@@ -355,6 +358,7 @@
+ echo "  --disable-linux-user     disable all linux usermode emulation targets"
+ echo "  --enable-darwin-user     enable all darwin usermode emulation targets"
+ echo "  --disable-darwin-user    disable all darwin usermode emulation targets"
++echo "  --disable-nptl           disable usermode NPTL guest support"
+ echo "  --fmod-lib               path to FMOD library"
+ echo "  --fmod-inc               path to FMOD includes"
+ echo "  --enable-uname-release=R Return R for uname -r in usermode emulation"
+@@ -524,6 +528,23 @@
+ }
+ EOF
+ 
++# check NPTL support
++cat > $TMPC <<EOF
++#include <sched.h>
++void foo()
++{
++#ifndef CLONE_SETTLS
++#error bork
++#endif
++}
++EOF
++
++if $cc -c -o $TMPO $TMPC 2> /dev/null ; then
++  :
++else
++   nptl="no"
++fi
++
+ ##########################################
+ # SDL probe
+ 
+@@ -678,6 +699,7 @@
+ echo "Documentation     $build_docs"
+ [ ! -z "$uname_release" ] && \
+ echo "uname -r          $uname_release"
++echo "NPTL support      $nptl"
+ 
+ if test $sdl_too_old = "yes"; then
+ echo "-> Your SDL version is too old - please upgrade to have SDL support"
+@@ -1057,6 +1079,14 @@
+             echo "SDL_CFLAGS=`$sdl_config --cflags`" >> $config_mak
+         fi
+     fi
++else
++    if test "$nptl" = "yes" ; then
++        case "$target_cpu" in
++          arm | armeb)
++            echo "#define USE_NPTL 1" >> $config_h
++          ;;
++        esac
++    fi
+ fi
+ 
+ if test "$cocoa" = "yes" ; then
+Index: qemu/exec-all.h
+===================================================================
+--- qemu.orig/exec-all.h	2007-06-29 10:47:39.000000000 +0000
++++ qemu/exec-all.h	2007-06-29 10:47:58.000000000 +0000
+@@ -360,170 +360,7 @@
+ extern CPUReadMemoryFunc *io_mem_read[IO_MEM_NB_ENTRIES][4];
+ extern void *io_mem_opaque[IO_MEM_NB_ENTRIES];
+ 
+-#if defined(__powerpc__)
+-static inline int testandset (int *p)
+-{
+-    int ret;
+-    __asm__ __volatile__ (
+-                          "0:    lwarx %0,0,%1\n"
+-                          "      xor. %0,%3,%0\n"
+-                          "      bne 1f\n"
+-                          "      stwcx. %2,0,%1\n"
+-                          "      bne- 0b\n"
+-                          "1:    "
+-                          : "=&r" (ret)
+-                          : "r" (p), "r" (1), "r" (0)
+-                          : "cr0", "memory");
+-    return ret;
+-}
+-#elif defined(__i386__)
+-static inline int testandset (int *p)
+-{
+-    long int readval = 0;
+-    
+-    __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
+-                          : "+m" (*p), "+a" (readval)
+-                          : "r" (1)
+-                          : "cc");
+-    return readval;
+-}
+-#elif defined(__x86_64__)
+-static inline int testandset (int *p)
+-{
+-    long int readval = 0;
+-    
+-    __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
+-                          : "+m" (*p), "+a" (readval)
+-                          : "r" (1)
+-                          : "cc");
+-    return readval;
+-}
+-#elif defined(__s390__)
+-static inline int testandset (int *p)
+-{
+-    int ret;
+-
+-    __asm__ __volatile__ ("0: cs    %0,%1,0(%2)\n"
+-			  "   jl    0b"
+-			  : "=&d" (ret)
+-			  : "r" (1), "a" (p), "0" (*p) 
+-			  : "cc", "memory" );
+-    return ret;
+-}
+-#elif defined(__alpha__)
+-static inline int testandset (int *p)
+-{
+-    int ret;
+-    unsigned long one;
+-
+-    __asm__ __volatile__ ("0:	mov 1,%2\n"
+-			  "	ldl_l %0,%1\n"
+-			  "	stl_c %2,%1\n"
+-			  "	beq %2,1f\n"
+-			  ".subsection 2\n"
+-			  "1:	br 0b\n"
+-			  ".previous"
+-			  : "=r" (ret), "=m" (*p), "=r" (one)
+-			  : "m" (*p));
+-    return ret;
+-}
+-#elif defined(__sparc__)
+-static inline int testandset (int *p)
+-{
+-	int ret;
+-
+-	__asm__ __volatile__("ldstub	[%1], %0"
+-			     : "=r" (ret)
+-			     : "r" (p)
+-			     : "memory");
+-
+-	return (ret ? 1 : 0);
+-}
+-#elif defined(__arm__)
+-static inline int testandset (int *spinlock)
+-{
+-    register unsigned int ret;
+-    __asm__ __volatile__("swp %0, %1, [%2]"
+-                         : "=r"(ret)
+-                         : "0"(1), "r"(spinlock));
+-    
+-    return ret;
+-}
+-#elif defined(__mc68000)
+-static inline int testandset (int *p)
+-{
+-    char ret;
+-    __asm__ __volatile__("tas %1; sne %0"
+-                         : "=r" (ret)
+-                         : "m" (p)
+-                         : "cc","memory");
+-    return ret;
+-}
+-#elif defined(__ia64)
+-
+-#include <ia64intrin.h>
+-
+-static inline int testandset (int *p)
+-{
+-    return __sync_lock_test_and_set (p, 1);
+-}
+-#elif defined(__mips__)
+-static inline int testandset (int *p)
+-{
+-    int ret;
+-
+-    __asm__ __volatile__ (
+-	"	.set push		\n"
+-	"	.set noat		\n"
+-	"	.set mips2		\n"
+-	"1:	li	$1, 1		\n"
+-	"	ll	%0, %1		\n"
+-	"	sc	$1, %1		\n"
+-	"	beqz	$1, 1b		\n"
+-	"	.set pop		"
+-	: "=r" (ret), "+R" (*p)
+-	:
+-	: "memory");
+-
+-    return ret;
+-}
+-#else
+-#error unimplemented CPU support
+-#endif
+-
+-typedef int spinlock_t;
+-
+-#define SPIN_LOCK_UNLOCKED 0
+-
+-#if defined(CONFIG_USER_ONLY)
+-static inline void spin_lock(spinlock_t *lock)
+-{
+-    while (testandset(lock));
+-}
+-
+-static inline void spin_unlock(spinlock_t *lock)
+-{
+-    *lock = 0;
+-}
+-
+-static inline int spin_trylock(spinlock_t *lock)
+-{
+-    return !testandset(lock);
+-}
+-#else
+-static inline void spin_lock(spinlock_t *lock)
+-{
+-}
+-
+-static inline void spin_unlock(spinlock_t *lock)
+-{
+-}
+-
+-static inline int spin_trylock(spinlock_t *lock)
+-{
+-    return 1;
+-}
+-#endif
++#include "qemu_spinlock.h"
+ 
+ extern spinlock_t tb_lock;
+ 
+Index: qemu/linux-user/arm/syscall.h
+===================================================================
+--- qemu.orig/linux-user/arm/syscall.h	2007-06-29 10:47:39.000000000 +0000
++++ qemu/linux-user/arm/syscall.h	2007-06-29 10:47:58.000000000 +0000
+@@ -28,7 +28,9 @@
+ #define ARM_SYSCALL_BASE	0x900000
+ #define ARM_THUMB_SYSCALL	0
+ 
+-#define ARM_NR_cacheflush (ARM_SYSCALL_BASE + 0xf0000 + 2)
++#define ARM_NR_BASE	  0xf0000
++#define ARM_NR_cacheflush (ARM_NR_BASE + 2)
++#define ARM_NR_set_tls	  (ARM_NR_BASE + 5)
+ 
+ #define ARM_NR_semihosting	  0x123456
+ #define ARM_NR_thumb_semihosting  0xAB
+Index: qemu/linux-user/main.c
+===================================================================
+--- qemu.orig/linux-user/main.c	2007-06-29 10:47:39.000000000 +0000
++++ qemu/linux-user/main.c	2007-06-29 10:53:47.000000000 +0000
+@@ -325,6 +325,50 @@
+     }
+ }
+ 
++/* Handle a jump to the kernel code page.  */
++static int
++do_kernel_trap(CPUARMState *env)
++{
++    uint32_t addr;
++    uint32_t *ptr;
++    uint32_t cpsr;
++
++    switch (env->regs[15]) {
++    case 0xffff0fc0: /* __kernel_cmpxchg */
++        /* XXX: This only works between threads, not between processes.
++           Use native atomic operations.  */
++        /* ??? This probably breaks horribly if the access segfaults.  */
++        cpu_lock();
++        ptr = (uint32_t *)env->regs[2];
++        cpsr = cpsr_read(env);
++        if (*ptr == env->regs[0]) {
++            *ptr = env->regs[1];
++            env->regs[0] = 0;
++            cpsr |= CPSR_C;
++        } else {
++            env->regs[0] = -1;
++            cpsr &= ~CPSR_C;
++        }
++        cpsr_write(env, cpsr, CPSR_C);
++        cpu_unlock();
++        break;
++    case 0xffff0fe0: /* __kernel_get_tls */
++        env->regs[0] = env->cp15.c13_tls;
++        break;
++    default:
++        return 1;
++    }
++    /* Jump back to the caller.  */
++    addr = env->regs[14];
++    if (addr & 1) {
++        env->thumb = 1;
++        addr &= ~1;
++    }
++    env->regs[15] = addr;
++
++    return 0;
++}
++
+ void cpu_loop(CPUARMState *env)
+ {
+     int trapnr;
+@@ -381,10 +425,8 @@
+                     }
+                 }
+ 
+-                if (n == ARM_NR_cacheflush) {
+-                    arm_cache_flush(env->regs[0], env->regs[1]);
+-                } else if (n == ARM_NR_semihosting
+-                           || n == ARM_NR_thumb_semihosting) {
++                if (n == ARM_NR_semihosting
++                    || n == ARM_NR_thumb_semihosting) {
+                     env->regs[0] = do_arm_semihosting (env);
+                 } else if (n == 0 || n >= ARM_SYSCALL_BASE
+                            || (env->thumb && n == ARM_THUMB_SYSCALL)) {
+@@ -395,14 +437,34 @@
+                         n -= ARM_SYSCALL_BASE;
+                         env->eabi = 0;
+                     }
+-                    env->regs[0] = do_syscall(env, 
+-                                              n, 
+-                                              env->regs[0],
+-                                              env->regs[1],
+-                                              env->regs[2],
+-                                              env->regs[3],
+-                                              env->regs[4],
+-                                              env->regs[5]);
++                    if ( n > ARM_NR_BASE) {
++                        switch (n)
++                          {
++                          case ARM_NR_cacheflush:
++                              arm_cache_flush(env->regs[0], env->regs[1]);
++                              break;
++#ifdef USE_NPTL
++                          case ARM_NR_set_tls:
++                              cpu_set_tls(env, env->regs[0]);
++                              env->regs[0] = 0;
++                              break;
++#endif
++                          default:
++                              printf ("Error: Bad syscall: %x\n", n);
++                              goto error;
++                          }
++                      }
++                    else
++                      {
++                        env->regs[0] = do_syscall(env, 
++                                                  n, 
++                                                  env->regs[0],
++                                                  env->regs[1],
++                                                  env->regs[2],
++                                                  env->regs[3],
++                                                  env->regs[4],
++                                                  env->regs[5]);
++                      }
+                 } else {
+                     goto error;
+                 }
+@@ -441,6 +503,10 @@
+                   }
+             }
+             break;
++        case EXCP_KERNEL_TRAP:
++            if (do_kernel_trap(env))
++              goto error;
++            break;
+         default:
+         error:
+             fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n", 
+@@ -2047,6 +2113,10 @@
+     ts->heap_base = info->brk;
+     /* This will be filled in on the first SYS_HEAPINFO call.  */
+     ts->heap_limit = 0;
++    /* Register the magic kernel code page.  The cpu will generate a
++       special exception when it tries to execute code here.  We can't
++       put real code here because it may be in use by the host kernel.  */
++    page_set_flags(0xffff0000, 0xffff0fff, 0);
+ #endif
+ 
+     if (gdbstub_port) {
+Index: qemu/linux-user/qemu.h
+===================================================================
+--- qemu.orig/linux-user/qemu.h	2007-06-29 10:47:39.000000000 +0000
++++ qemu/linux-user/qemu.h	2007-06-29 10:47:58.000000000 +0000
+@@ -80,6 +80,9 @@
+     uint32_t heap_base;
+     uint32_t heap_limit;
+ #endif
++#ifdef USE_NPTL
++    uint32_t *child_tidptr;
++#endif
+     int used; /* non zero if used */
+     struct image_info *info;
+     uint8_t stack[0];
+Index: qemu/linux-user/syscall.c
+===================================================================
+--- qemu.orig/linux-user/syscall.c	2007-06-29 10:47:39.000000000 +0000
++++ qemu/linux-user/syscall.c	2007-06-29 10:53:47.000000000 +0000
+@@ -70,9 +70,18 @@
+ #include <linux/kd.h>
+ 
+ #include "qemu.h"
++#include "qemu_spinlock.h"
+ 
+ //#define DEBUG
+ 
++#ifdef USE_NPTL
++#define CLONE_NPTL_FLAGS2 (CLONE_SETTLS | \
++    CLONE_PARENT_SETTID | CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID)
++#else
++/* XXX: Hardcode the above values.  */
++#define CLONE_NPTL_FLAGS2 0
++#endif
++
+ #if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SPARC) \
+     || defined(TARGET_M68K) || defined(TARGET_SH4)
+ /* 16 bit uid wrappers emulation */
+@@ -2119,20 +2128,38 @@
+    thread/process */
+ #define NEW_STACK_SIZE 8192
+ 
++#ifdef USE_NPTL
++static spinlock_t nptl_lock = SPIN_LOCK_UNLOCKED;
++#endif
++
+ static int clone_func(void *arg)
+ {
+     CPUState *env = arg;
++#ifdef HAVE_NPTL
++    /* Wait until the parent has finshed initializing the tls state.  */
++    while (!spin_trylock(&nptl_lock))
++        usleep(1);
++    spin_unlock(&nptl_lock);
++#endif
+     cpu_loop(env);
+     /* never exits */
+     return 0;
+ }
+ 
+-int do_fork(CPUState *env, unsigned int flags, unsigned long newsp)
++int do_fork(CPUState *env, unsigned int flags, unsigned long newsp,
++            uint32_t *parent_tidptr, void *newtls,
++            uint32_t *child_tidptr)
+ {
+     int ret;
+     TaskState *ts;
+     uint8_t *new_stack;
+     CPUState *new_env;
++#ifdef USE_NPTL
++    unsigned int nptl_flags;
++
++    if (flags & CLONE_PARENT_SETTID)
++        *parent_tidptr = gettid();
++#endif
+     
+     if (flags & CLONE_VM) {
+         ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE);
+@@ -2199,16 +2226,67 @@
+ #error unsupported target CPU
+ #endif
+         new_env->opaque = ts;
++#ifdef USE_NPTL
++        nptl_flags = flags;
++        flags &= ~CLONE_NPTL_FLAGS2;
++
++        if (nptl_flags & CLONE_CHILD_CLEARTID) {
++            ts->child_tidptr = child_tidptr;
++        }
++
++        if (nptl_flags & CLONE_SETTLS)
++            cpu_set_tls (new_env, newtls);
++
++        /* Grab the global cpu lock so that the thread setup appears
++           atomic.  */
++        if (nptl_flags & CLONE_CHILD_SETTID)
++            spin_lock(&nptl_lock);
++
++#else
++        if (flags & CLONE_NPTL_FLAGS2)
++            return -EINVAL;
++#endif
++
++	 if (CLONE_VFORK & flags)
++		flags ^= CLONE_VM;
+ #ifdef __ia64__
+         ret = __clone2(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
+ #else
+ 	ret = clone(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
+ #endif
++#ifdef USE_NPTL
++        if (ret != -1) {
++            if (nptl_flags & CLONE_CHILD_SETTID)
++                *child_tidptr = ret;
++        }
++
++        /* Allow the child to continue.  */
++        if (nptl_flags & CLONE_CHILD_SETTID)
++            spin_unlock(&nptl_lock);
++#endif
+     } else {
+         /* if no CLONE_VM, we consider it is a fork */
+-        if ((flags & ~CSIGNAL) != 0)
++        if ((flags & ~(CSIGNAL | CLONE_NPTL_FLAGS2)) != 0)
+             return -EINVAL;
+         ret = fork();
++#ifdef USE_NPTL
++        /* There is a race condition here.  The parent process could
++           theoretically read the TID in the child process before the child
++           tid is set.  This would require using either ptrace
++           (not implemented) or having *_tidptr to point at a shared memory
++           mapping.  We can't repeat the spinlock hack used above because
++           the child process gets its own copy of the lock.  */
++        if (ret == 0) {
++            /* Child Process.  */
++            if (flags & CLONE_CHILD_SETTID)
++                *child_tidptr = gettid();
++            ts = (TaskState *)env->opaque;
++            if (flags & CLONE_CHILD_CLEARTID)
++                ts->child_tidptr = child_tidptr;
++            if (flags & CLONE_SETTLS)
++                cpu_set_tls (env, newtls);
++        }
++#endif
+     }
+     return ret;
+ }
+@@ -2485,7 +2563,7 @@
+         ret = do_brk(arg1);
+         break;
+     case TARGET_NR_fork:
+-        ret = get_errno(do_fork(cpu_env, SIGCHLD, 0));
++        ret = get_errno(do_fork(cpu_env, SIGCHLD, 0, NULL, NULL, NULL));
+         break;
+ #ifdef TARGET_NR_waitpid
+     case TARGET_NR_waitpid:
+@@ -3649,7 +3727,8 @@
+         ret = get_errno(fsync(arg1));
+         break;
+     case TARGET_NR_clone:
+-        ret = get_errno(do_fork(cpu_env, arg1, arg2));
++        ret = get_errno(do_fork(cpu_env, arg1, arg2, (uint32_t *)arg3,
++                        (void *)arg4, (uint32_t *)arg5));
+         break;
+ #ifdef __NR_exit_group
+         /* new thread calls */
+@@ -4037,7 +4116,8 @@
+ #endif
+ #ifdef TARGET_NR_vfork
+     case TARGET_NR_vfork:
+-        ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0));
++        ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0,
++                                NULL, NULL, NULL));
+         break;
+ #endif
+ #ifdef TARGET_NR_ugetrlimit
+@@ -4619,4 +4699,3 @@
+ #endif
+     return ret;
+ }
+-
+Index: qemu/qemu_spinlock.h
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ qemu/qemu_spinlock.h	2007-06-29 10:47:58.000000000 +0000
+@@ -0,0 +1,181 @@
++/*
++ * Atomic operation helper include
++ * 
++ *  Copyright (c) 2005 Fabrice Bellard
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++ */
++#ifndef QEMU_SPINLOCK_H
++#define QEMU_SPINLOCK_H
++
++#ifdef __powerpc__
++static inline int testandset (int *p)
++{
++    int ret;
++    __asm__ __volatile__ (
++                          "0:    lwarx %0,0,%1\n"
++                          "      xor. %0,%3,%0\n"
++                          "      bne 1f\n"
++                          "      stwcx. %2,0,%1\n"
++                          "      bne- 0b\n"
++                          "1:    "
++                          : "=&r" (ret)
++                          : "r" (p), "r" (1), "r" (0)
++                          : "cr0", "memory");
++    return ret;
++}
++#endif
++
++#ifdef __i386__
++static inline int testandset (int *p)
++{
++    long int readval = 0;
++    
++    __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
++                          : "+m" (*p), "+a" (readval)
++                          : "r" (1)
++                          : "cc");
++    return readval;
++}
++#endif
++
++#ifdef __x86_64__
++static inline int testandset (int *p)
++{
++    long int readval = 0;
++    
++    __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
++                          : "+m" (*p), "+a" (readval)
++                          : "r" (1)
++                          : "cc");
++    return readval;
++}
++#endif
++
++#ifdef __s390__
++static inline int testandset (int *p)
++{
++    int ret;
++
++    __asm__ __volatile__ ("0: cs    %0,%1,0(%2)\n"
++			  "   jl    0b"
++			  : "=&d" (ret)
++			  : "r" (1), "a" (p), "0" (*p) 
++			  : "cc", "memory" );
++    return ret;
++}
++#endif
++
++#ifdef __alpha__
++static inline int testandset (int *p)
++{
++    int ret;
++    unsigned long one;
++
++    __asm__ __volatile__ ("0:	mov 1,%2\n"
++			  "	ldl_l %0,%1\n"
++			  "	stl_c %2,%1\n"
++			  "	beq %2,1f\n"
++			  ".subsection 2\n"
++			  "1:	br 0b\n"
++			  ".previous"
++			  : "=r" (ret), "=m" (*p), "=r" (one)
++			  : "m" (*p));
++    return ret;
++}
++#endif
++
++#ifdef __sparc__
++static inline int testandset (int *p)
++{
++	int ret;
++
++	__asm__ __volatile__("ldstub	[%1], %0"
++			     : "=r" (ret)
++			     : "r" (p)
++			     : "memory");
++
++	return (ret ? 1 : 0);
++}
++#endif
++
++#ifdef __arm__
++static inline int testandset (int *spinlock)
++{
++    register unsigned int ret;
++    __asm__ __volatile__("swp %0, %1, [%2]"
++                         : "=r"(ret)
++                         : "0"(1), "r"(spinlock));
++    
++    return ret;
++}
++#endif
++
++#ifdef __mc68000
++static inline int testandset (int *p)
++{
++    char ret;
++    __asm__ __volatile__("tas %1; sne %0"
++                         : "=r" (ret)
++                         : "m" (p)
++                         : "cc","memory");
++    return ret;
++}
++#endif
++
++#ifdef __ia64
++#include <ia64intrin.h>
++
++static inline int testandset (int *p)
++{
++    return __sync_lock_test_and_set (p, 1);
++}
++#endif
++
++typedef int spinlock_t;
++
++#define SPIN_LOCK_UNLOCKED 0
++
++#if defined(CONFIG_USER_ONLY)
++static inline void spin_lock(spinlock_t *lock)
++{
++    while (testandset(lock));
++}
++
++static inline void spin_unlock(spinlock_t *lock)
++{
++    *lock = 0;
++}
++
++static inline int spin_trylock(spinlock_t *lock)
++{
++    return !testandset(lock);
++}
++#else
++static inline void spin_lock(spinlock_t *lock)
++{
++}
++
++static inline void spin_unlock(spinlock_t *lock)
++{
++}
++
++static inline int spin_trylock(spinlock_t *lock)
++{
++    return 1;
++}
++#endif
++
++#endif
+Index: qemu/target-arm/cpu.h
+===================================================================
+--- qemu.orig/target-arm/cpu.h	2007-06-29 10:47:39.000000000 +0000
++++ qemu/target-arm/cpu.h	2007-06-29 10:47:58.000000000 +0000
+@@ -37,6 +37,7 @@
+ #define EXCP_IRQ             5
+ #define EXCP_FIQ             6
+ #define EXCP_BKPT            7
++#define EXCP_KERNEL_TRAP     8   /* Jumped to kernel code page.  */
+ 
+ typedef void ARMWriteCPFunc(void *opaque, int cp_info,
+                             int srcreg, int operand, uint32_t value);
+@@ -97,6 +98,7 @@
+         uint32_t c9_data;
+         uint32_t c13_fcse; /* FCSE PID.  */
+         uint32_t c13_context; /* Context ID.  */
++        uint32_t c13_tls; /* Context ID.  */
+         uint32_t c15_cpar; /* XScale Coprocessor Access Register */
+     } cp15;
+ 
+@@ -169,6 +171,15 @@
+ int cpu_arm_signal_handler(int host_signum, void *pinfo, 
+                            void *puc);
+ 
++void cpu_lock(void);
++void cpu_unlock(void);
++#if defined(USE_NPTL)
++static inline void cpu_set_tls(CPUARMState *env, void *newtls)
++{
++  env->cp15.c13_tls = (uint32_t)(long)newtls;
++}
++#endif
++
+ #define CPSR_M (0x1f)
+ #define CPSR_T (1 << 5)
+ #define CPSR_F (1 << 6)
+@@ -180,7 +191,11 @@
+ #define CPSR_J (1 << 24)
+ #define CPSR_IT_0_1 (3 << 25)
+ #define CPSR_Q (1 << 27)
+-#define CPSR_NZCV (0xf << 28)
++#define CPSR_V (1 << 28)
++#define CPSR_C (1 << 29)
++#define CPSR_Z (1 << 30)
++#define CPSR_N (1 << 31)
++#define CPSR_NZCV (CPSR_N | CPSR_Z | CPSR_C | CPSR_V)
+ 
+ #define CACHED_CPSR_BITS (CPSR_T | CPSR_Q | CPSR_NZCV)
+ /* Return the current CPSR value.  */
+Index: qemu/target-arm/exec.h
+===================================================================
+--- qemu.orig/target-arm/exec.h	2007-06-29 10:47:39.000000000 +0000
++++ qemu/target-arm/exec.h	2007-06-29 10:47:58.000000000 +0000
+@@ -68,8 +68,6 @@
+ 
+ /* In op_helper.c */
+ 
+-void cpu_lock(void);
+-void cpu_unlock(void);
+ void helper_set_cp(CPUState *, uint32_t, uint32_t);
+ uint32_t helper_get_cp(CPUState *, uint32_t);
+ void helper_set_cp15(CPUState *, uint32_t, uint32_t);
+Index: qemu/target-arm/op.c
+===================================================================
+--- qemu.orig/target-arm/op.c	2007-06-29 10:47:39.000000000 +0000
++++ qemu/target-arm/op.c	2007-06-29 10:47:58.000000000 +0000
+@@ -891,6 +891,12 @@
+     cpu_loop_exit();
+ }
+ 
++void OPPROTO op_kernel_trap(void)
++{
++    env->exception_index = EXCP_KERNEL_TRAP;
++    cpu_loop_exit();
++}
++
+ /* VFP support.  We follow the convention used for VFP instrunctions:
+    Single precition routines have a "s" suffix, double precision a
+    "d" suffix.  */
+Index: qemu/target-arm/op_mem.h
+===================================================================
+--- qemu.orig/target-arm/op_mem.h	2007-06-29 10:47:39.000000000 +0000
++++ qemu/target-arm/op_mem.h	2007-06-29 10:47:58.000000000 +0000
+@@ -1,5 +1,6 @@
+ /* ARM memory operations.  */
+ 
++void helper_ld(uint32_t);
+ /* Load from address T1 into T0.  */
+ #define MEM_LD_OP(name) \
+ void OPPROTO glue(op_ld##name,MEMSUFFIX)(void) \
+Index: qemu/target-arm/translate.c
+===================================================================
+--- qemu.orig/target-arm/translate.c	2007-06-29 10:47:39.000000000 +0000
++++ qemu/target-arm/translate.c	2007-06-29 10:47:58.000000000 +0000
+@@ -3548,6 +3548,15 @@
+     nb_gen_labels = 0;
+     lj = -1;
+     do {
++#ifdef CONFIG_USER_ONLY
++        /* Intercept jump to the magic kernel page.  */
++        if (dc->pc > 0xffff0000) {
++            gen_op_kernel_trap();
++            dc->is_jmp = DISAS_UPDATE;
++            break;
++        }
++#endif
++
+         if (env->nb_breakpoints > 0) {
+             for(j = 0; j < env->nb_breakpoints; j++) {
+                 if (env->breakpoints[j] == dc->pc) {
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/qemu-amd64-32b-mapping-0.9.0.patch b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-amd64-32b-mapping-0.9.0.patch
new file mode 100644
index 0000000000..d9303e3464
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-amd64-32b-mapping-0.9.0.patch
@@ -0,0 +1,31 @@
+--- qemu.orig/linux-user/mmap.c
++++ qemu/linux-user/mmap.c
+@@ -29,6 +29,10 @@
+ 
+ //#define DEBUG_MMAP
+ 
++#ifndef MAP_32BIT
++#define MAP_32BIT 0
++#endif
++
+ /* NOTE: all the constants are the HOST ones, but addresses are target. */
+ int target_mprotect(target_ulong start, target_ulong len, int prot)
+ {
+@@ -234,7 +238,7 @@
+             host_offset = offset & qemu_host_page_mask;
+             host_len = len + offset - host_offset;
+             host_start = (long)mmap(real_start ? g2h(real_start) : NULL,
+-                                    host_len, prot, flags, fd, host_offset);
++                                    host_len, prot, (flags | MAP_32BIT), fd, host_offset);
+             if (host_start == -1)
+                 return host_start;
+             /* update start so that it points to the file position at 'offset' */
+@@ -388,7 +392,7 @@
+     int prot;
+ 
+     /* XXX: use 5 args syscall */
+-    new_addr = (long)mremap(g2h(old_addr), old_size, new_size, flags);
++    new_addr = (long)mremap(g2h(old_addr), old_size, new_size, (flags | MAP_32BIT));
+     if (new_addr == -1)
+         return new_addr;
+     new_addr = h2g(new_addr);
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/qemu-pci-irq-sharing.patch b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-pci-irq-sharing.patch
new file mode 100644
index 0000000000..c47e89895f
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-pci-irq-sharing.patch
@@ -0,0 +1,52 @@
+diff -pNaur qemu-cvs-ts-orig/hw/pci.c qemu-cvs-ts/hw/pci.c
+--- qemu-cvs-ts-orig/hw/pci.c	2006-08-17 10:46:34.000000000 +0000
++++ qemu-cvs-ts/hw/pci.c	2006-09-23 17:02:41.000000000 +0000
+@@ -34,6 +34,7 @@ struct PCIBus {
+     SetIRQFunc *low_set_irq;
+     void *irq_opaque;
+     PCIDevice *devices[256];
++    int irq_count[4];
+ };
+ 
+ static void pci_update_mappings(PCIDevice *d);
+@@ -49,6 +50,7 @@ PCIBus *pci_register_bus(pci_set_irq_fn 
+     bus->set_irq = set_irq;
+     bus->irq_opaque = pic;
+     bus->devfn_min = devfn_min;
++    memset(bus->irq_count, 0, sizeof(bus->irq_count));
+     first_bus = bus;
+     return bus;
+ }
+@@ -100,6 +102,7 @@ PCIDevice *pci_register_device(PCIBus *b
+     pci_dev->bus = bus;
+     pci_dev->devfn = devfn;
+     pstrcpy(pci_dev->name, sizeof(pci_dev->name), name);
++    memset(pci_dev->irq_state, 0, sizeof(pci_dev->irq_state));
+ 
+     if (!config_read)
+         config_read = pci_default_read_config;
+@@ -404,7 +407,10 @@ uint32_t pci_data_read(void *opaque, uin
+ void pci_set_irq(PCIDevice *pci_dev, int irq_num, int level)
+ {
+     PCIBus *bus = pci_dev->bus;
+-    bus->set_irq(pci_dev, bus->irq_opaque, irq_num, level);
++    bus->irq_count[irq_num] += level - pci_dev->irq_state[irq_num];
++    pci_dev->irq_state[irq_num] = level;
++    bus->set_irq(pci_dev, bus->irq_opaque,
++                 irq_num, !!bus->irq_count[irq_num]);
+ }
+ 
+ /***********************************************************/
+diff -pNaur qemu-cvs-ts-orig/vl.h qemu-cvs-ts/vl.h
+--- qemu-cvs-ts-orig/vl.h	2006-09-18 01:15:29.000000000 +0000
++++ qemu-cvs-ts/vl.h	2006-09-23 17:15:21.000000000 +0000
+@@ -733,6 +733,9 @@ struct PCIDevice {
+     PCIConfigWriteFunc *config_write;
+     /* ??? This is a PC-specific hack, and should be removed.  */
+     int irq_index;
++
++    /* remember last irq levels */
++    int irq_state[4];
+ };
+ 
+ PCIDevice *pci_register_device(PCIBus *bus, const char *name,
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/qemu-sdl-cursor.patch b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-sdl-cursor.patch
new file mode 100644
index 0000000000..bd6a51a1f5
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-sdl-cursor.patch
@@ -0,0 +1,13 @@
+Index: qemu/sdl.c
+===================================================================
+--- qemu.orig/sdl.c	2006-10-02 17:06:12.000000000 +0100
++++ qemu/sdl.c	2006-10-02 17:06:59.000000000 +0100
+@@ -287,7 +287,7 @@
+ {
+     if (kbd_mouse_is_absolute()) {
+         SDL_ShowCursor(1);
+-        SDL_SetCursor(sdl_cursor_hidden);
++        /* SDL_SetCursor(sdl_cursor_hidden); */
+     } else {
+         SDL_ShowCursor(0);
+     }
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-0.8.2.patch b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-0.8.2.patch
new file mode 100644
index 0000000000..33a6db3f18
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-0.8.2.patch
@@ -0,0 +1,445 @@
+diff -pNaur qemu-cvs-ts-orig/hw/usb-wacom.c qemu-cvs-ts/hw/usb-wacom.c
+--- qemu-cvs-ts-orig/hw/usb-wacom.c	1970-01-01 01:00:00.000000000 +0100
++++ qemu-cvs-ts/hw/usb-wacom.c	2006-09-22 20:44:26.000000000 +0200
+@@ -0,0 +1,408 @@
++/*
++ * Wacom PenPartner USB tablet emulation.
++ *
++ * Copyright (c) 2006 Openedhand Ltd.
++ *
++ * Author: Andrzej Zaborowski <balrog@zabor.org>
++ *
++ * Based on hw/usb-hid.c:
++ * Copyright (c) 2005 Fabrice Bellard
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a copy
++ * of this software and associated documentation files (the "Software"), to deal
++ * in the Software without restriction, including without limitation the rights
++ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
++ * copies of the Software, and to permit persons to whom the Software is
++ * furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
++ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
++ * THE SOFTWARE.
++ */
++#include "vl.h"
++
++/* Interface requests */
++#define WACOM_GET_REPORT	0x2101
++#define WACOM_SET_REPORT	0x2109
++
++/* HID interface requests */
++#define HID_GET_REPORT		0xa101
++#define HID_GET_IDLE		0xa102
++#define HID_GET_PROTOCOL	0xa103
++#define HID_SET_IDLE		0x210a
++#define HID_SET_PROTOCOL	0x210b
++
++#define WACOM_MODE_HID		1
++#define WACOM_MODE_WACOM	2
++
++typedef struct USBWacomState {
++    USBDevice dev;
++    int dx, dy, dz, buttons_state;
++    int x, y;
++    int mouse_grabbed;
++    int mode;
++} USBWacomState;
++
++static const uint8_t qemu_wacom_dev_descriptor[] = {
++    0x12,	/*  u8 bLength; */
++    0x01,	/*  u8 bDescriptorType; Device */
++    0x10, 0x10,	/*  u16 bcdUSB; v1.10 */
++
++    0x00,	/*  u8  bDeviceClass; */
++    0x00,	/*  u8  bDeviceSubClass; */
++    0x00,	/*  u8  bDeviceProtocol; [ low/full speeds only ] */
++    0x08,	/*  u8  bMaxPacketSize0; 8 Bytes */
++
++    0x6a, 0x05,	/*  u16 idVendor; */
++    0x00, 0x00,	/*  u16 idProduct; */
++    0x10, 0x42,	/*  u16 bcdDevice */
++
++    0x01,	/*  u8  iManufacturer; */
++    0x02,	/*  u8  iProduct; */
++    0x00,	/*  u8  iSerialNumber; */
++    0x01,	/*  u8  bNumConfigurations; */
++};
++
++static const uint8_t qemu_wacom_config_descriptor[] = {
++    /* one configuration */
++    0x09,	/*  u8  bLength; */
++    0x02,	/*  u8  bDescriptorType; Configuration */
++    0x22, 0x00,	/*  u16 wTotalLength; */
++    0x01,	/*  u8  bNumInterfaces; (1) */
++    0x01,	/*  u8  bConfigurationValue; */
++    0x00,	/*  u8  iConfiguration; */
++    0x80,	/*  u8  bmAttributes; 
++				 Bit 7: must be set,
++				     6: Self-powered,
++				     5: Remote wakeup,
++				     4..0: resvd */
++    40,		/*  u8  MaxPower; */
++
++    /* one interface */
++    0x09,	/*  u8  if_bLength; */
++    0x04,	/*  u8  if_bDescriptorType; Interface */
++    0x00,	/*  u8  if_bInterfaceNumber; */
++    0x00,	/*  u8  if_bAlternateSetting; */
++    0x01,	/*  u8  if_bNumEndpoints; */
++    0x03,	/*  u8  if_bInterfaceClass; HID */
++    0x01,	/*  u8  if_bInterfaceSubClass; Boot */
++    0x02,	/*  u8  if_bInterfaceProtocol; [usb1.1 or single tt] */
++    0x00,	/*  u8  if_iInterface; */
++
++    /* HID descriptor */
++    0x09,	/*  u8  bLength; */
++    0x21,	/*  u8  bDescriptorType; */
++    0x01, 0x10,	/*  u16 HID_class */
++    0x00,	/*  u8  country_code */
++    0x01,	/*  u8  num_descriptors */
++    0x22,	/*  u8  type; Report */
++    0x6e, 0x00,	/*  u16 len */
++
++    /* one endpoint (status change endpoint) */
++    0x07,	/*  u8  ep_bLength; */
++    0x05,	/*  u8  ep_bDescriptorType; Endpoint */
++    0x81,	/*  u8  ep_bEndpointAddress; IN Endpoint 1 */
++    0x03,	/*  u8  ep_bmAttributes; Interrupt */
++    0x08, 0x00,	/*  u16 ep_wMaxPacketSize; */
++    0x0a,	/*  u8  ep_bInterval; */
++};
++
++static void usb_mouse_event(void *opaque,
++                            int dx1, int dy1, int dz1, int buttons_state)
++{
++    USBWacomState *s = opaque;
++
++    s->dx += dx1;
++    s->dy += dy1;
++    s->dz += dz1;
++    s->buttons_state = buttons_state;
++}
++
++static void usb_wacom_event(void *opaque,
++                            int x, int y, int dz, int buttons_state)
++{
++    USBWacomState *s = opaque;
++
++    s->x = x;
++    s->y = y;
++    s->dz += dz;
++    s->buttons_state = buttons_state;
++}
++
++static inline int int_clamp(int val, int vmin, int vmax)
++{
++    if (val < vmin)
++        return vmin;
++    else if (val > vmax)
++        return vmax;
++    else
++        return val;
++}
++
++static int usb_mouse_poll(USBWacomState *s, uint8_t *buf, int len)
++{
++    int dx, dy, dz, b, l;
++
++    if (!s->mouse_grabbed) {
++        qemu_add_mouse_event_handler(usb_mouse_event, s, 1);
++        s->mouse_grabbed = 1;
++    }
++
++    dx = int_clamp(s->dx, -128, 127);
++    dy = int_clamp(s->dy, -128, 127);
++    dz = int_clamp(s->dz, -128, 127);
++
++    s->dx -= dx;
++    s->dy -= dy;
++    s->dz -= dz;
++
++    b = 0;
++    if (s->buttons_state & MOUSE_EVENT_LBUTTON)
++        b |= 0x01;
++    if (s->buttons_state & MOUSE_EVENT_RBUTTON)
++        b |= 0x02;
++    if (s->buttons_state & MOUSE_EVENT_MBUTTON)
++        b |= 0x04;
++
++    buf[0] = b;
++    buf[1] = dx;
++    buf[2] = dy;
++    l = 3;
++    if (len >= 4) {
++        buf[3] = dz;
++        l = 4;
++    }
++    return l;
++}
++
++static int usb_wacom_poll(USBWacomState *s, uint8_t *buf, int len)
++{
++    int b;
++
++    if (!s->mouse_grabbed) {
++        qemu_add_mouse_event_handler(usb_wacom_event, s, 1);
++        s->mouse_grabbed = 1;
++    }
++
++    b = 0;
++    if (s->buttons_state & MOUSE_EVENT_LBUTTON)
++        b |= 0x01;
++    if (s->buttons_state & MOUSE_EVENT_RBUTTON)
++        b |= 0x02;
++    if (s->buttons_state & MOUSE_EVENT_MBUTTON)
++        b |= 0x04;
++
++    if (len < 7)
++        return 0;
++
++    buf[0] = s->mode;
++    buf[1] = s->x & 0xff;
++    buf[2] = s->x >> 8;
++    buf[3] = s->y & 0xff;
++    buf[4] = s->y >> 8;
++    if (b) {
++        buf[5] = 0x40;
++        buf[6] = 0;
++    } else {
++        buf[5] = 0x00;
++        buf[6] = (unsigned char) -120;
++    }
++
++    return 7;
++}
++
++static void usb_wacom_handle_reset(USBDevice *dev)
++{
++    USBWacomState *s = (USBWacomState *) dev;
++
++    s->dx = 0;
++    s->dy = 0;
++    s->dz = 0;
++    s->x = 0;
++    s->y = 0;
++    s->buttons_state = 0;
++    s->mode = WACOM_MODE_HID;
++}
++
++static int usb_wacom_handle_control(USBDevice *dev, int request, int value,
++                                    int index, int length, uint8_t *data)
++{
++    USBWacomState *s = (USBWacomState *) dev;
++    int ret = 0;
++
++    switch (request) {
++    case DeviceRequest | USB_REQ_GET_STATUS:
++        data[0] = (1 << USB_DEVICE_SELF_POWERED) |
++            (dev->remote_wakeup << USB_DEVICE_REMOTE_WAKEUP);
++        data[1] = 0x00;
++        ret = 2;
++        break;
++    case DeviceOutRequest | USB_REQ_CLEAR_FEATURE:
++        if (value == USB_DEVICE_REMOTE_WAKEUP) {
++            dev->remote_wakeup = 0;
++        } else {
++            goto fail;
++        }
++        ret = 0;
++        break;
++    case DeviceOutRequest | USB_REQ_SET_FEATURE:
++        if (value == USB_DEVICE_REMOTE_WAKEUP) {
++            dev->remote_wakeup = 1;
++        } else {
++            goto fail;
++        }
++        ret = 0;
++        break;
++    case DeviceOutRequest | USB_REQ_SET_ADDRESS:
++        dev->addr = value;
++        ret = 0;
++        break;
++    case DeviceRequest | USB_REQ_GET_DESCRIPTOR:
++        switch (value >> 8) {
++        case USB_DT_DEVICE:
++            memcpy(data, qemu_wacom_dev_descriptor, 
++                   sizeof(qemu_wacom_dev_descriptor));
++            ret = sizeof(qemu_wacom_dev_descriptor);
++            break;
++        case USB_DT_CONFIG:
++       	    memcpy(data, qemu_wacom_config_descriptor, 
++                   sizeof(qemu_wacom_config_descriptor));
++            ret = sizeof(qemu_wacom_config_descriptor);
++            break;
++        case USB_DT_STRING:
++            switch (value & 0xff) {
++            case 0:
++                /* language ids */
++                data[0] = 4;
++                data[1] = 3;
++                data[2] = 0x09;
++                data[3] = 0x04;
++                ret = 4;
++                break;
++            case 1:
++                /* serial number */
++                ret = set_usb_string(data, "1");
++                break;
++            case 2:
++		ret = set_usb_string(data, "Wacom PenPartner");
++                break;
++            case 3:
++                /* vendor description */
++                ret = set_usb_string(data, "QEMU " QEMU_VERSION);
++                break;
++            case 4:
++                ret = set_usb_string(data, "Wacom Tablet");
++                break;
++            case 5:
++                ret = set_usb_string(data, "Endpoint1 Interrupt Pipe");
++                break;
++            default:
++                goto fail;
++            }
++            break;
++        default:
++            goto fail;
++        }
++        break;
++    case DeviceRequest | USB_REQ_GET_CONFIGURATION:
++        data[0] = 1;
++        ret = 1;
++        break;
++    case DeviceOutRequest | USB_REQ_SET_CONFIGURATION:
++        ret = 0;
++        break;
++    case DeviceRequest | USB_REQ_GET_INTERFACE:
++        data[0] = 0;
++        ret = 1;
++        break;
++    case DeviceOutRequest | USB_REQ_SET_INTERFACE:
++        ret = 0;
++        break;
++    case WACOM_SET_REPORT:
++        qemu_add_mouse_event_handler(NULL, NULL, 0);
++	s->mouse_grabbed = 0;
++        s->mode = data[0];
++        ret = 0;
++        break;
++    case WACOM_GET_REPORT:
++        data[0] = 0;
++        data[1] = s->mode;
++        ret = 2;
++        break;
++    /* USB HID requests */
++    case HID_GET_REPORT:
++        if (s->mode == WACOM_MODE_HID)
++            ret = usb_mouse_poll(s, data, length);
++        else if (s->mode == WACOM_MODE_WACOM)
++            ret = usb_wacom_poll(s, data, length);
++        break;
++    case HID_SET_IDLE:
++        ret = 0;
++        break;
++    default:
++    fail:
++        ret = USB_RET_STALL;
++        break;
++    }
++    return ret;
++}
++
++static int usb_wacom_handle_data(USBDevice *dev, int pid, 
++                                 uint8_t devep, uint8_t *data, int len)
++{
++    USBWacomState *s = (USBWacomState *) dev;
++    int ret = 0;
++
++    switch (pid) {
++    case USB_TOKEN_IN:
++        if (devep == 1) {
++            if (s->mode == WACOM_MODE_HID)
++                ret = usb_mouse_poll(s, data, len);
++            else if (s->mode == WACOM_MODE_WACOM)
++                ret = usb_wacom_poll(s, data, len);
++            break;
++        }
++        /* Fall through.  */
++    case USB_TOKEN_OUT:
++    default:
++        ret = USB_RET_STALL;
++        break;
++    }
++    return ret;
++}
++
++static void usb_wacom_handle_destroy(USBDevice *dev)
++{
++    USBWacomState *s = (USBWacomState *) dev;
++
++    qemu_add_mouse_event_handler(NULL, NULL, 0);
++    qemu_free(s);
++}
++
++USBDevice *usb_wacom_init(void)
++{
++    USBWacomState *s;
++
++    s = qemu_mallocz(sizeof(USBWacomState));
++    if (!s)
++        return NULL;
++    s->dev.speed = USB_SPEED_FULL;
++    s->dev.handle_packet = usb_generic_handle_packet;
++
++    s->dev.handle_reset = usb_wacom_handle_reset;
++    s->dev.handle_control = usb_wacom_handle_control;
++    s->dev.handle_data = usb_wacom_handle_data;
++    s->dev.handle_destroy = usb_wacom_handle_destroy;
++
++    pstrcpy(s->dev.devname, sizeof(s->dev.devname),
++            "QEMU PenPartner Tablet");
++
++    return (USBDevice *) s;
++}
+diff -pNaur qemu-cvs-ts-orig/hw/usb.h qemu-cvs-ts/hw/usb.h
+--- qemu-cvs-ts-orig/hw/usb.h	2006-08-12 03:04:27.000000000 +0200
++++ qemu-cvs-ts/hw/usb.h	2006-09-21 01:40:40.000000000 +0200
+@@ -218,3 +218,6 @@ USBDevice *usb_tablet_init(void);
+ 
+ /* usb-msd.c */
+ USBDevice *usb_msd_init(const char *filename);
++
++/* usb-wacom.c */
++USBDevice *usb_wacom_init(void);
+diff -pNaur qemu-cvs-ts-orig/vl.c qemu-cvs-ts/vl.c
+--- qemu-cvs-ts-orig/vl.c	2006-09-10 16:39:54.000000000 +0200
++++ qemu-cvs-ts/vl.c	2006-09-21 01:45:16.000000000 +0200
+@@ -3765,6 +3765,8 @@ static int usb_device_add(const char *de
+ 	dev = usb_tablet_init();
+     } else if (strstart(devname, "disk:", &p)) {
+         dev = usb_msd_init(p);
++    } else if (!strcmp(devname, "wacom-tablet")) {
++        dev = usb_wacom_init();
+     } else {
+         return -1;
+     }
+diff -pNaur qemu-cvs-ts-orig/Makefile.target qemu-cvs-ts/Makefile.target
+--- qemu-cvs-ts-orig/Makefile.target	2006-09-18 03:15:29.000000000 +0200
++++ qemu-cvs-ts/Makefile.target	2006-09-21 02:32:19.000000000 +0200
+@@ -330,6 +330,7 @@ VL_OBJS+= scsi-disk.o cdrom.o lsi53c895a
+ 
+ # USB layer
+ VL_OBJS+= usb.o usb-hub.o usb-linux.o usb-hid.o usb-ohci.o usb-msd.o
++VL_OBJS+= usb-wacom.o
+ 
+ # PCI network cards
+ VL_OBJS+= ne2000.o rtl8139.o pcnet.o
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-buttons.patch b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-buttons.patch
new file mode 100644
index 0000000000..ee24c15780
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-buttons.patch
@@ -0,0 +1,23 @@
+--- qemu-cvs-ts-orig/hw/usb-wacom.c	2006-09-29 22:53:06.000000000 +0000
++++ qemu-cvs-ts/hw/usb-wacom.c	2006-09-29 22:44:14.000000000 +0000
+@@ -203,19 +203,18 @@ static int usb_wacom_poll(USBWacomState 
+         return 0;
+ 
+     buf[0] = s->mode;
++    buf[5] = 0x00;
+     if (b) {
+         buf[1] = s->x & 0xff;
+         buf[2] = s->x >> 8;
+         buf[3] = s->y & 0xff;
+         buf[4] = s->y >> 8;
+-        buf[5] = 0x40;
+         buf[6] = 0;
+     } else {
+         buf[1] = 0;
+         buf[2] = 0;
+         buf[3] = 0;
+         buf[4] = 0;
+-        buf[5] = 0x00;
+         buf[6] = (unsigned char) -127;
+     }
+ 
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-pressure.patch b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-pressure.patch
new file mode 100644
index 0000000000..668d50d5f2
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-pressure.patch
@@ -0,0 +1,28 @@
+--- qemu-cvs-ts-orig/hw/usb-wacom.c	2006-09-29 17:27:43.000000000 +0000
++++ qemu-cvs-ts/hw/usb-wacom.c	2006-09-29 17:48:13.000000000 +0000
+@@ -203,16 +203,20 @@ static int usb_wacom_poll(USBWacomState 
+         return 0;
+ 
+     buf[0] = s->mode;
+-    buf[1] = s->x & 0xff;
+-    buf[2] = s->x >> 8;
+-    buf[3] = s->y & 0xff;
+-    buf[4] = s->y >> 8;
+     if (b) {
++        buf[1] = s->x & 0xff;
++        buf[2] = s->x >> 8;
++        buf[3] = s->y & 0xff;
++        buf[4] = s->y >> 8;
+         buf[5] = 0x40;
+         buf[6] = 0;
+     } else {
++        buf[1] = 0;
++        buf[2] = 0;
++        buf[3] = 0;
++        buf[4] = 0;
+         buf[5] = 0x00;
+-        buf[6] = (unsigned char) -120;
++        buf[6] = (unsigned char) -127;
+     }
+ 
+     return 7;
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/workaround_bad_futex_headers.patch b/packages/qemu/qemu-0.9.0+cvs20070613/workaround_bad_futex_headers.patch
new file mode 100644
index 0000000000..cc122ebdba
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/workaround_bad_futex_headers.patch
@@ -0,0 +1,25 @@
+---
+ linux-user/syscall.c |   10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+Index: qemu/linux-user/syscall.c
+===================================================================
+--- qemu.orig/linux-user/syscall.c	2007-08-09 20:28:06.000000000 +0100
++++ qemu/linux-user/syscall.c	2007-08-09 20:28:41.000000000 +0100
+@@ -61,7 +61,15 @@
+ #define tchars host_tchars /* same as target */
+ #define ltchars host_ltchars /* same as target */
+ 
+-#include <linux/futex.h>
++#define FUTEX_WAIT              0
++#define FUTEX_WAKE              1
++#define FUTEX_FD                2
++#define FUTEX_REQUEUE           3
++#define FUTEX_CMP_REQUEUE       4
++#define FUTEX_WAKE_OP           5
++#define FUTEX_LOCK_PI           6
++#define FUTEX_UNLOCK_PI         7
++
+ #include <linux/termios.h>
+ #include <linux/unistd.h>
+ #include <linux/utsname.h>
diff --git a/packages/qemu/qemu-0.9.0+cvs20070701/.mtn2git_empty b/packages/qemu/qemu-0.9.0+cvs20070701/.mtn2git_empty
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/packages/qemu/qemu-0.9.0+cvs20070701/arm_nptl-0.9.0.patch b/packages/qemu/qemu-0.9.0+cvs20070701/arm_nptl-0.9.0.patch
deleted file mode 100644
index fe1f0945b6..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20070701/arm_nptl-0.9.0.patch
+++ /dev/null
@@ -1,853 +0,0 @@
-diff -Naru qemu-snapshot-2007-06-24_05.orig/configure qemu-snapshot-2007-06-24_05/configure
---- qemu-snapshot-2007-06-24_05.orig/configure	2007-06-24 16:31:54.000000000 +0200
-+++ qemu-snapshot-2007-06-24_05/configure	2007-06-24 16:33:58.000000000 +0200
-@@ -101,6 +101,7 @@
- darwin_user="no"
- build_docs="no"
- uname_release=""
-+nptl="yes"
- 
- # OS specific
- targetos=`uname -s`
-@@ -287,6 +288,8 @@
-         *)     echo "undefined SPARC architecture. Exiting";exit 1;;
-       esac
-   ;;
-+  --disable-nptl) nptl="no"
-+  ;;
-   esac
- done
- 
-@@ -530,6 +533,23 @@
- }
- EOF
- 
-+# check NPTL support
-+cat > $TMPC <<EOF
-+#include <sched.h>
-+void foo()
-+{
-+#ifndef CLONE_SETTLS
-+#error bork
-+#endif
-+}
-+EOF
-+
-+if $cc -c -o $TMPO $TMPC 2> /dev/null ; then
-+  :
-+else
-+   nptl="no"
-+fi
-+
- ##########################################
- # SDL probe
- 
-@@ -681,6 +701,7 @@
-     echo "Target Sparc Arch $sparc_cpu"
- fi
- echo "kqemu support     $kqemu"
-+echo "NPTL support      $nptl"
- echo "Documentation     $build_docs"
- [ ! -z "$uname_release" ] && \
- echo "uname -r          $uname_release"
-@@ -1063,6 +1084,14 @@
-             echo "SDL_CFLAGS=`$sdl_config --cflags`" >> $config_mak
-         fi
-     fi
-+else
-+    if test "$nptl" = "yes" ; then
-+        case "$target_cpu" in
-+          arm | armeb)
-+            echo "#define USE_NPTL 1" >> $config_h
-+          ;;
-+        esac
-+    fi
- fi
- 
- if test "$cocoa" = "yes" ; then
-diff -Naru qemu-snapshot-2007-06-24_05.orig/exec-all.h qemu-snapshot-2007-06-24_05/exec-all.h
---- qemu-snapshot-2007-06-24_05.orig/exec-all.h	2007-05-23 21:58:10.000000000 +0200
-+++ qemu-snapshot-2007-06-24_05/exec-all.h	2007-06-24 16:33:58.000000000 +0200
-@@ -360,170 +360,7 @@
- extern CPUReadMemoryFunc *io_mem_read[IO_MEM_NB_ENTRIES][4];
- extern void *io_mem_opaque[IO_MEM_NB_ENTRIES];
- 
--#if defined(__powerpc__)
--static inline int testandset (int *p)
--{
--    int ret;
--    __asm__ __volatile__ (
--                          "0:    lwarx %0,0,%1\n"
--                          "      xor. %0,%3,%0\n"
--                          "      bne 1f\n"
--                          "      stwcx. %2,0,%1\n"
--                          "      bne- 0b\n"
--                          "1:    "
--                          : "=&r" (ret)
--                          : "r" (p), "r" (1), "r" (0)
--                          : "cr0", "memory");
--    return ret;
--}
--#elif defined(__i386__)
--static inline int testandset (int *p)
--{
--    long int readval = 0;
--    
--    __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
--                          : "+m" (*p), "+a" (readval)
--                          : "r" (1)
--                          : "cc");
--    return readval;
--}
--#elif defined(__x86_64__)
--static inline int testandset (int *p)
--{
--    long int readval = 0;
--    
--    __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
--                          : "+m" (*p), "+a" (readval)
--                          : "r" (1)
--                          : "cc");
--    return readval;
--}
--#elif defined(__s390__)
--static inline int testandset (int *p)
--{
--    int ret;
--
--    __asm__ __volatile__ ("0: cs    %0,%1,0(%2)\n"
--			  "   jl    0b"
--			  : "=&d" (ret)
--			  : "r" (1), "a" (p), "0" (*p) 
--			  : "cc", "memory" );
--    return ret;
--}
--#elif defined(__alpha__)
--static inline int testandset (int *p)
--{
--    int ret;
--    unsigned long one;
--
--    __asm__ __volatile__ ("0:	mov 1,%2\n"
--			  "	ldl_l %0,%1\n"
--			  "	stl_c %2,%1\n"
--			  "	beq %2,1f\n"
--			  ".subsection 2\n"
--			  "1:	br 0b\n"
--			  ".previous"
--			  : "=r" (ret), "=m" (*p), "=r" (one)
--			  : "m" (*p));
--    return ret;
--}
--#elif defined(__sparc__)
--static inline int testandset (int *p)
--{
--	int ret;
--
--	__asm__ __volatile__("ldstub	[%1], %0"
--			     : "=r" (ret)
--			     : "r" (p)
--			     : "memory");
--
--	return (ret ? 1 : 0);
--}
--#elif defined(__arm__)
--static inline int testandset (int *spinlock)
--{
--    register unsigned int ret;
--    __asm__ __volatile__("swp %0, %1, [%2]"
--                         : "=r"(ret)
--                         : "0"(1), "r"(spinlock));
--    
--    return ret;
--}
--#elif defined(__mc68000)
--static inline int testandset (int *p)
--{
--    char ret;
--    __asm__ __volatile__("tas %1; sne %0"
--                         : "=r" (ret)
--                         : "m" (p)
--                         : "cc","memory");
--    return ret;
--}
--#elif defined(__ia64)
--
--#include <ia64intrin.h>
--
--static inline int testandset (int *p)
--{
--    return __sync_lock_test_and_set (p, 1);
--}
--#elif defined(__mips__)
--static inline int testandset (int *p)
--{
--    int ret;
--
--    __asm__ __volatile__ (
--	"	.set push		\n"
--	"	.set noat		\n"
--	"	.set mips2		\n"
--	"1:	li	$1, 1		\n"
--	"	ll	%0, %1		\n"
--	"	sc	$1, %1		\n"
--	"	beqz	$1, 1b		\n"
--	"	.set pop		"
--	: "=r" (ret), "+R" (*p)
--	:
--	: "memory");
--
--    return ret;
--}
--#else
--#error unimplemented CPU support
--#endif
--
--typedef int spinlock_t;
--
--#define SPIN_LOCK_UNLOCKED 0
--
--#if defined(CONFIG_USER_ONLY)
--static inline void spin_lock(spinlock_t *lock)
--{
--    while (testandset(lock));
--}
--
--static inline void spin_unlock(spinlock_t *lock)
--{
--    *lock = 0;
--}
--
--static inline int spin_trylock(spinlock_t *lock)
--{
--    return !testandset(lock);
--}
--#else
--static inline void spin_lock(spinlock_t *lock)
--{
--}
--
--static inline void spin_unlock(spinlock_t *lock)
--{
--}
--
--static inline int spin_trylock(spinlock_t *lock)
--{
--    return 1;
--}
--#endif
-+#include "qemu_spinlock.h"
- 
- extern spinlock_t tb_lock;
- 
-diff -Naru qemu-snapshot-2007-06-24_05.orig/linux-user/arm/syscall.h qemu-snapshot-2007-06-24_05/linux-user/arm/syscall.h
---- qemu-snapshot-2007-06-24_05.orig/linux-user/arm/syscall.h	2005-04-27 22:11:21.000000000 +0200
-+++ qemu-snapshot-2007-06-24_05/linux-user/arm/syscall.h	2007-06-24 16:33:58.000000000 +0200
-@@ -28,7 +28,9 @@
- #define ARM_SYSCALL_BASE	0x900000
- #define ARM_THUMB_SYSCALL	0
- 
--#define ARM_NR_cacheflush (ARM_SYSCALL_BASE + 0xf0000 + 2)
-+#define ARM_NR_BASE	  0xf0000
-+#define ARM_NR_cacheflush (ARM_NR_BASE + 2)
-+#define ARM_NR_set_tls	  (ARM_NR_BASE + 5)
- 
- #define ARM_NR_semihosting	  0x123456
- #define ARM_NR_thumb_semihosting  0xAB
-diff -Naru qemu-snapshot-2007-06-24_05.orig/linux-user/main.c qemu-snapshot-2007-06-24_05/linux-user/main.c
---- qemu-snapshot-2007-06-24_05.orig/linux-user/main.c	2007-06-22 00:55:02.000000000 +0200
-+++ qemu-snapshot-2007-06-24_05/linux-user/main.c	2007-06-24 16:33:58.000000000 +0200
-@@ -325,6 +325,50 @@
-     }
- }
- 
-+/* Handle a jump to the kernel code page.  */
-+static int
-+do_kernel_trap(CPUARMState *env)
-+{
-+    uint32_t addr;
-+    uint32_t *ptr;
-+    uint32_t cpsr;
-+
-+    switch (env->regs[15]) {
-+    case 0xffff0fc0: /* __kernel_cmpxchg */
-+        /* XXX: This only works between threads, not between processes.
-+           Use native atomic operations.  */
-+        /* ??? This probably breaks horribly if the access segfaults.  */
-+        cpu_lock();
-+        ptr = (uint32_t *)env->regs[2];
-+        cpsr = cpsr_read(env);
-+        if (*ptr == env->regs[0]) {
-+            *ptr = env->regs[1];
-+            env->regs[0] = 0;
-+            cpsr |= CPSR_C;
-+        } else {
-+            env->regs[0] = -1;
-+            cpsr &= ~CPSR_C;
-+        }
-+        cpsr_write(env, cpsr, CPSR_C);
-+        cpu_unlock();
-+        break;
-+    case 0xffff0fe0: /* __kernel_get_tls */
-+        env->regs[0] = env->cp15.c13_tls;
-+        break;
-+    default:
-+        return 1;
-+    }
-+    /* Jump back to the caller.  */
-+    addr = env->regs[14];
-+    if (addr & 1) {
-+        env->thumb = 1;
-+        addr &= ~1;
-+    }
-+    env->regs[15] = addr;
-+
-+    return 0;
-+}
-+
- void cpu_loop(CPUARMState *env)
- {
-     int trapnr;
-@@ -381,10 +425,8 @@
-                     }
-                 }
- 
--                if (n == ARM_NR_cacheflush) {
--                    arm_cache_flush(env->regs[0], env->regs[1]);
--                } else if (n == ARM_NR_semihosting
--                           || n == ARM_NR_thumb_semihosting) {
-+                if (n == ARM_NR_semihosting
-+                    || n == ARM_NR_thumb_semihosting) {
-                     env->regs[0] = do_arm_semihosting (env);
-                 } else if (n == 0 || n >= ARM_SYSCALL_BASE
-                            || (env->thumb && n == ARM_THUMB_SYSCALL)) {
-@@ -395,14 +437,34 @@
-                         n -= ARM_SYSCALL_BASE;
-                         env->eabi = 0;
-                     }
--                    env->regs[0] = do_syscall(env, 
--                                              n, 
--                                              env->regs[0],
--                                              env->regs[1],
--                                              env->regs[2],
--                                              env->regs[3],
--                                              env->regs[4],
--                                              env->regs[5]);
-+                    if ( n > ARM_NR_BASE) {
-+                        switch (n)
-+                          {
-+                          case ARM_NR_cacheflush:
-+                              arm_cache_flush(env->regs[0], env->regs[1]);
-+                              break;
-+#ifdef USE_NPTL
-+                          case ARM_NR_set_tls:
-+                              cpu_set_tls(env, env->regs[0]);
-+                              env->regs[0] = 0;
-+                              break;
-+#endif
-+                          default:
-+                              printf ("Error: Bad syscall: %x\n", n);
-+                              goto error;
-+                          }
-+                      }
-+                    else
-+                      {
-+                        env->regs[0] = do_syscall(env, 
-+                                                  n, 
-+                                                  env->regs[0],
-+                                                  env->regs[1],
-+                                                  env->regs[2],
-+                                                  env->regs[3],
-+                                                  env->regs[4],
-+                                                  env->regs[5]);
-+                      }
-                 } else {
-                     goto error;
-                 }
-@@ -441,6 +503,10 @@
-                   }
-             }
-             break;
-+        case EXCP_KERNEL_TRAP:
-+            if (do_kernel_trap(env))
-+              goto error;
-+            break;
-         default:
-         error:
-             fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n", 
-@@ -2074,6 +2140,10 @@
-     ts->heap_base = info->brk;
-     /* This will be filled in on the first SYS_HEAPINFO call.  */
-     ts->heap_limit = 0;
-+    /* Register the magic kernel code page.  The cpu will generate a
-+       special exception when it tries to execute code here.  We can't
-+       put real code here because it may be in use by the host kernel.  */
-+    page_set_flags(0xffff0000, 0xffff0fff, 0);
- #endif
- 
-     if (gdbstub_port) {
-diff -Naru qemu-snapshot-2007-06-24_05.orig/linux-user/qemu.h qemu-snapshot-2007-06-24_05/linux-user/qemu.h
---- qemu-snapshot-2007-06-24_05.orig/linux-user/qemu.h	2007-05-26 17:09:38.000000000 +0200
-+++ qemu-snapshot-2007-06-24_05/linux-user/qemu.h	2007-06-24 16:33:58.000000000 +0200
-@@ -81,6 +81,9 @@
-     uint32_t heap_limit;
- #endif
-     int used; /* non zero if used */
-+#ifdef USE_NPTL
-+    uint32_t *child_tidptr;
-+#endif
-     struct image_info *info;
-     uint8_t stack[0];
- } __attribute__((aligned(16))) TaskState;
-diff -Naru qemu-snapshot-2007-06-24_05.orig/linux-user/syscall.c qemu-snapshot-2007-06-24_05/linux-user/syscall.c
---- qemu-snapshot-2007-06-24_05.orig/linux-user/syscall.c	2007-06-21 23:57:11.000000000 +0200
-+++ qemu-snapshot-2007-06-24_05/linux-user/syscall.c	2007-06-24 16:33:58.000000000 +0200
-@@ -70,9 +70,18 @@
- #include <linux/kd.h>
- 
- #include "qemu.h"
-+#include "qemu_spinlock.h"
- 
- //#define DEBUG
- 
-+#ifdef USE_NPTL
-+#define CLONE_NPTL_FLAGS2 (CLONE_SETTLS | \
-+    CLONE_PARENT_SETTID | CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID)
-+#else
-+/* XXX: Hardcode the above values.  */
-+#define CLONE_NPTL_FLAGS2 0
-+#endif
-+
- #if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SPARC) \
-     || defined(TARGET_M68K) || defined(TARGET_SH4)
- /* 16 bit uid wrappers emulation */
-@@ -2121,20 +2130,38 @@
-    thread/process */
- #define NEW_STACK_SIZE 8192
- 
-+#ifdef USE_NPTL
-+static spinlock_t nptl_lock = SPIN_LOCK_UNLOCKED;
-+#endif
-+
- static int clone_func(void *arg)
- {
-     CPUState *env = arg;
-+#ifdef HAVE_NPTL
-+    /* Wait until the parent has finshed initializing the tls state.  */
-+    while (!spin_trylock(&nptl_lock))
-+        usleep(1);
-+    spin_unlock(&nptl_lock);
-+#endif
-     cpu_loop(env);
-     /* never exits */
-     return 0;
- }
- 
--int do_fork(CPUState *env, unsigned int flags, unsigned long newsp)
-+int do_fork(CPUState *env, unsigned int flags, unsigned long newsp,
-+            uint32_t *parent_tidptr, void *newtls,
-+            uint32_t *child_tidptr)
- {
-     int ret;
-     TaskState *ts;
-     uint8_t *new_stack;
-     CPUState *new_env;
-+#ifdef USE_NPTL
-+    unsigned int nptl_flags;
-+
-+    if (flags & CLONE_PARENT_SETTID)
-+        *parent_tidptr = gettid();
-+#endif
-     
-     if (flags & CLONE_VM) {
-         ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE);
-@@ -2201,16 +2228,60 @@
- #error unsupported target CPU
- #endif
-         new_env->opaque = ts;
-+#ifdef USE_NPTL
-+     nptl_flags = flags;
-+     flags &= ~CLONE_NPTL_FLAGS2;
-+     if (nptl_flags & CLONE_CHILD_CLEARTID) {
-+          ts->child_tidptr = child_tidptr;
-+     }
-+     if (nptl_flags & CLONE_SETTLS)
-+         cpu_set_tls (new_env, newtls);
-+     /* Grab the global cpu lock so that the thread setup appears
-+        atomic.  */
-+     if (nptl_flags & CLONE_CHILD_SETTID)
-+         spin_lock(&nptl_lock);
-+#else
-+     if (flags & CLONE_NPTL_FLAGS2)
-+         return -EINVAL;
-+#endif
-+
- #ifdef __ia64__
-         ret = __clone2(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
- #else
- 	ret = clone(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
- #endif
-+#ifdef USE_NPTL
-+     if (ret != -1) {
-+         if (nptl_flags & CLONE_CHILD_SETTID)
-+             *child_tidptr = ret;
-+     }
-+     /* Allow the child to continue.  */
-+     if (nptl_flags & CLONE_CHILD_SETTID)
-+         spin_unlock(&nptl_lock);
-+#endif
-     } else {
--        /* if no CLONE_VM, we consider it is a fork */
--        if ((flags & ~CSIGNAL) != 0)
--            return -EINVAL;
--        ret = fork();
-+    /* if no CLONE_VM, we consider it is a fork */
-+    if ((flags & ~(CSIGNAL | CLONE_NPTL_FLAGS2)) != 0)
-+          return -EINVAL;
-+      ret = fork();
-+#ifdef USE_NPTL
-+     /* There is a race condition here.  The parent process could
-+        theoretically read the TID in the child process before the child
-+        tid is set.  This would require using either ptrace
-+        (not implemented) or having *_tidptr to point at a shared memory
-+        mapping.  We can't repeat the spinlock hack used above because
-+        the child process gets its own copy of the lock.  */
-+     if (ret == 0) {
-+         /* Child Process.  */
-+         if (flags & CLONE_CHILD_SETTID)
-+             *child_tidptr = gettid();
-+         ts = (TaskState *)env->opaque;
-+         if (flags & CLONE_CHILD_CLEARTID)
-+             ts->child_tidptr = child_tidptr;
-+         if (flags & CLONE_SETTLS)
-+             cpu_set_tls (env, newtls);
-+     }
-+#endif
-     }
-     return ret;
- }
-@@ -2487,7 +2558,7 @@
-         ret = do_brk(arg1);
-         break;
-     case TARGET_NR_fork:
--        ret = get_errno(do_fork(cpu_env, SIGCHLD, 0));
-+        ret = get_errno(do_fork(cpu_env, SIGCHLD, 0, NULL, NULL, NULL));
-         break;
- #ifdef TARGET_NR_waitpid
-     case TARGET_NR_waitpid:
-@@ -3651,7 +3722,8 @@
-         ret = get_errno(fsync(arg1));
-         break;
-     case TARGET_NR_clone:
--        ret = get_errno(do_fork(cpu_env, arg1, arg2));
-+        ret = get_errno(do_fork(cpu_env, arg1, arg2, (uint32_t *)arg3,
-+                        (void *)arg4, (uint32_t *)arg5));
-         break;
- #ifdef __NR_exit_group
-         /* new thread calls */
-@@ -4039,7 +4111,8 @@
- #endif
- #ifdef TARGET_NR_vfork
-     case TARGET_NR_vfork:
--        ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0));
-+        ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0,
-+                                NULL, NULL, NULL));
-         break;
- #endif
- #ifdef TARGET_NR_ugetrlimit
-@@ -4632,4 +4705,3 @@
- #endif
-     return ret;
- }
--
-diff -Naru qemu-snapshot-2007-06-24_05.orig/qemu_spinlock.h qemu-snapshot-2007-06-24_05/qemu_spinlock.h
---- qemu-snapshot-2007-06-24_05.orig/qemu_spinlock.h	1970-01-01 01:00:00.000000000 +0100
-+++ qemu-snapshot-2007-06-24_05/qemu_spinlock.h	2007-06-24 16:33:58.000000000 +0200
-@@ -0,0 +1,182 @@
-+/*
-+ * internal execution defines for qemu
-+ *
-+ *  Copyright (c) 2003 Fabrice Bellard
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-+ */
-+
-+#ifndef _QEMU_SPINLOCK_H
-+#define _QEMU_SPINLOCK_H
-+
-+#ifdef __powerpc__
-+static inline int testandset (int *p)
-+{
-+    int ret;
-+    __asm__ __volatile__ (
-+                          "0:    lwarx %0,0,%1\n"
-+                          "      xor. %0,%3,%0\n"
-+                          "      bne 1f\n"
-+                          "      stwcx. %2,0,%1\n"
-+                          "      bne- 0b\n"
-+                          "1:    "
-+                          : "=&r" (ret)
-+                          : "r" (p), "r" (1), "r" (0)
-+                          : "cr0", "memory");
-+    return ret;
-+}
-+#endif
-+
-+#ifdef __i386__
-+static inline int testandset (int *p)
-+{
-+    long int readval = 0;
-+
-+    __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
-+                          : "+m" (*p), "+a" (readval)
-+                          : "r" (1)
-+                          : "cc");
-+    return readval;
-+}
-+#endif
-+
-+#ifdef __x86_64__
-+static inline int testandset (int *p)
-+{
-+    long int readval = 0;
-+
-+    __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
-+                          : "+m" (*p), "+a" (readval)
-+                          : "r" (1)
-+                          : "cc");
-+    return readval;
-+}
-+#endif
-+
-+#ifdef __s390__
-+static inline int testandset (int *p)
-+{
-+    int ret;
-+
-+    __asm__ __volatile__ ("0: cs    %0,%1,0(%2)\n"
-+                         "   jl    0b"
-+                         : "=&d" (ret)
-+                         : "r" (1), "a" (p), "0" (*p)
-+                         : "cc", "memory" );
-+    return ret;
-+}
-+#endif
-+
-+#ifdef __alpha__
-+static inline int testandset (int *p)
-+{
-+    int ret;
-+    unsigned long one;
-+
-+    __asm__ __volatile__ ("0:  mov 1,%2\n"
-+                         "     ldl_l %0,%1\n"
-+                         "     stl_c %2,%1\n"
-+                         "     beq %2,1f\n"
-+                         ".subsection 2\n"
-+                         "1:   br 0b\n"
-+                         ".previous"
-+                         : "=r" (ret), "=m" (*p), "=r" (one)
-+                         : "m" (*p));
-+    return ret;
-+}
-+#endif
-+
-+#ifdef __sparc__
-+static inline int testandset (int *p)
-+{
-+       int ret;
-+
-+       __asm__ __volatile__("ldstub    [%1], %0"
-+                            : "=r" (ret)
-+                            : "r" (p)
-+                            : "memory");
-+
-+       return (ret ? 1 : 0);
-+}
-+#endif
-+
-+#ifdef __arm__
-+static inline int testandset (int *spinlock)
-+{
-+    register unsigned int ret;
-+    __asm__ __volatile__("swp %0, %1, [%2]"
-+                         : "=r"(ret)
-+                         : "0"(1), "r"(spinlock));
-+
-+    return ret;
-+}
-+#endif
-+
-+#ifdef __mc68000
-+static inline int testandset (int *p)
-+{
-+    char ret;
-+    __asm__ __volatile__("tas %1; sne %0"
-+                         : "=r" (ret)
-+                         : "m" (p)
-+                         : "cc","memory");
-+    return ret;
-+}
-+#endif
-+
-+#ifdef __ia64
-+#include <ia64intrin.h>
-+
-+static inline int testandset (int *p)
-+{
-+    return __sync_lock_test_and_set (p, 1);
-+}
-+#endif
-+
-+typedef int spinlock_t;
-+
-+#define SPIN_LOCK_UNLOCKED 0
-+
-+#if defined(CONFIG_USER_ONLY)
-+static inline void spin_lock(spinlock_t *lock)
-+{
-+    while (testandset(lock));
-+}
-+
-+static inline void spin_unlock(spinlock_t *lock)
-+{
-+    *lock = 0;
-+}
-+
-+static inline int spin_trylock(spinlock_t *lock)
-+{
-+    return !testandset(lock);
-+}
-+#else
-+static inline void spin_lock(spinlock_t *lock)
-+{
-+}
-+
-+static inline void spin_unlock(spinlock_t *lock)
-+{
-+}
-+
-+static inline int spin_trylock(spinlock_t *lock)
-+{
-+    return 1;
-+}
-+#endif
-+
-+#endif /* ! _QEMU_SPINLOCK_H */
-diff -Naru qemu-snapshot-2007-06-24_05.orig/target-arm/cpu.h qemu-snapshot-2007-06-24_05/target-arm/cpu.h
---- qemu-snapshot-2007-06-24_05.orig/target-arm/cpu.h	2007-06-03 23:02:37.000000000 +0200
-+++ qemu-snapshot-2007-06-24_05/target-arm/cpu.h	2007-06-24 16:33:58.000000000 +0200
-@@ -37,6 +37,9 @@
- #define EXCP_IRQ             5
- #define EXCP_FIQ             6
- #define EXCP_BKPT            7
-+#define EXCP_KERNEL_TRAP     8   /* Jumped to kernel code page.  */
-+
-+
- 
- typedef void ARMWriteCPFunc(void *opaque, int cp_info,
-                             int srcreg, int operand, uint32_t value);
-@@ -97,6 +100,7 @@
-         uint32_t c9_data;
-         uint32_t c13_fcse; /* FCSE PID.  */
-         uint32_t c13_context; /* Context ID.  */
-+	uint32_t c13_tls; /* Paul Brook told me to just add this ;) */
-         uint32_t c15_cpar; /* XScale Coprocessor Access Register */
-     } cp15;
- 
-@@ -169,6 +173,15 @@
- int cpu_arm_signal_handler(int host_signum, void *pinfo, 
-                            void *puc);
- 
-+void cpu_lock(void);
-+void cpu_unlock(void);
-+#if defined(USE_NPTL)
-+static inline void cpu_set_tls(CPUARMState *env, void *newtls)
-+{
-+  env->cp15.c13_tls = (uint32_t)newtls;
-+}
-+#endif
-+
- #define CPSR_M (0x1f)
- #define CPSR_T (1 << 5)
- #define CPSR_F (1 << 6)
-@@ -180,7 +193,11 @@
- #define CPSR_J (1 << 24)
- #define CPSR_IT_0_1 (3 << 25)
- #define CPSR_Q (1 << 27)
--#define CPSR_NZCV (0xf << 28)
-+#define CPSR_V (1 << 28)
-+#define CPSR_C (1 << 29)
-+#define CPSR_Z (1 << 30)
-+#define CPSR_N (1 << 31)
-+#define CPSR_NZCV (CPSR_N | CPSR_Z | CPSR_C | CPSR_V)
- 
- #define CACHED_CPSR_BITS (CPSR_T | CPSR_Q | CPSR_NZCV)
- /* Return the current CPSR value.  */
-diff -Naru qemu-snapshot-2007-06-24_05.orig/target-arm/exec.h qemu-snapshot-2007-06-24_05/target-arm/exec.h
---- qemu-snapshot-2007-06-24_05.orig/target-arm/exec.h	2007-06-03 19:44:36.000000000 +0200
-+++ qemu-snapshot-2007-06-24_05/target-arm/exec.h	2007-06-24 16:33:58.000000000 +0200
-@@ -68,8 +68,6 @@
- 
- /* In op_helper.c */
- 
--void cpu_lock(void);
--void cpu_unlock(void);
- void helper_set_cp(CPUState *, uint32_t, uint32_t);
- uint32_t helper_get_cp(CPUState *, uint32_t);
- void helper_set_cp15(CPUState *, uint32_t, uint32_t);
-diff -Naru qemu-snapshot-2007-06-24_05.orig/target-arm/op.c qemu-snapshot-2007-06-24_05/target-arm/op.c
---- qemu-snapshot-2007-06-24_05.orig/target-arm/op.c	2007-05-21 19:48:01.000000000 +0200
-+++ qemu-snapshot-2007-06-24_05/target-arm/op.c	2007-06-24 16:33:58.000000000 +0200
-@@ -891,6 +891,12 @@
-     cpu_loop_exit();
- }
- 
-+void OPPROTO op_kernel_trap(void)
-+{
-+    env->exception_index = EXCP_KERNEL_TRAP;
-+    cpu_loop_exit();
-+}
-+
- /* VFP support.  We follow the convention used for VFP instrunctions:
-    Single precition routines have a "s" suffix, double precision a
-    "d" suffix.  */
-diff -Naru qemu-snapshot-2007-06-24_05.orig/target-arm/translate.c qemu-snapshot-2007-06-24_05/target-arm/translate.c
---- qemu-snapshot-2007-06-24_05.orig/target-arm/translate.c	2007-06-11 20:59:35.000000000 +0200
-+++ qemu-snapshot-2007-06-24_05/target-arm/translate.c	2007-06-24 16:33:58.000000000 +0200
-@@ -3513,6 +3513,7 @@
-     s->is_jmp = DISAS_JUMP;
- }
- 
-+
- /* generate intermediate code in gen_opc_buf and gen_opparam_buf for
-    basic block 'tb'. If search_pc is TRUE, also generate PC
-    information for each intermediate instruction. */
-@@ -3548,6 +3549,15 @@
-     nb_gen_labels = 0;
-     lj = -1;
-     do {
-+#ifdef CONFIG_USER_ONLY
-+        /* Intercept jump to the magic kernel page.  */
-+        if (dc->pc > 0xffff0000) {
-+            gen_op_kernel_trap();
-+            dc->is_jmp = DISAS_UPDATE;
-+            break;
-+        }
-+#endif
-+
-         if (env->nb_breakpoints > 0) {
-             for(j = 0; j < env->nb_breakpoints; j++) {
-                 if (env->breakpoints[j] == dc->pc) {
diff --git a/packages/qemu/qemu-0.9.0+cvs20070701/configure-0.9.0.patch b/packages/qemu/qemu-0.9.0+cvs20070701/configure-0.9.0.patch
deleted file mode 100644
index d92f6a8264..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20070701/configure-0.9.0.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -Naru qemu-snapshot-2007-06-24_05.orig/configure qemu-snapshot-2007-06-24_05/configure
---- qemu-snapshot-2007-06-24_05.orig/configure	2007-06-23 18:03:35.000000000 +0200
-+++ qemu-snapshot-2007-06-24_05/configure	2007-06-24 16:30:32.000000000 +0200
-@@ -711,7 +711,7 @@
- echo "CC=$cc" >> $config_mak
- echo "HOST_CC=$host_cc" >> $config_mak
- echo "AR=$ar" >> $config_mak
--echo "STRIP=$strip -s -R .comment -R .note" >> $config_mak
-+echo "STRIP=$strip" >> $config_mak
- echo "OS_CFLAGS=$OS_CFLAGS" >> $config_mak
- echo "OS_LDFLAGS=$OS_LDFLAGS" >> $config_mak
- echo "ARCH_CFLAGS=$ARCH_CFLAGS" >> $config_mak
diff --git a/packages/qemu/qemu-0.9.0+cvs20070701/pl110_rgb-r0-0.9.0.patch b/packages/qemu/qemu-0.9.0+cvs20070701/pl110_rgb-r0-0.9.0.patch
deleted file mode 100644
index 3ad4115e73..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20070701/pl110_rgb-r0-0.9.0.patch
+++ /dev/null
@@ -1,217 +0,0 @@
-diff -Naru qemu-neo1973.orig/hw/pl110.c qemu-neo1973/hw/pl110.c
---- qemu-neo1973.orig/hw/pl110.c	2007-06-24 13:56:37.000000000 +0200
-+++ qemu-neo1973/hw/pl110.c	2007-06-24 14:12:09.000000000 +0200
-@@ -10,6 +10,7 @@
- #include "vl.h"
- 
- #define PL110_CR_EN   0x001
-+#define PL110_CR_BGR  0x100
- #define PL110_CR_BEBO 0x200
- #define PL110_CR_BEPO 0x400
- #define PL110_CR_PWR  0x800
-@@ -114,6 +115,7 @@
-     int first, last = 0;
-     int dirty, new_dirty;
-     int i;
-+    int bpp_offset;
- 
-     if (!pl110_enabled(s))
-         return;
-@@ -145,12 +147,17 @@
-         fprintf(stderr, "pl110: Bad color depth\n");
-         exit(1);
-     }
-+    if (s->cr & PL110_CR_BGR)
-+	bpp_offset = 0;
-+    else
-+	bpp_offset = 18;
-+
-     if (s->cr & PL110_CR_BEBO)
--      fn = fntable[s->bpp + 6];
-+      fn = fntable[s->bpp + 6 + bpp_offset];
-     else if (s->cr & PL110_CR_BEPO)
--      fn = fntable[s->bpp + 12];
-+      fn = fntable[s->bpp + 12 + bpp_offset];
-     else
--      fn = fntable[s->bpp];
-+      fn = fntable[s->bpp + bpp_offset];
-     
-     src_width = s->cols;
-     switch (s->bpp) {
-diff -Naru qemu-neo1973.orig/hw/pl110_template.h qemu-neo1973/hw/pl110_template.h
---- qemu-neo1973.orig/hw/pl110_template.h	2007-06-24 13:56:37.000000000 +0200
-+++ qemu-neo1973/hw/pl110_template.h	2007-06-24 14:12:09.000000000 +0200
-@@ -24,6 +24,16 @@
- #error unknown bit depth
- #endif
- 
-+#undef RGB
-+#define BORDER bgr
-+#define ORDER 0
-+#include "pl110_template.h"
-+#define ORDER 1
-+#include "pl110_template.h"
-+#define ORDER 2
-+#include "pl110_template.h"
-+#define RGB
-+#define BORDER rgb
- #define ORDER 0
- #include "pl110_template.h"
- #define ORDER 1
-@@ -33,26 +43,47 @@
- 
- static drawfn glue(pl110_draw_fn_,BITS)[18] =
- {
--    glue(pl110_draw_line1_lblp,BITS),
--    glue(pl110_draw_line2_lblp,BITS),
--    glue(pl110_draw_line4_lblp,BITS),
--    glue(pl110_draw_line8_lblp,BITS),
--    glue(pl110_draw_line16_lblp,BITS),
--    glue(pl110_draw_line32_lblp,BITS),
--
--    glue(pl110_draw_line1_bbbp,BITS),
--    glue(pl110_draw_line2_bbbp,BITS),
--    glue(pl110_draw_line4_bbbp,BITS),
--    glue(pl110_draw_line8_bbbp,BITS),
--    glue(pl110_draw_line16_bbbp,BITS),
--    glue(pl110_draw_line32_bbbp,BITS),
--
--    glue(pl110_draw_line1_lbbp,BITS),
--    glue(pl110_draw_line2_lbbp,BITS),
--    glue(pl110_draw_line4_lbbp,BITS),
--    glue(pl110_draw_line8_lbbp,BITS),
--    glue(pl110_draw_line16_lbbp,BITS),
--    glue(pl110_draw_line32_lbbp,BITS)
-+    glue(pl110_draw_line1_lblp_bgr,BITS),
-+    glue(pl110_draw_line2_lblp_bgr,BITS),
-+    glue(pl110_draw_line4_lblp_bgr,BITS),
-+    glue(pl110_draw_line8_lblp_bgr,BITS),
-+    glue(pl110_draw_line16_lblp_bgr,BITS),
-+    glue(pl110_draw_line32_lblp_bgr,BITS),
-+
-+    glue(pl110_draw_line1_bbbp_bgr,BITS),
-+    glue(pl110_draw_line2_bbbp_bgr,BITS),
-+    glue(pl110_draw_line4_bbbp_bgr,BITS),
-+    glue(pl110_draw_line8_bbbp_bgr,BITS),
-+    glue(pl110_draw_line16_bbbp_bgr,BITS),
-+    glue(pl110_draw_line32_bbbp_bgr,BITS),
-+
-+    glue(pl110_draw_line1_lbbp_bgr,BITS),
-+    glue(pl110_draw_line2_lbbp_bgr,BITS),
-+    glue(pl110_draw_line4_lbbp_bgr,BITS),
-+    glue(pl110_draw_line8_lbbp_bgr,BITS),
-+    glue(pl110_draw_line16_lbbp_bgr,BITS),
-+    glue(pl110_draw_line32_lbbp_bgr,BITS),
-+
-+    glue(pl110_draw_line1_lblp_rgb,BITS),
-+    glue(pl110_draw_line2_lblp_rgb,BITS),
-+    glue(pl110_draw_line4_lblp_rgb,BITS),
-+    glue(pl110_draw_line8_lblp_rgb,BITS),
-+    glue(pl110_draw_line16_lblp_rgb,BITS),
-+    glue(pl110_draw_line32_lblp_rgb,BITS),
-+
-+    glue(pl110_draw_line1_bbbp_rgb,BITS),
-+    glue(pl110_draw_line2_bbbp_rgb,BITS),
-+    glue(pl110_draw_line4_bbbp_rgb,BITS),
-+    glue(pl110_draw_line8_bbbp_rgb,BITS),
-+    glue(pl110_draw_line16_bbbp_rgb,BITS),
-+    glue(pl110_draw_line32_bbbp_rgb,BITS),
-+
-+    glue(pl110_draw_line1_lbbp_rgb,BITS),
-+    glue(pl110_draw_line2_lbbp_rgb,BITS),
-+    glue(pl110_draw_line4_lbbp_rgb,BITS),
-+    glue(pl110_draw_line8_lbbp_rgb,BITS),
-+    glue(pl110_draw_line16_lbbp_rgb,BITS),
-+    glue(pl110_draw_line32_lbbp_rgb,BITS),
- };
- 
- #undef BITS
-@@ -61,18 +92,18 @@
- #else
- 
- #if ORDER == 0
--#define NAME glue(lblp, BITS)
-+#define NAME glue(glue(lblp_, BORDER), BITS)
- #ifdef WORDS_BIGENDIAN
- #define SWAP_WORDS 1
- #endif
- #elif ORDER == 1
--#define NAME glue(bbbp, BITS)
-+#define NAME glue(glue(bbbp_, BORDER), BITS)
- #ifndef WORDS_BIGENDIAN
- #define SWAP_WORDS 1
- #endif
- #else
- #define SWAP_PIXELS 1
--#define NAME glue(lbbp, BITS)
-+#define NAME glue(glue(lbbp_, BORDER), BITS)
- #ifdef WORDS_BIGENDIAN
- #define SWAP_WORDS 1
- #endif
-@@ -195,27 +226,34 @@
- #ifdef SWAP_WORDS
-         data = bswap32(data);
- #endif
-+#ifdef RGB
-+#define LSB r
-+#define MSB b
-+#else
-+#define LSB b
-+#define MSB r
-+#endif
- #if 0
--        r = data & 0x1f;
-+        LSB = data & 0x1f;
-         data >>= 5;
-         g = data & 0x3f;
-         data >>= 6;
--        b = data & 0x1f;
-+        MSB = data & 0x1f;
-         data >>= 5;
- #else
--        r = (data & 0x1f) << 3;
-+        LSB = (data & 0x1f) << 3;
-         data >>= 5;
-         g = (data & 0x3f) << 2;
-         data >>= 6;
--        b = (data & 0x1f) << 3;
-+        MSB = (data & 0x1f) << 3;
-         data >>= 5;
- #endif
-         COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b));
--        r = (data & 0x1f) << 3;
-+        LSB = (data & 0x1f) << 3;
-         data >>= 5;
-         g = (data & 0x3f) << 2;
-         data >>= 6;
--        b = (data & 0x1f) << 3;
-+        MSB = (data & 0x1f) << 3;
-         data >>= 5;
-         COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b));
-         width -= 2;
-@@ -229,14 +267,21 @@
-     unsigned int r, g, b;
-     while (width > 0) {
-         data = *(uint32_t *)src;
-+#ifdef RGB
-+#define LSB r
-+#define MSB b
-+#else
-+#define LSB b
-+#define MSB r
-+#endif
- #ifdef SWAP_WORDS
--        r = data & 0xff;
-+        LSB = data & 0xff;
-         g = (data >> 8) & 0xff;
--        b = (data >> 16) & 0xff;
-+        MSB = (data >> 16) & 0xff;
- #else
--        r = (data >> 24) & 0xff;
-+        LSB = (data >> 24) & 0xff;
-         g = (data >> 16) & 0xff;
--        b = (data >> 8) & 0xff;
-+        MSB = (data >> 8) & 0xff;
- #endif
-         COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b));
-         width--;
diff --git a/packages/qemu/qemu-0.9.0+cvs20070701/qemu-0.9.0-gcc4.patch b/packages/qemu/qemu-0.9.0+cvs20070701/qemu-0.9.0-gcc4.patch
deleted file mode 100644
index 189cd09b67..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20070701/qemu-0.9.0-gcc4.patch
+++ /dev/null
@@ -1,881 +0,0 @@
-diff -Naru qemu-neo1973.orig/dyngen.c qemu-neo1973/dyngen.c
---- qemu-neo1973.orig/dyngen.c	2007-06-24 13:56:38.000000000 +0200
-+++ qemu-neo1973/dyngen.c	2007-06-24 14:33:11.000000000 +0200
-@@ -32,6 +32,8 @@
- 
- #include "config-host.h"
- 
-+//#define DEBUG_OP
-+
- /* NOTE: we test CONFIG_WIN32 instead of _WIN32 to enabled cross
-    compilation */
- #if defined(CONFIG_WIN32)
-@@ -1429,6 +1431,644 @@
- #endif
- 
- 
-+#if defined(HOST_I386) || defined(HOST_X86_64)
-+
-+/* This byte is the first byte of an instruction.  */
-+#define FLAG_INSN     (1 << 0)
-+/* This byte has been processed as part of an instruction.  */
-+#define FLAG_SCANNED  (1 << 1)
-+/* This instruction is a return instruction.  Gcc cometimes generates prefix
-+   bytes, so may be more than one byte long.  */
-+#define FLAG_RET      (1 << 2)
-+/* This is either the target of a jump, or the preceeding instruction uses
-+   a pc-relative offset.  */
-+#define FLAG_TARGET   (1 << 3)
-+/* This is a magic instruction that needs fixing up.  */
-+#define FLAG_EXIT     (1 << 4)
-+#define MAX_EXITS     5
-+
-+static void
-+bad_opcode(const char *name, uint32_t op)
-+{
-+    error("Unsupported opcode %0*x in %s", (op > 0xff) ? 4 : 2, op, name);
-+}
-+
-+/* Mark len bytes as scanned,  Returns insn_size + len.  Reports an error
-+   if these bytes have already been scanned.  */
-+static int
-+eat_bytes(const char *name, char *flags, int insn, int insn_size, int len)
-+{
-+    while (len > 0) {
-+        /* This should never occur in sane code.  */
-+        if (flags[insn + insn_size] & FLAG_SCANNED)
-+            error ("Overlapping instructions in %s", name);
-+        flags[insn + insn_size] |= FLAG_SCANNED;
-+        insn_size++;
-+        len--;
-+    }
-+    return insn_size;
-+}
-+
-+static void
-+trace_i386_insn (const char *name, uint8_t *start_p, char *flags, int insn,
-+                 int len)
-+{
-+    uint8_t *ptr;
-+    uint8_t op;
-+    int modrm;
-+    int is_prefix;
-+    int op_size;
-+    int addr_size;
-+    int insn_size;
-+    int is_ret;
-+    int is_condjmp;
-+    int is_jmp;
-+    int is_exit;
-+    int is_pcrel;
-+    int immed;
-+    int seen_rexw;
-+    int32_t disp;
-+
-+    ptr = start_p + insn;
-+    /* nonzero if this insn has a ModR/M byte.  */
-+    modrm = 1;
-+    /* The size of the immediate value in this instruction.  */
-+    immed = 0;
-+    /* The operand size.  */
-+    op_size = 4;
-+    /* The address size */
-+    addr_size = 4;
-+    /* The total length of this instruction.  */
-+    insn_size = 0;
-+    is_prefix = 1;
-+    is_ret = 0;
-+    is_condjmp = 0;
-+    is_jmp = 0;
-+    is_exit = 0;
-+    seen_rexw = 0;
-+    is_pcrel = 0;
-+
-+    while (is_prefix) {
-+        op = ptr[insn_size];
-+        insn_size = eat_bytes(name, flags, insn, insn_size, 1);
-+        is_prefix = 0;
-+        switch (op >> 4) {
-+        case 0:
-+        case 1:
-+        case 2:
-+        case 3:
-+            if (op == 0x0f) {
-+                /* two-byte opcode.  */
-+                op = ptr[insn_size];
-+                insn_size = eat_bytes(name, flags, insn, insn_size, 1);
-+                switch (op >> 4) {
-+                case 0:
-+                    if ((op & 0xf) > 3)
-+                      modrm = 0;
-+                    break;
-+                case 1: /* vector move or prefetch */
-+                case 2: /* various moves and vector compares.  */
-+                case 4: /* cmov */
-+                case 5: /* vector instructions */
-+                case 6:
-+                case 13:
-+                case 14:
-+                case 15:
-+                    break;
-+                case 7: /* mmx */
-+                    if (op & 0x77) /* emms */
-+                      modrm = 0;
-+                    break;
-+                case 3: /* wrmsr, rdtsc, rdmsr, rdpmc, sysenter, sysexit */
-+                    modrm = 0;
-+                    break;
-+                case 8: /* long conditional jump */
-+                    is_condjmp = 1;
-+                    immed = op_size;
-+                    modrm = 0;
-+                    break;
-+                case 9: /* setcc */
-+                    break;
-+                case 10:
-+                    switch (op & 0x7) {
-+                    case 0: /* push fs/gs */
-+                    case 1: /* pop fs/gs */
-+                    case 2: /* cpuid/rsm */
-+                        modrm = 0;
-+                        break;
-+                    case 4: /* shld/shrd immediate */
-+                        immed = 1;
-+                        break;
-+                    default: /* Normal instructions with a ModR/M byte.  */
-+                        break;
-+                    }
-+                    break;
-+                case 11:
-+                    switch (op & 0xf) {
-+                    case 10: /* bt, bts, btr, btc */
-+                        immed = 1;
-+                        break;
-+                    default:
-+                        /* cmpxchg, lss, btr, lfs, lgs, movzx, btc, bsf, bsr
-+                           undefined, and movsx */
-+                        break;
-+                    }
-+                    break;
-+                case 12:
-+                    if (op & 8) {
-+                        /* bswap */
-+                        modrm = 0;
-+                    } else {
-+                        switch (op & 0x7) {
-+                        case 2:
-+                        case 4:
-+                        case 5:
-+                        case 6:
-+                            immed = 1;
-+                            break;
-+                        default:
-+                            break;
-+                        }
-+                    }
-+                    break;
-+                }
-+            } else if ((op & 0x07) <= 0x3) {
-+                /* General arithmentic ax.  */
-+            } else if ((op & 0x07) <= 0x5) {
-+                /* General arithmetic ax, immediate.  */
-+                if (op & 0x01)
-+                    immed = op_size;
-+                else
-+                    immed = 1;
-+                modrm = 0;
-+            } else if ((op & 0x23) == 0x22) {
-+                /* Segment prefix.  */
-+                is_prefix = 1;
-+            } else {
-+                /* Segment register push/pop or DAA/AAA/DAS/AAS.  */
-+                modrm = 0;
-+            }
-+            break;
-+
-+#if defined(HOST_X86_64)
-+        case 4: /* rex prefix.  */
-+            is_prefix = 1;
-+            /* The address/operand size is actually 64-bit, but the immediate
-+               values in the instruction are still 32-bit.  */
-+            op_size = 4;
-+            addr_size = 4;
-+            if (op & 8)
-+                seen_rexw = 1;
-+            break;
-+#else
-+        case 4: /* inc/dec register.  */
-+#endif
-+        case 5: /* push/pop general register.  */
-+            modrm = 0;
-+            break;
-+
-+        case 6:
-+            switch (op & 0x0f) {
-+            case 0: /* pusha */
-+            case 1: /* popa */
-+                modrm = 0;
-+                break;
-+            case 2: /* bound */
-+            case 3: /* arpl */
-+                break;
-+            case 4: /* FS */
-+            case 5: /* GS */
-+                is_prefix = 1;
-+                break;
-+            case 6: /* opcode size prefix.  */
-+                op_size = 2;
-+                is_prefix = 1;
-+                break;
-+            case 7: /* Address size prefix.  */
-+                addr_size = 2;
-+                is_prefix = 1;
-+                break;
-+            case 8: /* push immediate */
-+                immed = op_size;
-+                modrm = 0;
-+                break;
-+            case 10: /* push 8-bit immediate */
-+                immed = 1;
-+                modrm = 0;
-+                break;
-+            case 9: /* imul immediate */
-+                immed = op_size;
-+                break;
-+            case 11: /* imul 8-bit immediate */
-+                immed = 1;
-+                break;
-+            case 12: /* insb */
-+            case 13: /* insw */
-+            case 14: /* outsb */
-+            case 15: /* outsw */
-+                modrm = 0;
-+                break;
-+            }
-+            break;
-+
-+        case 7: /* Short conditional jump.  */
-+            is_condjmp = 1;
-+            immed = 1;
-+            modrm = 0;
-+            break;
-+          
-+        case 8:
-+            if ((op & 0xf) <= 3) {
-+                /* arithmetic immediate.  */
-+                if ((op & 3) == 1)
-+                    immed = op_size;
-+                else
-+                    immed = 1;
-+            }
-+            /* else test, xchg, mov, lea or pop general.  */
-+            break;
-+
-+        case 9:
-+            /* Various single-byte opcodes with no modrm byte.  */
-+            modrm = 0;
-+            if (op == 10) {
-+                /* Call */
-+                immed = 4;
-+            }
-+            break;
-+
-+        case 10:
-+            switch ((op & 0xe) >> 1) {
-+            case 0: /* mov absoliute immediate.  */
-+            case 1:
-+                if (seen_rexw)
-+                    immed = 8;
-+                else
-+                    immed = addr_size;
-+                break;
-+            case 4: /* test immediate.  */
-+                if (op & 1)
-+                    immed = op_size;
-+                else
-+                    immed = 1;
-+                break;
-+            default: /* Various string ops.  */
-+                break;
-+            }
-+            modrm = 0;
-+            break;
-+
-+        case 11: /* move immediate to register */
-+            if (op & 8) {
-+                if (seen_rexw)
-+                    immed = 8;
-+                else
-+                    immed = op_size;
-+            } else {
-+                immed = 1;
-+            }
-+            modrm = 0;
-+            break;
-+
-+          case 12:
-+            switch (op & 0xf) {
-+            case 0: /* shift immediate */
-+            case 1:
-+                immed = 1;
-+                break;
-+            case 2: /* ret immediate */
-+                immed = 2;
-+                modrm = 0;
-+                bad_opcode(name, op);
-+                break;
-+            case 3: /* ret */
-+                modrm = 0;
-+                is_ret = 1;
-+            case 4: /* les */
-+            case 5: /* lds */
-+                break;
-+            case 6: /* mov immediate byte */
-+                immed = 1;
-+                break;
-+            case 7: /* mov immediate */
-+                immed = op_size;
-+                break;
-+            case 8: /* enter */
-+                /* TODO: Is this right?  */
-+                immed = 3;
-+                modrm = 0;
-+                break;
-+            case 10: /* retf immediate */
-+                immed = 2;
-+                modrm = 0;
-+                bad_opcode(name, op);
-+                break;
-+            case 13: /* int */
-+                immed = 1;
-+                modrm = 0;
-+                break;
-+            case 11: /* retf */
-+            case 15: /* iret */
-+                modrm = 0;
-+                bad_opcode(name, op);
-+                break;
-+            default: /* leave, int3 or into */
-+                modrm = 0;
-+                break;
-+            }
-+            break;
-+
-+        case 13:
-+            if ((op & 0xf) >= 8) {
-+                /* Coprocessor escape.  For our purposes this is just a normal
-+                   instruction with a ModR/M byte.  */
-+            } else if ((op & 0xf) >= 4) {
-+                /* AAM, AAD or XLAT */
-+                modrm = 0;
-+            }
-+            /* else shift instruction */
-+            break;
-+
-+        case 14:
-+            switch ((op & 0xc) >> 2) {
-+            case 0: /* loop or jcxz */
-+                is_condjmp = 1;
-+                immed = 1;
-+                break;
-+            case 1: /* in/out immed */
-+                immed = 1;
-+                break;
-+            case 2: /* call or jmp */
-+                switch (op & 3) {
-+                case 0: /* call */
-+                    immed = op_size;
-+                    break;
-+                case 1: /* long jump */
-+                    immed = 4;
-+                    is_jmp = 1;
-+                    break;
-+                case 2: /* far jmp */
-+                    bad_opcode(name, op);
-+                    break;
-+                case 3: /* short jmp */
-+                    immed = 1;
-+                    is_jmp = 1;
-+                    break;
-+                }
-+                break;
-+            case 3: /* in/out register */
-+                break;
-+            }
-+            modrm = 0;
-+            break;
-+
-+        case 15:
-+            switch ((op & 0xe) >> 1) {
-+            case 0:
-+            case 1:
-+                is_prefix = 1;
-+                break;
-+            case 2:
-+            case 4:
-+            case 5:
-+            case 6:
-+                modrm = 0;
-+                /* Some privileged insns are used as markers.  */
-+                switch (op) {
-+                case 0xf4: /* hlt: Exit translation block.  */
-+                    is_exit = 1;
-+                    break;
-+                case 0xfa: /* cli: Jump to label.  */
-+                    is_exit = 1;
-+                    immed = 4;
-+                    break;
-+                case 0xfb: /* sti: TB patch jump.  */
-+                    /* Mark the insn for patching, but continue sscanning.  */
-+                    flags[insn] |= FLAG_EXIT;
-+                    immed = 4;
-+                    break;
-+                }
-+                break;
-+            case 3: /* unary grp3 */
-+                if ((ptr[insn_size] & 0x38) == 0) {
-+                    if (op == 0xf7)
-+                        immed = op_size;
-+                    else
-+                        immed = 1; /* test immediate */
-+                }
-+                break;
-+            case 7: /* inc/dec grp4/5 */
-+                /* TODO: This includes indirect jumps.  We should fail if we
-+                   encounter one of these. */
-+                break;
-+            }
-+            break;
-+        }
-+    }
-+
-+    if (modrm) {
-+        if (addr_size != 4)
-+            error("16-bit addressing mode used in %s", name);
-+
-+        disp = 0;
-+        modrm = ptr[insn_size];
-+        insn_size = eat_bytes(name, flags, insn, insn_size, 1);
-+        modrm &= 0xc7;
-+        switch ((modrm & 0xc0) >> 6) {
-+        case 0:
-+            if (modrm == 5)
-+              disp = 4;
-+            break;
-+        case 1:
-+            disp = 1;
-+            break;
-+        case 2:
-+            disp = 4;
-+            break;
-+        }
-+        if ((modrm & 0xc0) != 0xc0 && (modrm & 0x7) == 4) {
-+            /* SIB byte */
-+            if (modrm == 4 && (ptr[insn_size] & 0x7) == 5) {
-+                disp = 4;
-+                is_pcrel = 1;
-+            }
-+            insn_size = eat_bytes(name, flags, insn, insn_size, 1);
-+        }
-+        insn_size = eat_bytes(name, flags, insn, insn_size, disp);
-+    }
-+    insn_size = eat_bytes(name, flags, insn, insn_size, immed);
-+    if (is_condjmp || is_jmp) {
-+        if (immed == 1) {
-+            disp = (int8_t)*(ptr + insn_size - 1);
-+        } else {
-+            disp = (((int32_t)*(ptr + insn_size - 1)) << 24)
-+                   | (((int32_t)*(ptr + insn_size - 2)) << 16)
-+                   | (((int32_t)*(ptr + insn_size - 3)) << 8)
-+                   | *(ptr + insn_size - 4);
-+        }
-+        disp += insn_size;
-+        /* Jumps to external symbols point to the address of the offset
-+           before relocation.  */
-+        /* ??? These are probably a tailcall.  We could fix them up by
-+           replacing them with jmp to EOB + call, but it's easier to just
-+           prevent the compiler generating them.  */
-+        if (disp == 1)
-+            error("Unconditional jump (sibcall?) in %s", name);
-+        disp += insn;
-+        if (disp < 0 || disp > len)
-+            error("Jump outside instruction in %s", name);
-+
-+        if ((flags[disp] & (FLAG_INSN | FLAG_SCANNED)) == FLAG_SCANNED)
-+            error("Overlapping instructions in %s", name);
-+
-+        flags[disp] |= (FLAG_INSN | FLAG_TARGET);
-+        is_pcrel = 1; 
-+    }
-+    if (is_pcrel) {
-+        /* Mark the following insn as a jump target.  This will stop
-+           this instruction being moved.  */
-+        flags[insn + insn_size] |= FLAG_TARGET;
-+    }
-+    if (is_ret)
-+      flags[insn] |= FLAG_RET;
-+
-+    if (is_exit)
-+      flags[insn] |= FLAG_EXIT;
-+
-+    if (!(is_jmp || is_ret || is_exit))
-+      flags[insn + insn_size] |= FLAG_INSN;
-+}
-+
-+/* Scan a function body.  Returns the position of the return sequence.
-+   Sets *patch_bytes to the number of bytes that need to be copied from that
-+   location.  If no patching is required (ie. the return is the last insn)
-+   *patch_bytes will be set to -1.  *plen is the number of code bytes to copy.
-+ */
-+static int trace_i386_op(const char * name, uint8_t *start_p, int *plen,
-+                         int *patch_bytes, int *exit_addrs)
-+{
-+    char *flags;
-+    int more;
-+    int insn;
-+    int retpos;
-+    int bytes;
-+    int num_exits;
-+    int len;
-+    int last_insn;
-+
-+    len = *plen;
-+    flags = malloc(len + 1);
-+    memset(flags, 0, len + 1);
-+    flags[0] |= FLAG_INSN;
-+    more = 1;
-+    while (more) {
-+        more = 0;
-+        for (insn = 0; insn < len; insn++) {
-+            if ((flags[insn] & (FLAG_INSN | FLAG_SCANNED)) == FLAG_INSN) {
-+                trace_i386_insn(name, start_p, flags, insn, len);
-+                more = 1;
-+            }
-+        }
-+    }
-+
-+    /* Strip any unused code at the end of the function.  */
-+    while (len > 0 && flags[len - 1] == 0)
-+      len--;
-+
-+    retpos = -1;
-+    num_exits = 0;
-+    last_insn = 0;
-+    for (insn = 0; insn < len; insn++) {
-+        if (flags[insn] & FLAG_RET) {
-+            /* ??? In theory it should be possible to handle multiple return
-+               points.  In practice it's not worth the effort.  */
-+            if (retpos != -1)
-+                error("Multiple return instructions in %s", name);
-+            retpos = insn;
-+        }
-+        if (flags[insn] & FLAG_EXIT) {
-+            if (num_exits == MAX_EXITS)
-+                error("Too many block exits in %s", name);
-+            exit_addrs[num_exits] = insn;
-+            num_exits++;
-+        }
-+        if (flags[insn] & FLAG_INSN)
-+            last_insn = insn;
-+    }
-+
-+    exit_addrs[num_exits] = -1;
-+    if (retpos == -1) {
-+        if (num_exits == 0) {
-+            error ("No return instruction found in %s", name);
-+        } else {
-+            retpos = len;
-+            last_insn = len;
-+        }
-+    }
-+    
-+    /* If the return instruction is the last instruction we can just 
-+       remove it.  */
-+    if (retpos == last_insn)
-+        *patch_bytes = -1;
-+    else
-+        *patch_bytes = 0;
-+
-+    /* Back up over any nop instructions.  */
-+    while (retpos > 0
-+           && (flags[retpos] & FLAG_TARGET) == 0
-+           && (flags[retpos - 1] & FLAG_INSN) != 0
-+           && start_p[retpos - 1] == 0x90) {
-+        retpos--;
-+    }
-+
-+    if (*patch_bytes == -1) {
-+        *plen = retpos;
-+        free (flags);
-+        return retpos;
-+    }
-+    *plen = len;
-+
-+    /* The ret is in the middle of the function.  Find four more bytes that
-+       so the ret can be replaced by a jmp. */
-+    /* ??? Use a short jump where possible. */
-+    bytes = 4;
-+    insn = retpos + 1;
-+    /* We can clobber everything up to the next jump target.  */
-+    while (insn < len && bytes > 0 && (flags[insn] & FLAG_TARGET) == 0) {
-+        insn++;
-+        bytes--;
-+    }
-+    if (bytes > 0) {
-+        /* ???: Strip out nop blocks.  */
-+        /* We can't do the replacement without clobbering anything important.
-+           Copy preceeding instructions(s) to give us some space.  */
-+        while (retpos > 0) {
-+            /* If this byte is the target of a jmp we can't move it.  */
-+            if (flags[retpos] & FLAG_TARGET)
-+                break;
-+
-+            (*patch_bytes)++;
-+            bytes--;
-+            retpos--;
-+
-+            /* Break out of the loop if we have enough space and this is either 
-+               the first byte of an instruction or a pad byte.  */
-+            if ((flags[retpos] & (FLAG_INSN | FLAG_SCANNED)) != FLAG_SCANNED
-+                && bytes <= 0) {
-+                break;
-+            }
-+        }
-+    }
-+
-+    if (bytes > 0)
-+        error("Unable to replace ret with jmp in %s\n", name);
-+
-+    free(flags);
-+    return retpos;
-+}
-+
-+#endif
-+
- #define MAX_ARGS 3
- 
- /* generate op code */
-@@ -1442,6 +2082,11 @@
-     uint8_t args_present[MAX_ARGS];
-     const char *sym_name, *p;
-     EXE_RELOC *rel;
-+#if defined(HOST_I386) || defined(HOST_X86_64)
-+    int patch_bytes;
-+    int retpos;
-+    int exit_addrs[MAX_EXITS];
-+#endif
- 
-     /* Compute exact size excluding prologue and epilogue instructions.
-      * Increment start_offset to skip epilogue instructions, then compute
-@@ -1452,33 +2097,12 @@
-     p_end = p_start + size;
-     start_offset = offset;
- #if defined(HOST_I386) || defined(HOST_X86_64)
--#ifdef CONFIG_FORMAT_COFF
--    {
--        uint8_t *p;
--        p = p_end - 1;
--        if (p == p_start)
--            error("empty code for %s", name);
--        while (*p != 0xc3) {
--            p--;
--            if (p <= p_start)
--                error("ret or jmp expected at the end of %s", name);
--        }
--        copy_size = p - p_start;
--    }
--#else
-     {
-         int len;
-         len = p_end - p_start;
--        if (len == 0)
--            error("empty code for %s", name);
--        if (p_end[-1] == 0xc3) {
--            len--;
--        } else {
--            error("ret or jmp expected at the end of %s", name);
--        }
-+        retpos = trace_i386_op(name, p_start, &len, &patch_bytes, exit_addrs);
-         copy_size = len;
-     }
--#endif    
- #elif defined(HOST_PPC)
-     {
-         uint8_t *p;
-@@ -1710,6 +2334,13 @@
-     }
- 
-     if (gen_switch == 2) {
-+#if defined(HOST_I386) || defined(HOST_X86_64)
-+        if (patch_bytes != -1)
-+            copy_size += patch_bytes;
-+#ifdef DEBUG_OP
-+        copy_size += 2;
-+#endif
-+#endif
-         fprintf(outfile, "DEF(%s, %d, %d)\n", name + 3, nb_args, copy_size);
-     } else if (gen_switch == 1) {
- 
-@@ -1915,7 +2546,43 @@
- #error unsupport object format
- #endif
-                 }
-+               }
-+                /* Replace the marker instructions with the actual opcodes.  */
-+                for (i = 0; exit_addrs[i] != -1; i++) {
-+                    int op;
-+                    switch (p_start[exit_addrs[i]])
-+                      {
-+                      case 0xf4: op = 0xc3; break; /* hlt -> ret */
-+                      case 0xfa: op = 0xe9; break; /* cli -> jmp */
-+                      case 0xfb: op = 0xe9; break; /* sti -> jmp */
-+                      default: error("Internal error");
-+                      }
-+                    fprintf(outfile, 
-+                            "    *(uint8_t *)(gen_code_ptr + %d) = 0x%x;\n",
-+                            exit_addrs[i], op);
-                 }
-+                /* Fix up the return instruction.  */
-+                if (patch_bytes != -1) {
-+                    if (patch_bytes) {
-+                        fprintf(outfile, "    memcpy(gen_code_ptr + %d,"
-+                                "gen_code_ptr + %d, %d);\n",
-+                                copy_size, retpos, patch_bytes);
-+                    }
-+                    fprintf(outfile,
-+                            "    *(uint8_t *)(gen_code_ptr + %d) = 0xe9;\n",
-+                            retpos);
-+                    fprintf(outfile,
-+                            "    *(uint32_t *)(gen_code_ptr + %d) = 0x%x;\n",
-+                            retpos + 1, copy_size - (retpos + 5));
-+                    
-+                    copy_size += patch_bytes;
-+                }
-+#ifdef DEBUG_OP
-+                fprintf(outfile,
-+                        "    *(uint16_t *)(gen_code_ptr + %d) = 0x9090;\n",
-+                        copy_size);
-+                copy_size += 2;
-+#endif
-             }
- #elif defined(HOST_X86_64)
-             {
-@@ -1949,6 +2616,42 @@
-                     }
-                 }
-                 }
-+                /* Replace the marker instructions with the actual opcodes.  */
-+                for (i = 0; exit_addrs[i] != -1; i++) {
-+                    int op;
-+                    switch (p_start[exit_addrs[i]])
-+                      {
-+                      case 0xf4: op = 0xc3; break; /* hlt -> ret */
-+                      case 0xfa: op = 0xe9; break; /* cli -> jmp */
-+                      case 0xfb: op = 0xe9; break; /* sti -> jmp */
-+                      default: error("Internal error");
-+                      }
-+                    fprintf(outfile, 
-+                            "    *(uint8_t *)(gen_code_ptr + %d) = 0x%x;\n",
-+                            exit_addrs[i], op);
-+                }
-+                /* Fix up the return instruction.  */
-+                if (patch_bytes != -1) {
-+                    if (patch_bytes) {
-+                        fprintf(outfile, "    memcpy(gen_code_ptr + %d,"
-+                                "gen_code_ptr + %d, %d);\n",
-+                                copy_size, retpos, patch_bytes);
-+                    }
-+                    fprintf(outfile,
-+                            "    *(uint8_t *)(gen_code_ptr + %d) = 0xe9;\n",
-+                            retpos);
-+                    fprintf(outfile,
-+                            "    *(uint32_t *)(gen_code_ptr + %d) = 0x%x;\n",
-+                            retpos + 1, copy_size - (retpos + 5));
-+                    
-+                    copy_size += patch_bytes;
-+                }
-+#ifdef DEBUG_OP
-+                fprintf(outfile,
-+                        "    *(uint16_t *)(gen_code_ptr + %d) = 0x9090;\n",
-+                        copy_size);
-+                copy_size += 2;
-+#endif
-             }
- #elif defined(HOST_PPC)
-             {
-diff -Naru qemu-neo1973.orig/dyngen-exec.h qemu-neo1973/dyngen-exec.h
---- qemu-neo1973.orig/dyngen-exec.h	2007-06-24 13:56:38.000000000 +0200
-+++ qemu-neo1973/dyngen-exec.h	2007-06-24 14:35:52.000000000 +0200
-@@ -194,7 +194,12 @@
- #endif
- 
- /* force GCC to generate only one epilog at the end of the function */
-+#if defined(__i386__) || defined(__x86_64__)
-+/* Also add 4 bytes of padding so that we can replace the ret with a jmp.  */
-+#define FORCE_RET() asm volatile ("nop;nop;nop;nop");
-+#else
- #define FORCE_RET() __asm__ __volatile__("" : : : "memory");
-+#endif
- 
- #ifndef OPPROTO
- #define OPPROTO
-@@ -244,11 +249,18 @@
- #endif
- 
- #if defined(__i386__)
--#define EXIT_TB() asm volatile ("ret")
--#define GOTO_LABEL_PARAM(n) asm volatile ("jmp " ASM_NAME(__op_gen_label) #n)
-+/* Dyngen will replace hlt instructions with a ret instruction.  Inserting a
-+   ret directly would confuse dyngen.  */
-+#define EXIT_TB() asm volatile ("hlt")
-+/* Dyngen will replace cli with 0x9e (jmp).
-+   We generate the offset manually.  */
-+#define GOTO_LABEL_PARAM(n) \
-+    asm volatile ("cli;.long " ASM_NAME(__op_gen_label) #n " - 1f;1:")
- #elif defined(__x86_64__)
--#define EXIT_TB() asm volatile ("ret")
--#define GOTO_LABEL_PARAM(n) asm volatile ("jmp " ASM_NAME(__op_gen_label) #n)
-+/* The same as i386.  */
-+#define EXIT_TB() asm volatile ("hlt")
-+#define GOTO_LABEL_PARAM(n) \
-+    asm volatile ("cli;.long " ASM_NAME(__op_gen_label) #n " - 1f;1:")
- #elif defined(__powerpc__)
- #define EXIT_TB() asm volatile ("blr")
- #define GOTO_LABEL_PARAM(n) asm volatile ("b " ASM_NAME(__op_gen_label) #n)
-diff -Naru qemu-neo1973.orig/exec-all.h qemu-neo1973/exec-all.h
---- qemu-neo1973.orig/exec-all.h	2007-06-24 14:31:58.000000000 +0200
-+++ qemu-neo1973/exec-all.h	2007-06-24 14:33:11.000000000 +0200
-@@ -329,14 +329,15 @@
- 
- #elif defined(__i386__) && defined(USE_DIRECT_JUMP)
- 
--/* we patch the jump instruction directly */
-+/* we patch the jump instruction directly.  Use sti in place of the actual
-+   jmp instruction so that dyngen can patch in the correct result.  */
- #define GOTO_TB(opname, tbparam, n)\
- do {\
-     asm volatile (".section .data\n"\
- 		  ASM_OP_LABEL_NAME(n, opname) ":\n"\
- 		  ".long 1f\n"\
- 		  ASM_PREVIOUS_SECTION \
--                  "jmp " ASM_NAME(__op_jmp) #n "\n"\
-+                  "sti;.long " ASM_NAME(__op_jmp) #n " - 1f\n"\
- 		  "1:\n");\
- } while (0)
- 
-diff -Naru qemu-neo1973.orig/target-ppc/exec.h qemu-neo1973/target-ppc/exec.h
---- qemu-neo1973.orig/target-ppc/exec.h	2007-06-24 13:56:32.000000000 +0200
-+++ qemu-neo1973/target-ppc/exec.h	2007-06-24 14:33:11.000000000 +0200
-@@ -66,11 +66,7 @@
- #define FT1 (env->ft1)
- #define FT2 (env->ft2)
- 
--#if defined (DEBUG_OP)
--# define RETURN() __asm__ __volatile__("nop" : : : "memory");
--#else
--# define RETURN() __asm__ __volatile__("" : : : "memory");
--#endif
-+#define RETURN() FORCE_RET()
- 
- static inline target_ulong rotl8 (target_ulong i, int n)
- {
diff --git a/packages/qemu/qemu-0.9.0+cvs20070701/qemu-amd64-32b-mapping-0.9.0.patch b/packages/qemu/qemu-0.9.0+cvs20070701/qemu-amd64-32b-mapping-0.9.0.patch
deleted file mode 100644
index 8f5e9d8b4b..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20070701/qemu-amd64-32b-mapping-0.9.0.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-diff -Naru qemu-snapshot-2007-07-01_05.orig/linux-user/mmap.c qemu-snapshot-2007-07-01_05/linux-user/mmap.c
---- qemu-snapshot-2007-07-01_05.orig/linux-user/mmap.c	2007-06-03 17:31:32.000000000 +0200
-+++ qemu-snapshot-2007-07-01_05/linux-user/mmap.c	2007-07-02 14:00:30.000000000 +0200
-@@ -234,7 +234,7 @@
-             host_offset = offset & qemu_host_page_mask;
-             host_len = len + offset - host_offset;
-             host_start = (long)mmap(real_start ? g2h(real_start) : NULL,
--                                    host_len, prot, flags, fd, host_offset);
-+                                    host_len, prot, (flags | MAP_32BIT), fd, host_offset);
-             if (host_start == -1)
-                 return host_start;
-             /* update start so that it points to the file position at 'offset' */
-@@ -388,7 +388,7 @@
-     int prot;
- 
-     /* XXX: use 5 args syscall */
--    new_addr = (long)mremap(g2h(old_addr), old_size, new_size, flags);
-+    new_addr = (long)mremap(g2h(old_addr), old_size, new_size, (flags | MAP_32BIT));
-     if (new_addr == -1)
-         return new_addr;
-     new_addr = h2g(new_addr);
diff --git a/packages/qemu/qemu-0.9.0+cvs20070701/qemu-sdl-cursor-0.9.0.patch b/packages/qemu/qemu-0.9.0+cvs20070701/qemu-sdl-cursor-0.9.0.patch
deleted file mode 100644
index 08d5513f36..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20070701/qemu-sdl-cursor-0.9.0.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -Naru qemu-snapshot-2007-06-24_05.orig/sdl.c qemu-snapshot-2007-06-24_05/sdl.c
---- qemu-snapshot-2007-06-24_05.orig/sdl.c	2007-06-21 23:08:02.000000000 +0200
-+++ qemu-snapshot-2007-06-24_05/sdl.c	2007-06-24 16:33:20.000000000 +0200
-@@ -245,7 +245,7 @@
- 
-     if (kbd_mouse_is_absolute()) {
-         SDL_ShowCursor(1);
--        SDL_SetCursor(sdl_cursor_hidden);
-+        /* SDL_SetCursor(sdl_cursor_hidden); */
-     } else {
-         SDL_ShowCursor(0);
-     }
diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/.mtn2git_empty b/packages/qemu/qemu-0.9.0+cvs20071121/.mtn2git_empty
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/02_snapshot_use_tmpdir.patch b/packages/qemu/qemu-0.9.0+cvs20071121/02_snapshot_use_tmpdir.patch
deleted file mode 100644
index 40264ed443..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20071121/02_snapshot_use_tmpdir.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-#DPATCHLEVEL=0
----
-# block.c |    6 +++++-
-# 1 file changed, 5 insertions(+), 1 deletion(-)
-#
-Index: block.c
-===================================================================
---- block.c.orig	2007-12-03 23:47:25.000000000 +0000
-+++ block.c	2007-12-03 23:47:31.000000000 +0000
-@@ -191,8 +191,12 @@ void get_tmp_filename(char *filename, in
- void get_tmp_filename(char *filename, int size)
- {
-     int fd;
-+    char *tmpdir;
-     /* XXX: race condition possible */
--    pstrcpy(filename, size, "/tmp/vl.XXXXXX");
-+    tmpdir = getenv("TMPDIR");
-+    if (!tmpdir)
-+        tmpdir = "/tmp";
-+    snprintf(filename, size, "%s/vl.XXXXXX", tmpdir);
-     fd = mkstemp(filename);
-     close(fd);
- }
diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/04_do_not_print_rtc_freq_if_ok.patch b/packages/qemu/qemu-0.9.0+cvs20071121/04_do_not_print_rtc_freq_if_ok.patch
deleted file mode 100644
index 31c9da491d..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20071121/04_do_not_print_rtc_freq_if_ok.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-#DPATCHLEVEL=1
----
-# vl.c |    5 ++++-
-# 1 file changed, 4 insertions(+), 1 deletion(-)
-#
-Index: qemu/vl.c
-===================================================================
---- qemu.orig/vl.c	2007-12-03 15:44:35.000000000 +0000
-+++ qemu/vl.c	2007-12-03 15:51:03.000000000 +0000
-@@ -1289,12 +1289,15 @@ static void hpet_stop_timer(struct qemu_
- 
- static int rtc_start_timer(struct qemu_alarm_timer *t)
- {
-+    unsigned long current_rtc_freq = 0;
-     int rtc_fd;
- 
-     TFR(rtc_fd = open("/dev/rtc", O_RDONLY));
-     if (rtc_fd < 0)
-         return -1;
--    if (ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) {
-+    ioctl(rtc_fd, RTC_IRQP_READ, &current_rtc_freq);
-+    if (current_rtc_freq != RTC_FREQ &&
-+        ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) {
-         fprintf(stderr, "Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal\n"
-                 "error, but for better emulation accuracy either use a 2.6 host Linux kernel or\n"
-                 "type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.\n");
diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/05_non-fatal_if_linux_hd_missing.patch b/packages/qemu/qemu-0.9.0+cvs20071121/05_non-fatal_if_linux_hd_missing.patch
deleted file mode 100644
index fdd922605e..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20071121/05_non-fatal_if_linux_hd_missing.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-#DPATCHLEVEL=1
----
-# hw/pc.c |    1 -
-# 1 file changed, 1 deletion(-)
-#
-Index: qemu/hw/pc.c
-===================================================================
---- qemu.orig/hw/pc.c	2007-12-03 23:47:25.000000000 +0000
-+++ qemu/hw/pc.c	2007-12-03 23:47:38.000000000 +0000
-@@ -385,7 +385,6 @@ static void generate_bootsect(uint32_t g
-     if (bs_table[0] == NULL) {
- 	fprintf(stderr, "A disk image must be given for 'hda' when booting "
- 		"a Linux kernel\n");
--	exit(1);
-     }
- 
-     memset(bootsect, 0, sizeof(bootsect));
diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/06_exit_segfault.patch b/packages/qemu/qemu-0.9.0+cvs20071121/06_exit_segfault.patch
deleted file mode 100644
index 06123d0626..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20071121/06_exit_segfault.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-#DPATCHLEVEL=0
----
-# linux-user/main.c |    8 ++++----
-# 1 file changed, 4 insertions(+), 4 deletions(-)
-#
-Index: linux-user/main.c
-===================================================================
---- linux-user/main.c.orig	2007-12-03 23:47:25.000000000 +0000
-+++ linux-user/main.c	2007-12-03 23:47:41.000000000 +0000
-@@ -714,7 +714,7 @@ void cpu_loop (CPUSPARCState *env)
-         default:
-             printf ("Unhandled trap: 0x%x\n", trapnr);
-             cpu_dump_state(env, stderr, fprintf, 0);
--            exit (1);
-+            _exit (1);
-         }
-         process_pending_signals (env);
-     }
-@@ -1634,7 +1634,7 @@ void cpu_loop (CPUState *env)
-         default:
-             printf ("Unhandled trap: 0x%x\n", trapnr);
-             cpu_dump_state(env, stderr, fprintf, 0);
--            exit (1);
-+            _exit (1);
-         }
-         process_pending_signals (env);
-     }
-@@ -1954,7 +1954,7 @@ int main(int argc, char **argv)
-                 for(item = cpu_log_items; item->mask != 0; item++) {
-                     printf("%-10s %s\n", item->name, item->help);
-                 }
--                exit(1);
-+                _exit(1);
-             }
-             cpu_set_log(mask);
-         } else if (!strcmp(r, "s")) {
-@@ -1973,7 +1973,7 @@ int main(int argc, char **argv)
-             if (qemu_host_page_size == 0 ||
-                 (qemu_host_page_size & (qemu_host_page_size - 1)) != 0) {
-                 fprintf(stderr, "page size must be a power of two\n");
--                exit(1);
-+                _exit(1);
-             }
-         } else if (!strcmp(r, "g")) {
-             gdbstub_port = atoi(argv[optind++]);
diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/10_signal_jobs.patch b/packages/qemu/qemu-0.9.0+cvs20071121/10_signal_jobs.patch
deleted file mode 100644
index 34282adc9d..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20071121/10_signal_jobs.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-#DPATCHLEVEL=0
----
-# linux-user/signal.c |    7 ++++++-
-# 1 file changed, 6 insertions(+), 1 deletion(-)
-#
-Index: linux-user/signal.c
-===================================================================
---- linux-user/signal.c.orig	2007-12-03 15:40:26.000000000 +0000
-+++ linux-user/signal.c	2007-12-03 15:55:49.000000000 +0000
-@@ -364,10 +364,15 @@ int queue_signal(int sig, target_siginfo
-     k = &sigact_table[sig - 1];
-     handler = k->sa._sa_handler;
-     if (handler == TARGET_SIG_DFL) {
-+        if (sig == TARGET_SIGTSTP || sig == TARGET_SIGTTIN || sig == TARGET_SIGTTOU) {
-+            kill(getpid(),SIGSTOP);
-+            return 0;
-+        } else
-         /* default handler : ignore some signal. The other are fatal */
-         if (sig != TARGET_SIGCHLD &&
-             sig != TARGET_SIGURG &&
--            sig != TARGET_SIGWINCH) {
-+            sig != TARGET_SIGWINCH &&
-+            sig != TARGET_SIGCONT) {
-             force_sig(sig);
-         } else {
-             return 0; /* indicate ignored */
diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/11_signal_sigaction.patch b/packages/qemu/qemu-0.9.0+cvs20071121/11_signal_sigaction.patch
deleted file mode 100644
index 33c5e8b12d..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20071121/11_signal_sigaction.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-#DPATCHLEVEL=0
----
-# linux-user/signal.c |    5 +++++
-# 1 file changed, 5 insertions(+)
-#
-Index: linux-user/signal.c
-===================================================================
---- linux-user/signal.c.orig	2007-12-03 23:47:44.000000000 +0000
-+++ linux-user/signal.c	2007-12-03 23:47:46.000000000 +0000
-@@ -512,6 +512,11 @@ int do_sigaction(int sig, const struct t
- 
-     if (sig < 1 || sig > TARGET_NSIG || sig == SIGKILL || sig == SIGSTOP)
-         return -EINVAL;
-+
-+    /* no point doing the stuff as those are not allowed for sigaction */
-+    if ((sig == TARGET_SIGKILL) || (sig == TARGET_SIGSTOP))
-+        return -EINVAL;
-+
-     k = &sigact_table[sig - 1];
- #if defined(DEBUG_SIGNAL)
-     fprintf(stderr, "sigaction sig=%d act=0x%08x, oact=0x%08x\n",
diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/22_net_tuntap_stall.patch b/packages/qemu/qemu-0.9.0+cvs20071121/22_net_tuntap_stall.patch
deleted file mode 100644
index 6017df0f6d..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20071121/22_net_tuntap_stall.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-#DPATCHLEVEL=0
----
-# vl.c |    2 +-
-# 1 file changed, 1 insertion(+), 1 deletion(-)
-#
-Index: vl.c
-===================================================================
---- vl.c.orig	2007-12-03 23:47:36.000000000 +0000
-+++ vl.c	2007-12-03 23:47:48.000000000 +0000
-@@ -4023,7 +4023,7 @@ static int tap_open(char *ifname, int if
-         return -1;
-     }
-     memset(&ifr, 0, sizeof(ifr));
--    ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
-+    ifr.ifr_flags = IFF_TAP | IFF_NO_PI | IFF_ONE_QUEUE;
-     if (ifname[0] != '\0')
-         pstrcpy(ifr.ifr_name, IFNAMSIZ, ifname);
-     else
diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/31_syscalls.patch b/packages/qemu/qemu-0.9.0+cvs20071121/31_syscalls.patch
deleted file mode 100644
index 95a7332ee8..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20071121/31_syscalls.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-#DPATCHLEVEL=0
----
-# linux-user/syscall.c |   11 ++++++++---
-# 1 file changed, 8 insertions(+), 3 deletions(-)
-#
-Index: linux-user/syscall.c
-===================================================================
---- linux-user/syscall.c.orig	2007-12-03 19:32:56.000000000 +0000
-+++ linux-user/syscall.c	2007-12-03 19:33:41.000000000 +0000
-@@ -250,6 +250,7 @@ extern int getresuid(uid_t *, uid_t *, u
- extern int setresgid(gid_t, gid_t, gid_t);
- extern int getresgid(gid_t *, gid_t *, gid_t *);
- extern int setgroups(int, gid_t *);
-+extern int uselib(const char*);
- 
- #define ERRNO_TABLE_SIZE 1200
- 
-@@ -4024,7 +4025,8 @@ abi_long do_syscall(void *cpu_env, int n
- #endif
- #ifdef TARGET_NR_uselib
-     case TARGET_NR_uselib:
--        goto unimplemented;
-+        ret = get_errno(uselib(path((const char*)arg1)));
-+        break;
- #endif
- #ifdef TARGET_NR_swapon
-     case TARGET_NR_swapon:
-@@ -5289,7 +5291,9 @@ abi_long do_syscall(void *cpu_env, int n
-         goto unimplemented;
- #ifdef TARGET_NR_mincore
-     case TARGET_NR_mincore:
--        goto unimplemented;
-+        /*page_unprotect_range((void*)arg3, ((size_t)arg2 + TARGET_PAGE_SIZE - 1) / TARGET_PAGE_SIZE);*/
-+        ret = get_errno(mincore((void*)arg1, (size_t)arg2, (unsigned char*)arg3));
-+        break;
- #endif
- #ifdef TARGET_NR_madvise
-     case TARGET_NR_madvise:
-@@ -5429,7 +5433,8 @@ abi_long do_syscall(void *cpu_env, int n
-         break;
- #ifdef TARGET_NR_readahead
-     case TARGET_NR_readahead:
--        goto unimplemented;
-+        ret = get_errno(readahead((int)arg1, (off64_t)arg2, (size_t)arg3));
-+        break;
- #endif
- #ifdef TARGET_NR_setxattr
-     case TARGET_NR_setxattr:
diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/32_syscall_sysctl.patch b/packages/qemu/qemu-0.9.0+cvs20071121/32_syscall_sysctl.patch
deleted file mode 100644
index 5e8dd75b0e..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20071121/32_syscall_sysctl.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-#DPATCHLEVEL=0
----
-# linux-user/syscall.c |   32 +++++++++++++++++++++++++++++---
-# 1 file changed, 29 insertions(+), 3 deletions(-)
-#
-Index: linux-user/syscall.c
-===================================================================
---- linux-user/syscall.c.orig	2007-12-03 15:56:24.000000000 +0000
-+++ linux-user/syscall.c	2007-12-03 15:57:36.000000000 +0000
-@@ -52,6 +52,7 @@
- //#include <sys/user.h>
- #include <netinet/ip.h>
- #include <netinet/tcp.h>
-+#include <sys/sysctl.h>
- 
- #define termios host_termios
- #define winsize host_winsize
-@@ -4739,9 +4740,34 @@ abi_long do_syscall(void *cpu_env, int n
-         break;
- #endif
-     case TARGET_NR__sysctl:
--        /* We don't implement this, but ENOTDIR is always a safe
--           return value. */
--        ret = -TARGET_ENOTDIR;
-+        {
-+            struct __sysctl_args *args = (struct __sysctl_args *) arg1;
-+            int *name_target, *name, nlen, *oldlenp, oldlen, newlen, i;
-+            void *oldval, *newval;
-+
-+            name_target = (int *) tswapl((long) args->name);
-+            nlen = tswapl(args->nlen);
-+            oldval = (void *) tswapl((long) args->oldval);
-+            oldlenp = (int *) tswapl((long) args->oldlenp);
-+            oldlen = tswapl(*oldlenp);
-+            newval = (void *) tswapl((long) args->newval);
-+            newlen = tswapl(args->newlen);
-+
-+            name = alloca(nlen * sizeof (int));
-+            for (i = 0; i < nlen; i++)
-+                name[i] = tswapl(name_target[i]);
-+
-+            if (nlen == 2 && name[0] == CTL_KERN && name[1] == KERN_VERSION) {
-+                ret = get_errno(
-+                        sysctl(name, nlen, oldval, &oldlen, newval, newlen));
-+                if (!is_error(ret)) {
-+                    *oldlenp = tswapl(oldlen);
-+                }
-+            } else {
-+                gemu_log("qemu: Unsupported sysctl name\n");
-+                ret = -ENOSYS;
-+            }
-+        }
-         break;
-     case TARGET_NR_sched_setparam:
-         {
diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/33_syscall_ppc_clone.patch b/packages/qemu/qemu-0.9.0+cvs20071121/33_syscall_ppc_clone.patch
deleted file mode 100644
index 3f733b6ab8..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20071121/33_syscall_ppc_clone.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-#DPATCHLEVEL=0
----
-# linux-user/syscall.c |    6 +-----
-# 1 file changed, 1 insertion(+), 5 deletions(-)
-#
-Index: linux-user/syscall.c
-===================================================================
---- linux-user/syscall.c.orig	2007-12-03 15:58:11.000000000 +0000
-+++ linux-user/syscall.c	2007-12-03 15:58:46.000000000 +0000
-@@ -2750,11 +2750,7 @@ int do_fork(CPUState *env, unsigned int 
-         if (!newsp)
-             newsp = env->gpr[1];
-         new_env->gpr[1] = newsp;
--        {
--            int i;
--            for (i = 7; i < 32; i++)
--                new_env->gpr[i] = 0;
--        }
-+        new_env->gpr[3] = 0;
- #elif defined(TARGET_SH4)
- 	if (!newsp)
- 	  newsp = env->gregs[15];
diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/39_syscall_fadvise64.patch b/packages/qemu/qemu-0.9.0+cvs20071121/39_syscall_fadvise64.patch
deleted file mode 100644
index 54ee3e0948..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20071121/39_syscall_fadvise64.patch
+++ /dev/null
@@ -1,21 +0,0 @@
----
- linux-user/syscall.c |    6 ++++++
- 1 file changed, 6 insertions(+)
-
-Index: linux-user/syscall.c
-===================================================================
---- linux-user/syscall.c.orig	2007-12-03 19:33:47.000000000 +0000
-+++ linux-user/syscall.c	2007-12-03 19:33:48.000000000 +0000
-@@ -5317,6 +5317,12 @@ abi_long do_syscall(void *cpu_env, int n
-         ret = get_errno(mincore((void*)arg1, (size_t)arg2, (unsigned char*)arg3));
-         break;
- #endif
-+#ifdef TARGET_NR_fadvise64_64
-+     case TARGET_NR_fadvise64_64:
-+        /* Just return success */
-+        ret = get_errno(0);
-+        break;
-+#endif
- #ifdef TARGET_NR_madvise
-     case TARGET_NR_madvise:
-         /* A straight passthrough may not be safe because qemu sometimes
diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/41_arm_fpa_sigfpe.patch b/packages/qemu/qemu-0.9.0+cvs20071121/41_arm_fpa_sigfpe.patch
deleted file mode 100644
index cea3afc7ff..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20071121/41_arm_fpa_sigfpe.patch
+++ /dev/null
@@ -1,104 +0,0 @@
-#DPATCHLEVEL=0
----
-# linux-user/main.c        |   51 ++++++++++++++++++++++++++++++++++++++++++++++-
-# target-arm/nwfpe/fpa11.c |    7 ++++++
-# 2 files changed, 57 insertions(+), 1 deletion(-)
-#
-Index: linux-user/main.c
-===================================================================
---- linux-user/main.c.orig	2007-12-03 15:59:10.000000000 +0000
-+++ linux-user/main.c	2007-12-03 16:01:27.000000000 +0000
-@@ -377,18 +377,67 @@ void cpu_loop(CPUARMState *env)
-             {
-                 TaskState *ts = env->opaque;
-                 uint32_t opcode;
-+                int rc;
- 
-                 /* we handle the FPU emulation here, as Linux */
-                 /* we get the opcode */
-                 /* FIXME - what to do if get_user() fails? */
-                 get_user_u32(opcode, env->regs[15]);
- 
--                if (EmulateAll(opcode, &ts->fpa, env) == 0) {
-+                rc = EmulateAll(opcode, &ts->fpa, env);
-+                if (rc == 0) { /* illegal instruction */
-                     info.si_signo = SIGILL;
-                     info.si_errno = 0;
-                     info.si_code = TARGET_ILL_ILLOPN;
-                     info._sifields._sigfault._addr = env->regs[15];
-                     queue_signal(info.si_signo, &info);
-+                } else if (rc < 0) { /* FP exception */
-+                    int arm_fpe=0;
-+
-+                     /* translate softfloat flags to FPSR flags */
-+                    if (-rc & float_flag_invalid)
-+                      arm_fpe |= BIT_IOC;
-+                    if (-rc & float_flag_divbyzero)
-+                      arm_fpe |= BIT_DZC;
-+                    if (-rc & float_flag_overflow)
-+                      arm_fpe |= BIT_OFC;
-+                    if (-rc & float_flag_underflow)
-+                      arm_fpe |= BIT_UFC;
-+                    if (-rc & float_flag_inexact)
-+                      arm_fpe |= BIT_IXC;
-+
-+                    FPSR fpsr = ts->fpa.fpsr;
-+                    //printf("fpsr 0x%x, arm_fpe 0x%x\n",fpsr,arm_fpe);
-+
-+                    if (fpsr & (arm_fpe << 16)) { /* exception enabled? */
-+                      info.si_signo = SIGFPE;
-+                      info.si_errno = 0;
-+
-+                      /* ordered by priority, least first */
-+                      if (arm_fpe & BIT_IXC) info.si_code = TARGET_FPE_FLTRES;
-+                      if (arm_fpe & BIT_UFC) info.si_code = TARGET_FPE_FLTUND;
-+                      if (arm_fpe & BIT_OFC) info.si_code = TARGET_FPE_FLTOVF;
-+                      if (arm_fpe & BIT_DZC) info.si_code = TARGET_FPE_FLTDIV;
-+                      if (arm_fpe & BIT_IOC) info.si_code = TARGET_FPE_FLTINV;
-+
-+                      info._sifields._sigfault._addr = env->regs[15];
-+                      queue_signal(info.si_signo, &info);
-+                    } else {
-+                      env->regs[15] += 4;
-+                    }
-+
-+                    /* accumulate unenabled exceptions */
-+                    if ((!(fpsr & BIT_IXE)) && (arm_fpe & BIT_IXC))
-+                      fpsr |= BIT_IXC;
-+                    if ((!(fpsr & BIT_UFE)) && (arm_fpe & BIT_UFC))
-+                      fpsr |= BIT_UFC;
-+                    if ((!(fpsr & BIT_OFE)) && (arm_fpe & BIT_OFC))
-+                      fpsr |= BIT_OFC;
-+                    if ((!(fpsr & BIT_DZE)) && (arm_fpe & BIT_DZC))
-+                      fpsr |= BIT_DZC;
-+                    if ((!(fpsr & BIT_IOE)) && (arm_fpe & BIT_IOC))
-+                      fpsr |= BIT_IOC;
-+                    ts->fpa.fpsr=fpsr;
-                 } else {
-                     /* increment PC */
-                     env->regs[15] += 4;
-Index: target-arm/nwfpe/fpa11.c
-===================================================================
---- target-arm/nwfpe/fpa11.c.orig	2007-12-03 15:40:26.000000000 +0000
-+++ target-arm/nwfpe/fpa11.c	2007-12-03 15:59:11.000000000 +0000
-@@ -162,6 +162,8 @@ unsigned int EmulateAll(unsigned int opc
-     fpa11->initflag = 1;
-   }
- 
-+  set_float_exception_flags(0, &fpa11->fp_status);  
-+
-   if (TEST_OPCODE(opcode,MASK_CPRT))
-   {
-     //fprintf(stderr,"emulating CPRT\n");
-@@ -191,6 +193,11 @@ unsigned int EmulateAll(unsigned int opc
-   }
- 
- //  restore_flags(flags);
-+  if(nRc == 1 && get_float_exception_flags(&fpa11->fp_status))
-+  {
-+    //printf("fef 0x%x\n",float_exception_flags);
-+    nRc=-get_float_exception_flags(&fpa11->fp_status);
-+  }
- 
-   //printf("returning %d\n",nRc);
-   return(nRc);
diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/52_ne2000_return.patch b/packages/qemu/qemu-0.9.0+cvs20071121/52_ne2000_return.patch
deleted file mode 100644
index e4ea33f2c6..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20071121/52_ne2000_return.patch
+++ /dev/null
@@ -1,17 +0,0 @@
----
- hw/ne2000.c |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-Index: qemu/hw/ne2000.c
-===================================================================
---- qemu.orig/hw/ne2000.c	2007-12-03 19:32:52.000000000 +0000
-+++ qemu/hw/ne2000.c	2007-12-03 19:33:55.000000000 +0000
-@@ -217,7 +217,7 @@ static int ne2000_can_receive(void *opaq
-     NE2000State *s = opaque;
- 
-     if (s->cmd & E8390_STOP)
--        return 1;
-+        return 0;
-     return !ne2000_buffer_full(s);
- }
- 
diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/61_safe_64bit_int.patch b/packages/qemu/qemu-0.9.0+cvs20071121/61_safe_64bit_int.patch
deleted file mode 100644
index bdb0d2e232..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20071121/61_safe_64bit_int.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-#DPATCHLEVEL=0
----
-# dyngen-exec.h |    4 ++--
-# 1 file changed, 2 insertions(+), 2 deletions(-)
-#
-Index: dyngen-exec.h
-===================================================================
---- dyngen-exec.h.orig	2007-12-03 15:40:26.000000000 +0000
-+++ dyngen-exec.h	2007-12-03 16:03:29.000000000 +0000
-@@ -38,7 +38,7 @@ typedef unsigned int uint32_t;
- // Linux/Sparc64 defines uint64_t
- #if !(defined (__sparc_v9__) && defined(__linux__))
- /* XXX may be done for all 64 bits targets ? */
--#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__)
-+#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__) || defined(__sparc__)
- typedef unsigned long uint64_t;
- #else
- typedef unsigned long long uint64_t;
-@@ -55,7 +55,7 @@ typedef signed short int16_t;
- typedef signed int int32_t;
- // Linux/Sparc64 defines int64_t
- #if !(defined (__sparc_v9__) && defined(__linux__))
--#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__)
-+#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__) || defined(__sparc__)
- typedef signed long int64_t;
- #else
- typedef signed long long int64_t;
diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/63_sparc_build.patch b/packages/qemu/qemu-0.9.0+cvs20071121/63_sparc_build.patch
deleted file mode 100644
index 37b38f641b..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20071121/63_sparc_build.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-#DPATCHLEVEL=0
----
-# sparc.ld |    2 +-
-# 1 file changed, 1 insertion(+), 1 deletion(-)
-#
-Index: sparc.ld
-===================================================================
---- sparc.ld.orig	2007-12-03 15:40:26.000000000 +0000
-+++ sparc.ld	2007-12-03 16:05:06.000000000 +0000
-@@ -6,7 +6,7 @@ ENTRY(_start)
- SECTIONS
- {
-   /* Read-only sections, merged into text segment: */
--  . = 0x60000000 + SIZEOF_HEADERS;
-+  . = 0x60000000 + 0x400;
-   .interp     : { *(.interp)    }
-   .hash          : { *(.hash)           }
-   .dynsym        : { *(.dynsym)         }
diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/64_ppc_asm_constraints.patch b/packages/qemu/qemu-0.9.0+cvs20071121/64_ppc_asm_constraints.patch
deleted file mode 100644
index e4858b79d7..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20071121/64_ppc_asm_constraints.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-#DPATCHLEVEL=1
----
-# cpu-all.h |    2 +-
-# 1 file changed, 1 insertion(+), 1 deletion(-)
-#
-Index: qemu/cpu-all.h
-===================================================================
---- qemu.orig/cpu-all.h	2007-06-13 11:48:22.000000000 +0100
-+++ qemu/cpu-all.h	2007-06-13 11:51:56.000000000 +0100
-@@ -250,7 +250,7 @@ static inline void stw_le_p(void *ptr, i
- static inline void stl_le_p(void *ptr, int v)
- {
- #ifdef __powerpc__
--    __asm__ __volatile__ ("stwbrx %1,0,%2" : "=m" (*(uint32_t *)ptr) : "r" (v), "r" (ptr));
-+    __asm__ __volatile__ ("stwbrx %0,0,%1" : : "r" (v), "r" (ptr) : "memory");
- #else
-     uint8_t *p = ptr;
-     p[0] = v;
diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/65_kfreebsd.patch b/packages/qemu/qemu-0.9.0+cvs20071121/65_kfreebsd.patch
deleted file mode 100644
index dfece800ac..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20071121/65_kfreebsd.patch
+++ /dev/null
@@ -1,35 +0,0 @@
----
- configure |    6 ++++++
- vl.c      |    2 ++
- 2 files changed, 8 insertions(+)
-
-Index: configure
-===================================================================
---- configure.orig	2007-12-03 15:40:26.000000000 +0000
-+++ configure	2007-12-03 16:05:34.000000000 +0000
-@@ -129,6 +129,12 @@ if [ "$cpu" = "i386" -o "$cpu" = "x86_64
-     kqemu="yes"
- fi
- ;;
-+GNU/kFreeBSD)
-+oss="yes"
-+if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
-+    kqemu="yes"
-+fi
-+;;
- FreeBSD)
- bsd="yes"
- oss="yes"
-Index: vl.c
-===================================================================
---- vl.c.orig	2007-12-03 16:05:32.000000000 +0000
-+++ vl.c	2007-12-03 16:05:34.000000000 +0000
-@@ -97,6 +97,8 @@
- #include <stropts.h>
- #endif
- #endif
-+#elif defined (__GLIBC__) && defined (__FreeBSD_kernel__)
-+#include <freebsd/stdlib.h>
- #else
- #include <winsock2.h>
- int inet_aton(const char *cp, struct in_addr *ia);
diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/66_tls_ld.patch b/packages/qemu/qemu-0.9.0+cvs20071121/66_tls_ld.patch
deleted file mode 100644
index 54e02eff8b..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20071121/66_tls_ld.patch
+++ /dev/null
@@ -1,55 +0,0 @@
----
- arm.ld  |    7 +++++++
- i386.ld |    7 +++++++
- 2 files changed, 14 insertions(+)
-
-Index: arm.ld
-===================================================================
---- arm.ld.orig	2007-06-13 11:48:22.000000000 +0100
-+++ arm.ld	2007-06-13 11:51:56.000000000 +0100
-@@ -26,6 +26,10 @@ SECTIONS
-     { *(.rel.rodata) *(.rel.gnu.linkonce.r*) }
-   .rela.rodata   :
-     { *(.rela.rodata) *(.rela.gnu.linkonce.r*) }
-+  .rel.tdata     : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
-+  .rela.tdata    : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
-+  .rel.tbss      : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
-+  .rela.tbss     : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
-   .rel.got       : { *(.rel.got)		}
-   .rela.got      : { *(.rela.got)		}
-   .rel.ctors     : { *(.rel.ctors)	}
-@@ -58,6 +62,9 @@ SECTIONS
-   .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
-    __exidx_end = .;
-   .reginfo : { *(.reginfo) }
-+  /* Thread Local Storage sections  */
-+  .tdata	  : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
-+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
-   /* Adjust the address for the data segment.  We want to adjust up to
-      the same address within the page on the next page up.  */
-   . = ALIGN(0x100000) + (. & (0x100000 - 1));
-Index: i386.ld
-===================================================================
---- i386.ld.orig	2007-06-13 11:48:22.000000000 +0100
-+++ i386.ld	2007-06-13 11:51:56.000000000 +0100
-@@ -28,6 +28,10 @@ SECTIONS
-     { *(.rel.rodata) *(.rel.gnu.linkonce.r*) }
-   .rela.rodata   :
-     { *(.rela.rodata) *(.rela.gnu.linkonce.r*) }
-+  .rel.tdata     : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
-+  .rela.tdata    : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
-+  .rel.tbss      : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
-+  .rela.tbss     : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
-   .rel.got       : { *(.rel.got)		}
-   .rela.got      : { *(.rela.got)		}
-   .rel.ctors     : { *(.rel.ctors)	}
-@@ -53,6 +57,9 @@ SECTIONS
-   _etext = .;
-   PROVIDE (etext = .);
-   .fini      : { *(.fini)    } =0x47ff041f
-+  /* Thread Local Storage sections  */
-+  .tdata	  : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
-+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
-   . = ALIGN(32 / 8);
-   PROVIDE (__preinit_array_start = .);
-   .preinit_array     : { *(.preinit_array) }
diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/91-oh-sdl-cursor.patch b/packages/qemu/qemu-0.9.0+cvs20071121/91-oh-sdl-cursor.patch
deleted file mode 100644
index 0d60c1c306..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20071121/91-oh-sdl-cursor.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-=== modified file 'sdl.c'
----
- sdl.c |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-Index: sdl.c
-===================================================================
---- sdl.c.orig	2007-12-03 19:32:15.000000000 +0000
-+++ sdl.c	2007-12-03 19:34:04.000000000 +0000
-@@ -247,7 +247,7 @@ static void sdl_hide_cursor(void)
- 
-     if (kbd_mouse_is_absolute()) {
-         SDL_ShowCursor(1);
--        SDL_SetCursor(sdl_cursor_hidden);
-+        /* SDL_SetCursor(sdl_cursor_hidden); */
-     } else {
-         SDL_ShowCursor(0);
-     }
diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/disable-error-in-configure.patch b/packages/qemu/qemu-0.9.0+cvs20071121/disable-error-in-configure.patch
deleted file mode 100644
index 017f9f6355..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20071121/disable-error-in-configure.patch
+++ /dev/null
@@ -1,17 +0,0 @@
----
- configure |    2 --
- 1 file changed, 2 deletions(-)
-
-Index: qemu/configure
-===================================================================
---- qemu.orig/configure	2007-12-03 16:38:38.000000000 +0000
-+++ qemu/configure	2007-12-03 16:38:39.000000000 +0000
-@@ -323,8 +323,6 @@ for opt do
-   ;;
-   --disable-werror) werror="no"
-   ;;
--  *) echo "ERROR: unknown option $opt"; show_help="yes"
--  ;;
-   --disable-nptl) nptl="no"
-   ;;
-   esac
diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/fix_segfault.patch b/packages/qemu/qemu-0.9.0+cvs20071121/fix_segfault.patch
deleted file mode 100644
index 443c330650..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20071121/fix_segfault.patch
+++ /dev/null
@@ -1,37 +0,0 @@
----
- linux-user/syscall.c |   22 ----------------------
- 1 file changed, 22 deletions(-)
-
-Index: qemu/linux-user/syscall.c
-===================================================================
---- qemu.orig/linux-user/syscall.c	2007-12-03 23:40:11.000000000 +0000
-+++ qemu/linux-user/syscall.c	2007-12-03 23:40:21.000000000 +0000
-@@ -5695,28 +5695,6 @@ abi_long do_syscall(void *cpu_env, int n
-            goto unimplemented_nowarn;
- #endif
- 
--#ifdef TARGET_NR_clock_gettime
--    case TARGET_NR_clock_gettime:
--    {
--        struct timespec ts;
--        ret = get_errno(clock_gettime(arg1, &ts));
--        if (!is_error(ret)) {
--            host_to_target_timespec(arg2, &ts);
--        }
--        break;
--    }
--#endif
--#ifdef TARGET_NR_clock_getres
--    case TARGET_NR_clock_getres:
--    {
--        struct timespec ts;
--        ret = get_errno(clock_getres(arg1, &ts));
--        if (!is_error(ret)) {
--            host_to_target_timespec(arg2, &ts);
--        }
--        break;
--    }
--#endif
- 
- #if defined(TARGET_NR_set_tid_address) && defined(__NR_set_tid_address)
-     case TARGET_NR_set_tid_address:
diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/no-strip.patch b/packages/qemu/qemu-0.9.0+cvs20071121/no-strip.patch
deleted file mode 100644
index fe90f36182..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20071121/no-strip.patch
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/Makefile.org	2007-11-18 23:33:07.000000000 +0200
-+++ a/Makefile	2008-01-01 19:09:25.000000000 +0200
-@@ -165,7 +165,7 @@
- install: all $(if $(BUILD_DOCS),install-doc)
- 	mkdir -p "$(DESTDIR)$(bindir)"
- ifneq ($(TOOLS),)
--	$(INSTALL) -m 755 -s $(TOOLS) "$(DESTDIR)$(bindir)"
-+	$(INSTALL) -m 755 $(TOOLS) "$(DESTDIR)$(bindir)"
- endif
- 	mkdir -p "$(DESTDIR)$(datadir)"
- 	for x in bios.bin vgabios.bin vgabios-cirrus.bin ppc_rom.bin \
---- a/Makefile.target.org	2007-11-19 00:34:46.000000000 +0200
-+++ a/Makefile.target	2008-01-01 19:10:02.000000000 +0200
-@@ -629,7 +629,7 @@
- 
- install: all
- ifneq ($(PROGS),)
--	$(INSTALL) -m 755 -s $(PROGS) "$(DESTDIR)$(bindir)"
-+	$(INSTALL) -m 755 $(PROGS) "$(DESTDIR)$(bindir)"
- endif
- 
- ifneq ($(wildcard .depend),)
diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/qemu-0.9.0-nptl-update.patch b/packages/qemu/qemu-0.9.0+cvs20071121/qemu-0.9.0-nptl-update.patch
deleted file mode 100644
index ebc996e873..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20071121/qemu-0.9.0-nptl-update.patch
+++ /dev/null
@@ -1,219 +0,0 @@
----
- linux-user/main.c    |    7 ++-
- linux-user/syscall.c |  114 ++++++++++++++++++++++++++++++++++++++++++++++-----
- 2 files changed, 111 insertions(+), 10 deletions(-)
-
-Index: qemu/linux-user/main.c
-===================================================================
---- qemu.orig/linux-user/main.c	2007-12-03 19:34:09.000000000 +0000
-+++ qemu/linux-user/main.c	2007-12-03 23:44:45.000000000 +0000
-@@ -391,7 +391,7 @@ do_kernel_trap(CPUARMState *env)
-         cpu_unlock();
-         break;
-     case 0xffff0fe0: /* __kernel_get_tls */
--        env->regs[0] = env->cp15.c13_tls;
-+        env->regs[0] = env->cp15.c13_tls2;
-         break;
-     default:
-         return 1;
-@@ -2037,6 +2037,11 @@ int main(int argc, char **argv)
-     int drop_ld_preload = 0, environ_count = 0;
-     char **target_environ, **wrk, **dst;
- 
-+    char *assume_kernel = getenv("QEMU_ASSUME_KERNEL");
-+
-+    if (assume_kernel)
-+       setenv("LD_ASSUME_KERNEL", assume_kernel, 1);
-+
-     if (argc <= 1)
-         usage();
- 
-Index: qemu/linux-user/syscall.c
-===================================================================
---- qemu.orig/linux-user/syscall.c	2007-12-03 19:34:09.000000000 +0000
-+++ qemu/linux-user/syscall.c	2007-12-03 23:46:54.000000000 +0000
-@@ -61,6 +61,7 @@
- #define tchars host_tchars /* same as target */
- #define ltchars host_ltchars /* same as target */
- 
-+#include <linux/futex.h>
- #include <linux/termios.h>
- #include <linux/unistd.h>
- #include <linux/utsname.h>
-@@ -2694,7 +2695,6 @@ abi_long do_arch_prctl(CPUX86State *env,
-     return 0;
- }
- #endif
--
- #endif /* defined(TARGET_I386) */
- 
- /* this stack is the equivalent of the kernel stack associated with a
-@@ -2729,16 +2729,19 @@ int do_fork(CPUState *env, unsigned int 
-     TaskState *ts;
-     uint8_t *new_stack;
-     CPUState *new_env;
--
-+#if defined(TARGET_I386)
-+     uint64_t *new_gdt_table;
-+#endif
- #ifdef USE_NPTL
-     unsigned int nptl_flags;
- 
-     if (flags & CLONE_PARENT_SETTID)
-         *parent_tidptr = gettid();
- #endif
--
-     if (flags & CLONE_VM) {
-         ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE);
-+        if (!ts)
-+          return -ENOMEM;
-         memset(ts, 0, sizeof(TaskState));
-         new_stack = ts->stack;
-         ts->used = 1;
-@@ -2750,6 +2753,29 @@ int do_fork(CPUState *env, unsigned int 
- #if defined(TARGET_I386)
-         if (!newsp)
-             newsp = env->regs[R_ESP];
-+       new_gdt_table = malloc(9 * 8);
-+       if (!new_gdt_table) {
-+               free(new_env);
-+               return -ENOMEM;
-+       }
-+       /* Copy main GDT table from parent, but clear TLS entries */
-+       memcpy(new_gdt_table, g2h(env->gdt.base), 6 * 8);
-+       memset(&new_gdt_table[6], 0, 3 * 8); 
-+       new_env->gdt.base = h2g(new_gdt_table);
-+       if (flags & 0x00080000 /* CLONE_SETTLS */) {
-+               ret = do_set_thread_area(new_env, new_env->regs[R_ESI]);
-+               if (ret) {
-+                       free(new_gdt_table);
-+                       free(new_env);
-+                       return ret;
-+               }
-+       }
-+       cpu_x86_load_seg(env, R_CS, new_env->regs[R_CS]);
-+       cpu_x86_load_seg(env, R_DS, new_env->regs[R_DS]);
-+       cpu_x86_load_seg(env, R_ES, new_env->regs[R_ES]);
-+       cpu_x86_load_seg(env, R_SS, new_env->regs[R_SS]);
-+       cpu_x86_load_seg(env, R_FS, new_env->regs[R_FS]);
-+       cpu_x86_load_seg(env, R_GS, new_env->regs[R_GS]);
-         new_env->regs[R_ESP] = newsp;
-         new_env->regs[R_EAX] = 0;
- #elif defined(TARGET_ARM)
-@@ -3121,6 +3147,68 @@ static inline abi_long host_to_target_ti
-     unlock_user_struct(target_ts, target_addr, 1);
- }
- 
-+static long do_futex(target_ulong uaddr, int op, uint32_t val,
-+                    target_ulong utime, target_ulong uaddr2,
-+                    uint32_t val3)
-+{
-+       struct timespec host_utime;
-+       unsigned long val2 = utime;
-+
-+       if (utime && (op == FUTEX_WAIT || op == FUTEX_LOCK_PI)) {
-+               target_to_host_timespec(&host_utime, utime);
-+               val2 = (unsigned long)&host_utime;
-+       }
-+ 
-+#ifdef BSWAP_NEEDED
-+       switch(op) {
-+       case FUTEX_CMP_REQUEUE:
-+               val3 = tswap32(val3);
-+       case FUTEX_REQUEUE:
-+               val2 = tswap32(val2);
-+       case FUTEX_WAIT:
-+       case FUTEX_WAKE:
-+               val = tswap32(val);
-+       case FUTEX_LOCK_PI: /* This one's icky, but comes out OK */
-+       case FUTEX_UNLOCK_PI:
-+               break;
-+       default: 
-+               gemu_log("qemu: Unsupported futex op %d\n", op);
-+               return -ENOSYS;
-+       } 
-+#if 0 /* No, it's worse than this */
-+       if (op == FUTEX_WAKE_OP) {
-+               /* Need to munge the secondary operation (val3) */
-+               val3 = tswap32(val3);
-+               int op2 = (val3 >> 28) & 7;
-+               int cmp = (val3 >> 24) & 15;
-+               int oparg = (val3 << 8) >> 20;
-+               int cmparg = (val3 << 20) >> 20;
-+               int shift = val3 & (FUTEX_OP_OPARG_SHIFT << 28);
-+
-+               if (shift)
-+                   oparg = (oparg & 7) + 24 - (oparg & 24);
-+               else oparg = 
-+               if (op2 == FUTEX_OP_ADD) {
-+                       gemu_log("qemu: Unsupported wrong-endian FUTEX_OP_ADD\n");
-+                       return -ENOSYS;
-+               }
-+               if (cmparg == FUTEX_OP_CMP_LT || cmparg == FUTEX_OP_CMP_GE ||
-+                   cmparg == FUTEX_OP_CMP_LE || cmparg == FUTEX_OP_CMP_GT) {
-+                       gemu_log("qemu: Unsupported wrong-endian futex cmparg %d\n", cmparg);
-+                       return -ENOSYS;
-+               }
-+               val3 = shift | (op2<<28) | (cmp<<24) | (oparg<<12) | cmparg;
-+       }
-+#endif
-+#endif
-+       return syscall(__NR_futex, g2h(uaddr), op, val, val2, g2h(uaddr2), val3);
-+}
-+
-+int do_set_tid_address(target_ulong tidptr)
-+{
-+       return syscall(__NR_set_tid_address, g2h(tidptr));
-+}
-+
- /* do_syscall() should always have a single exit point at the end so
-    that actions, such as logging of syscall results, can be performed.
-    All errnos that do_syscall() returns must be -TARGET_<errcode>. */
-@@ -3145,7 +3233,7 @@ abi_long do_syscall(void *cpu_env, int n
-         _mcleanup();
- #endif
-         gdb_exit(cpu_env, arg1);
--        /* XXX: should free thread stack and CPU env */
-+        /* XXX: should free thread stack, GDT and CPU env */
-         _exit(arg1);
-         ret = 0; /* avoid warning */
-         break;
-@@ -5569,6 +5657,9 @@ abi_long do_syscall(void *cpu_env, int n
- #elif defined(TARGET_I386) && defined(TARGET_ABI32)
-       ret = do_set_thread_area(cpu_env, arg1);
-       break;
-+#elif TARGET_i386
-+	  ret = get_errno(do_set_thread_area(cpu_env, arg1));
-+	  break;
- #else
-       goto unimplemented_nowarn;
- #endif
-@@ -5586,6 +5677,16 @@ abi_long do_syscall(void *cpu_env, int n
-         goto unimplemented_nowarn;
- #endif
- 
-+#ifdef TARGET_NR_futex
-+    case TARGET_NR_futex:
-+       ret = get_errno(do_futex(arg1, arg2, arg3, arg4, arg5, arg6));
-+       break;
-+#endif
-+#ifdef TARGET_NR_set_robust_list
-+    case TARGET_NR_set_robust_list:
-+           goto unimplemented_nowarn;
-+#endif
-+
- #ifdef TARGET_NR_clock_gettime
-     case TARGET_NR_clock_gettime:
-     {
-@@ -5627,11 +5728,6 @@ abi_long do_syscall(void *cpu_env, int n
- 	break;
- #endif
- 
--#ifdef TARGET_NR_set_robust_list
--    case TARGET_NR_set_robust_list:
--	goto unimplemented_nowarn;
--#endif
--
- #if defined(TARGET_NR_utimensat) && defined(__NR_utimensat)
-     case TARGET_NR_utimensat:
-         {
diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/qemu-0.9.0-nptl.patch b/packages/qemu/qemu-0.9.0+cvs20071121/qemu-0.9.0-nptl.patch
deleted file mode 100644
index 10e3cc04a5..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20071121/qemu-0.9.0-nptl.patch
+++ /dev/null
@@ -1,929 +0,0 @@
-These are Paul Brook's patches to QEMU-0.8.2 to enable the running of single
-ARM binaries under QEMU's user-emulation mode. Without them, QEMU-0.8.1
-immediately dies saying:
-	Error: f0005
-	qemu: uncaught target signal 6 (Aborted) - exiting
-while qemu-0.8.2 dies saying:
-	qemu: Unsupported syscall: 983045
-	cannot set up thread-local storage: unknown error
-
-This file is a rediffing of the patches visible at
-https://nowt.dyndns.org/patch.qemu_nptl on 27 Sept 2006
-which "patch" fails to apply automatically.
-See also http://lists.gnu.org/archive/html/qemu-devel/2006-09/msg00194.html
-
-	Martin Guy, 27 Sept 2006
-
----
- configure                |   25 ++++++
- exec-all.h               |  165 ------------------------------------------
- linux-user/arm/syscall.h |    4 -
- linux-user/main.c        |   94 +++++++++++++++++++++---
- linux-user/qemu.h        |    3 
- linux-user/syscall.c     |   91 ++++++++++++++++++++++-
- qemu_spinlock.h          |  181 +++++++++++++++++++++++++++++++++++++++++++++++
- target-arm/cpu.h         |   10 ++
- target-arm/op.c          |    6 +
- target-arm/translate.c   |    9 ++
- 10 files changed, 405 insertions(+), 183 deletions(-)
-
---- qemu.orig/configure
-+++ qemu/configure
-@@ -103,10 +103,11 @@ check_gcc="yes"
- softmmu="yes"
- linux_user="no"
- darwin_user="no"
- build_docs="no"
- uname_release=""
-+nptl="yes"
- 
- # OS specific
- targetos=`uname -s`
- case $targetos in
- CYGWIN*)
-@@ -322,10 +323,12 @@ for opt do
-   ;;
-   --disable-werror) werror="no"
-   ;;
-   *) echo "ERROR: unknown option $opt"; show_help="yes"
-   ;;
-+  --disable-nptl) nptl="no"
-+  ;;
-   esac
- done
- 
- if [ "$bsd" = "yes" -o "$darwin" = "yes" -o "$mingw32" = "yes" ] ; then
-     AIOLIBS=
-@@ -417,10 +420,11 @@ echo "  --enable-system          enable 
- echo "  --disable-system         disable all system emulation targets"
- echo "  --enable-linux-user      enable all linux usermode emulation targets"
- echo "  --disable-linux-user     disable all linux usermode emulation targets"
- echo "  --enable-darwin-user     enable all darwin usermode emulation targets"
- echo "  --disable-darwin-user    disable all darwin usermode emulation targets"
-+echo "  --disable-nptl           disable usermode NPTL guest support"
- echo "  --fmod-lib               path to FMOD library"
- echo "  --fmod-inc               path to FMOD includes"
- echo "  --enable-uname-release=R Return R for uname -r in usermode emulation"
- echo "  --sparc_cpu=V            Build qemu for Sparc architecture v7, v8, v8plus, v8plusa, v9"
- echo ""
-@@ -583,10 +587,27 @@ fi
- cat > $TMPC <<EOF
- int main(void) {
- }
- EOF
- 
-+# check NPTL support
-+cat > $TMPC <<EOF
-+#include <sched.h>
-+void foo()
-+{
-+#ifndef CLONE_SETTLS
-+#error bork
-+#endif
-+}
-+EOF
-+
-+if $cc -c -o $TMPO $TMPC 2> /dev/null ; then
-+  :
-+else
-+   nptl="no"
-+fi
-+
- ##########################################
- # SDL probe
- 
- sdl_too_old=no
- 
-@@ -747,10 +768,11 @@ if test -n "$sparc_cpu"; then
- fi
- echo "kqemu support     $kqemu"
- echo "Documentation     $build_docs"
- [ ! -z "$uname_release" ] && \
- echo "uname -r          $uname_release"
-+echo "NPTL support      $nptl"
- 
- if test $sdl_too_old = "yes"; then
- echo "-> Your SDL version is too old - please upgrade to have SDL support"
- fi
- if [ -s /tmp/qemu-$$-sdl-config.log ]; then
-@@ -1063,10 +1085,13 @@ if test "$target_cpu" = "i386" ; then
-   fi
- elif test "$target_cpu" = "arm" -o "$target_cpu" = "armeb" ; then
-   echo "TARGET_ARCH=arm" >> $config_mak
-   echo "#define TARGET_ARCH \"arm\"" >> $config_h
-   echo "#define TARGET_ARM 1" >> $config_h
-+  if test "$nptl" = "yes" ; then
-+	  echo "#define USE_NPTL 1" >> $config_h
-+  fi
-   bflt="yes"
- elif test "$target_cpu" = "sparc" ; then
-   echo "TARGET_ARCH=sparc" >> $config_mak
-   echo "#define TARGET_ARCH \"sparc\"" >> $config_h
-   echo "#define TARGET_SPARC 1" >> $config_h
---- qemu.orig/exec-all.h
-+++ qemu/exec-all.h
-@@ -338,174 +338,11 @@ dummy_label ## n: ;\
- 
- extern CPUWriteMemoryFunc *io_mem_write[IO_MEM_NB_ENTRIES][4];
- extern CPUReadMemoryFunc *io_mem_read[IO_MEM_NB_ENTRIES][4];
- extern void *io_mem_opaque[IO_MEM_NB_ENTRIES];
- 
--#if defined(__powerpc__)
--static inline int testandset (int *p)
--{
--    int ret;
--    __asm__ __volatile__ (
--                          "0:    lwarx %0,0,%1\n"
--                          "      xor. %0,%3,%0\n"
--                          "      bne 1f\n"
--                          "      stwcx. %2,0,%1\n"
--                          "      bne- 0b\n"
--                          "1:    "
--                          : "=&r" (ret)
--                          : "r" (p), "r" (1), "r" (0)
--                          : "cr0", "memory");
--    return ret;
--}
--#elif defined(__i386__)
--static inline int testandset (int *p)
--{
--    long int readval = 0;
--
--    __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
--                          : "+m" (*p), "+a" (readval)
--                          : "r" (1)
--                          : "cc");
--    return readval;
--}
--#elif defined(__x86_64__)
--static inline int testandset (int *p)
--{
--    long int readval = 0;
--
--    __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
--                          : "+m" (*p), "+a" (readval)
--                          : "r" (1)
--                          : "cc");
--    return readval;
--}
--#elif defined(__s390__)
--static inline int testandset (int *p)
--{
--    int ret;
--
--    __asm__ __volatile__ ("0: cs    %0,%1,0(%2)\n"
--			  "   jl    0b"
--			  : "=&d" (ret)
--			  : "r" (1), "a" (p), "0" (*p)
--			  : "cc", "memory" );
--    return ret;
--}
--#elif defined(__alpha__)
--static inline int testandset (int *p)
--{
--    int ret;
--    unsigned long one;
--
--    __asm__ __volatile__ ("0:	mov 1,%2\n"
--			  "	ldl_l %0,%1\n"
--			  "	stl_c %2,%1\n"
--			  "	beq %2,1f\n"
--			  ".subsection 2\n"
--			  "1:	br 0b\n"
--			  ".previous"
--			  : "=r" (ret), "=m" (*p), "=r" (one)
--			  : "m" (*p));
--    return ret;
--}
--#elif defined(__sparc__)
--static inline int testandset (int *p)
--{
--	int ret;
--
--	__asm__ __volatile__("ldstub	[%1], %0"
--			     : "=r" (ret)
--			     : "r" (p)
--			     : "memory");
--
--	return (ret ? 1 : 0);
--}
--#elif defined(__arm__)
--static inline int testandset (int *spinlock)
--{
--    register unsigned int ret;
--    __asm__ __volatile__("swp %0, %1, [%2]"
--                         : "=r"(ret)
--                         : "0"(1), "r"(spinlock));
--
--    return ret;
--}
--#elif defined(__mc68000)
--static inline int testandset (int *p)
--{
--    char ret;
--    __asm__ __volatile__("tas %1; sne %0"
--                         : "=r" (ret)
--                         : "m" (p)
--                         : "cc","memory");
--    return ret;
--}
--#elif defined(__ia64)
--
--#include <ia64intrin.h>
--
--static inline int testandset (int *p)
--{
--    return __sync_lock_test_and_set (p, 1);
--}
--#elif defined(__mips__)
--static inline int testandset (int *p)
--{
--    int ret;
--
--    __asm__ __volatile__ (
--	"	.set push		\n"
--	"	.set noat		\n"
--	"	.set mips2		\n"
--	"1:	li	$1, 1		\n"
--	"	ll	%0, %1		\n"
--	"	sc	$1, %1		\n"
--	"	beqz	$1, 1b		\n"
--	"	.set pop		"
--	: "=r" (ret), "+R" (*p)
--	:
--	: "memory");
--
--    return ret;
--}
--#else
--#error unimplemented CPU support
--#endif
--
--typedef int spinlock_t;
--
--#define SPIN_LOCK_UNLOCKED 0
--
--#if defined(CONFIG_USER_ONLY)
--static inline void spin_lock(spinlock_t *lock)
--{
--    while (testandset(lock));
--}
--
--static inline void spin_unlock(spinlock_t *lock)
--{
--    *lock = 0;
--}
--
--static inline int spin_trylock(spinlock_t *lock)
--{
--    return !testandset(lock);
--}
--#else
--static inline void spin_lock(spinlock_t *lock)
--{
--}
--
--static inline void spin_unlock(spinlock_t *lock)
--{
--}
--
--static inline int spin_trylock(spinlock_t *lock)
--{
--    return 1;
--}
--#endif
-+#include "qemu_spinlock.h"
- 
- extern spinlock_t tb_lock;
- 
- extern int tb_invalidated_flag;
- 
---- qemu.orig/linux-user/arm/syscall.h
-+++ qemu/linux-user/arm/syscall.h
-@@ -26,11 +26,13 @@ struct target_pt_regs {
- #define ARM_ORIG_r0	uregs[17]
- 
- #define ARM_SYSCALL_BASE	0x900000
- #define ARM_THUMB_SYSCALL	0
- 
--#define ARM_NR_cacheflush (ARM_SYSCALL_BASE + 0xf0000 + 2)
-+#define ARM_NR_BASE	  0xf0000
-+#define ARM_NR_cacheflush (ARM_NR_BASE + 2)
-+#define ARM_NR_set_tls	  (ARM_NR_BASE + 5)
- 
- #define ARM_NR_semihosting	  0x123456
- #define ARM_NR_thumb_semihosting  0xAB
- 
- #if defined(TARGET_WORDS_BIGENDIAN)
---- qemu.orig/linux-user/main.c
-+++ qemu/linux-user/main.c
-@@ -361,10 +361,54 @@ static void arm_cache_flush(abi_ulong st
-             break;
-         addr = last1 + 1;
-     }
- }
- 
-+/* Handle a jump to the kernel code page.  */
-+static int
-+do_kernel_trap(CPUARMState *env)
-+{
-+    uint32_t addr;
-+    uint32_t *ptr;
-+    uint32_t cpsr;
-+
-+    switch (env->regs[15]) {
-+    case 0xffff0fc0: /* __kernel_cmpxchg */
-+        /* XXX: This only works between threads, not between processes.
-+           Use native atomic operations.  */
-+        /* ??? This probably breaks horribly if the access segfaults.  */
-+        cpu_lock();
-+        ptr = (uint32_t *)env->regs[2];
-+        cpsr = cpsr_read(env);
-+        if (*ptr == env->regs[0]) {
-+            *ptr = env->regs[1];
-+            env->regs[0] = 0;
-+            cpsr |= CPSR_C;
-+        } else {
-+            env->regs[0] = -1;
-+            cpsr &= ~CPSR_C;
-+        }
-+        cpsr_write(env, cpsr, CPSR_C);
-+        cpu_unlock();
-+        break;
-+    case 0xffff0fe0: /* __kernel_get_tls */
-+        env->regs[0] = env->cp15.c13_tls;
-+        break;
-+    default:
-+        return 1;
-+    }
-+    /* Jump back to the caller.  */
-+    addr = env->regs[14];
-+    if (addr & 1) {
-+        env->thumb = 1;
-+        addr &= ~1;
-+    }
-+    env->regs[15] = addr;
-+
-+    return 0;
-+}
-+
- void cpu_loop(CPUARMState *env)
- {
-     int trapnr;
-     unsigned int n, insn;
-     target_siginfo_t info;
-@@ -471,32 +515,50 @@ void cpu_loop(CPUARMState *env)
-                         get_user_u32(insn, env->regs[15] - 4);
-                         n = insn & 0xffffff;
-                     }
-                 }
- 
--                if (n == ARM_NR_cacheflush) {
--                    arm_cache_flush(env->regs[0], env->regs[1]);
--                } else if (n == ARM_NR_semihosting
--                           || n == ARM_NR_thumb_semihosting) {
-+                if (n == ARM_NR_semihosting
-+                    || n == ARM_NR_thumb_semihosting) {
-                     env->regs[0] = do_arm_semihosting (env);
-                 } else if (n == 0 || n >= ARM_SYSCALL_BASE
-                            || (env->thumb && n == ARM_THUMB_SYSCALL)) {
-                     /* linux syscall */
-                     if (env->thumb || n == 0) {
-                         n = env->regs[7];
-                     } else {
-                         n -= ARM_SYSCALL_BASE;
-                         env->eabi = 0;
-                     }
--                    env->regs[0] = do_syscall(env,
--                                              n,
--                                              env->regs[0],
--                                              env->regs[1],
--                                              env->regs[2],
--                                              env->regs[3],
--                                              env->regs[4],
--                                              env->regs[5]);
-+                    if ( n > ARM_NR_BASE) {
-+                        switch (n)
-+                          {
-+                          case ARM_NR_cacheflush:
-+                              arm_cache_flush(env->regs[0], env->regs[1]);
-+                              break;
-+#ifdef USE_NPTL
-+                          case ARM_NR_set_tls:
-+                              cpu_set_tls(env, env->regs[0]);
-+                              env->regs[0] = 0;
-+                              break;
-+#endif
-+                          default:
-+                              printf ("Error: Bad syscall: %x\n", n);
-+                              goto error;
-+                          }
-+                      }
-+                    else
-+                      {
-+                        env->regs[0] = do_syscall(env,
-+                                                  n,
-+                                                  env->regs[0],
-+                                                  env->regs[1],
-+                                                  env->regs[2],
-+                                                  env->regs[3],
-+                                                  env->regs[4],
-+                                                  env->regs[5]);
-+                      }
-                 } else {
-                     goto error;
-                 }
-             }
-             break;
-@@ -531,10 +593,14 @@ void cpu_loop(CPUARMState *env)
-                     info.si_code = TARGET_TRAP_BRKPT;
-                     queue_signal(info.si_signo, &info);
-                   }
-             }
-             break;
-+        case EXCP_KERNEL_TRAP:
-+            if (do_kernel_trap(env))
-+              goto error;
-+            break;
-         default:
-         error:
-             fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n",
-                     trapnr);
-             cpu_dump_state(env, stderr, fprintf, 0);
-@@ -2378,10 +2444,14 @@ int main(int argc, char **argv)
- #if defined(TARGET_ARM) || defined(TARGET_M68K)
-     ts->stack_base = info->start_stack;
-     ts->heap_base = info->brk;
-     /* This will be filled in on the first SYS_HEAPINFO call.  */
-     ts->heap_limit = 0;
-+    /* Register the magic kernel code page.  The cpu will generate a
-+       special exception when it tries to execute code here.  We can't
-+       put real code here because it may be in use by the host kernel.  */
-+    page_set_flags(0xffff0000, 0xffff0fff, 0);
- #endif
- 
-     if (gdbstub_port) {
-         gdbserver_start (gdbstub_port);
-         gdb_handlesig(env, 0);
---- qemu.orig/linux-user/qemu.h
-+++ qemu/linux-user/qemu.h
-@@ -100,10 +100,13 @@ typedef struct TaskState {
-     /* Extra fields for semihosted binaries.  */
-     uint32_t stack_base;
-     uint32_t heap_base;
-     uint32_t heap_limit;
- #endif
-+#ifdef USE_NPTL
-+    uint32_t *child_tidptr;
-+#endif
-     int used; /* non zero if used */
-     struct image_info *info;
-     uint8_t stack[0];
- } __attribute__((aligned(16))) TaskState;
- 
---- qemu.orig/linux-user/syscall.c
-+++ qemu/linux-user/syscall.c
-@@ -69,13 +69,22 @@
- #include <linux/soundcard.h>
- #include <linux/dirent.h>
- #include <linux/kd.h>
- 
- #include "qemu.h"
-+#include "qemu_spinlock.h"
- 
- //#define DEBUG
- 
-+#ifdef USE_NPTL
-+#define CLONE_NPTL_FLAGS2 (CLONE_SETTLS | \
-+    CLONE_PARENT_SETTID | CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID)
-+#else
-+/* XXX: Hardcode the above values.  */
-+#define CLONE_NPTL_FLAGS2 0
-+#endif
-+
- #if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SPARC) \
-     || defined(TARGET_M68K) || defined(TARGET_SH4) || defined(TARGET_CRIS)
- /* 16 bit uid wrappers emulation */
- #define USE_UID16
- #endif
-@@ -2690,27 +2699,46 @@ abi_long do_arch_prctl(CPUX86State *env,
- 
- /* this stack is the equivalent of the kernel stack associated with a
-    thread/process */
- #define NEW_STACK_SIZE 8192
- 
-+#ifdef USE_NPTL
-+static spinlock_t nptl_lock = SPIN_LOCK_UNLOCKED;
-+#endif
-+
- static int clone_func(void *arg)
- {
-     CPUState *env = arg;
-+#ifdef HAVE_NPTL
-+    /* Wait until the parent has finshed initializing the tls state.  */
-+    while (!spin_trylock(&nptl_lock))
-+        usleep(1);
-+    spin_unlock(&nptl_lock);
-+#endif
-     cpu_loop(env);
-     /* never exits */
-     return 0;
- }
- 
- /* do_fork() Must return host values and target errnos (unlike most
-    do_*() functions). */
--int do_fork(CPUState *env, unsigned int flags, abi_ulong newsp)
-+int do_fork(CPUState *env, unsigned int flags, unsigned long newsp,
-+            uint32_t *parent_tidptr, void *newtls,
-+            uint32_t *child_tidptr)
- {
-     int ret;
-     TaskState *ts;
-     uint8_t *new_stack;
-     CPUState *new_env;
- 
-+#ifdef USE_NPTL
-+    unsigned int nptl_flags;
-+
-+    if (flags & CLONE_PARENT_SETTID)
-+        *parent_tidptr = gettid();
-+#endif
-+
-     if (flags & CLONE_VM) {
-         ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE);
-         memset(ts, 0, sizeof(TaskState));
-         new_stack = ts->stack;
-         ts->used = 1;
-@@ -2772,20 +2800,71 @@ int do_fork(CPUState *env, unsigned int 
- 	new_env->regs[14] = newsp;
- #else
- #error unsupported target CPU
- #endif
-         new_env->opaque = ts;
-+#ifdef USE_NPTL
-+        nptl_flags = flags;
-+        flags &= ~CLONE_NPTL_FLAGS2;
-+
-+        if (nptl_flags & CLONE_CHILD_CLEARTID) {
-+            ts->child_tidptr = child_tidptr;
-+        }
-+
-+        if (nptl_flags & CLONE_SETTLS)
-+            cpu_set_tls (new_env, newtls);
-+
-+        /* Grab the global cpu lock so that the thread setup appears
-+           atomic.  */
-+        if (nptl_flags & CLONE_CHILD_SETTID)
-+            spin_lock(&nptl_lock);
-+
-+#else
-+        if (flags & CLONE_NPTL_FLAGS2)
-+            return -EINVAL;
-+#endif
-+
-+	 if (CLONE_VFORK & flags)
-+		flags ^= CLONE_VM;
- #ifdef __ia64__
-         ret = __clone2(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
- #else
- 	ret = clone(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
- #endif
-+#ifdef USE_NPTL
-+        if (ret != -1) {
-+            if (nptl_flags & CLONE_CHILD_SETTID)
-+                *child_tidptr = ret;
-+        }
-+
-+        /* Allow the child to continue.  */
-+        if (nptl_flags & CLONE_CHILD_SETTID)
-+            spin_unlock(&nptl_lock);
-+#endif
-     } else {
-         /* if no CLONE_VM, we consider it is a fork */
--        if ((flags & ~CSIGNAL) != 0)
-+        if ((flags & ~(CSIGNAL | CLONE_NPTL_FLAGS2)) != 0)
-             return -EINVAL;
-         ret = fork();
-+#ifdef USE_NPTL
-+        /* There is a race condition here.  The parent process could
-+           theoretically read the TID in the child process before the child
-+           tid is set.  This would require using either ptrace
-+           (not implemented) or having *_tidptr to point at a shared memory
-+           mapping.  We can't repeat the spinlock hack used above because
-+           the child process gets its own copy of the lock.  */
-+        if (ret == 0) {
-+            /* Child Process.  */
-+            if (flags & CLONE_CHILD_SETTID)
-+                *child_tidptr = gettid();
-+            ts = (TaskState *)env->opaque;
-+            if (flags & CLONE_CHILD_CLEARTID)
-+                ts->child_tidptr = child_tidptr;
-+            if (flags & CLONE_SETTLS)
-+                cpu_set_tls (env, newtls);
-+        }
-+#endif
-     }
-     return ret;
- }
- 
- static abi_long do_fcntl(int fd, int cmd, abi_ulong arg)
-@@ -3106,11 +3185,11 @@ abi_long do_syscall(void *cpu_env, int n
-         break;
-     case TARGET_NR_brk:
-         ret = do_brk(arg1);
-         break;
-     case TARGET_NR_fork:
--        ret = get_errno(do_fork(cpu_env, SIGCHLD, 0));
-+        ret = get_errno(do_fork(cpu_env, SIGCHLD, 0, NULL, NULL, NULL));
-         break;
- #ifdef TARGET_NR_waitpid
-     case TARGET_NR_waitpid:
-         {
-             int status;
-@@ -4463,11 +4542,12 @@ abi_long do_syscall(void *cpu_env, int n
- #endif
-     case TARGET_NR_fsync:
-         ret = get_errno(fsync(arg1));
-         break;
-     case TARGET_NR_clone:
--        ret = get_errno(do_fork(cpu_env, arg1, arg2));
-+        ret = get_errno(do_fork(cpu_env, arg1, arg2, (uint32_t *)arg3,
-+                        (void *)arg4, (uint32_t *)arg5));
-         break;
- #ifdef __NR_exit_group
-         /* new thread calls */
-     case TARGET_NR_exit_group:
-         gdb_exit(cpu_env, arg1);
-@@ -4908,11 +4988,12 @@ abi_long do_syscall(void *cpu_env, int n
-     case TARGET_NR_putpmsg:
-         goto unimplemented;
- #endif
- #ifdef TARGET_NR_vfork
-     case TARGET_NR_vfork:
--        ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0));
-+        ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0,
-+                                NULL, NULL, NULL));
-         break;
- #endif
- #ifdef TARGET_NR_ugetrlimit
-     case TARGET_NR_ugetrlimit:
-     {
---- /dev/null
-+++ qemu/qemu_spinlock.h
-@@ -0,0 +1,181 @@
-+/*
-+ * Atomic operation helper include
-+ *
-+ *  Copyright (c) 2005 Fabrice Bellard
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-+ */
-+#ifndef QEMU_SPINLOCK_H
-+#define QEMU_SPINLOCK_H
-+
-+#ifdef __powerpc__
-+static inline int testandset (int *p)
-+{
-+    int ret;
-+    __asm__ __volatile__ (
-+                          "0:    lwarx %0,0,%1\n"
-+                          "      xor. %0,%3,%0\n"
-+                          "      bne 1f\n"
-+                          "      stwcx. %2,0,%1\n"
-+                          "      bne- 0b\n"
-+                          "1:    "
-+                          : "=&r" (ret)
-+                          : "r" (p), "r" (1), "r" (0)
-+                          : "cr0", "memory");
-+    return ret;
-+}
-+#endif
-+
-+#ifdef __i386__
-+static inline int testandset (int *p)
-+{
-+    long int readval = 0;
-+
-+    __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
-+                          : "+m" (*p), "+a" (readval)
-+                          : "r" (1)
-+                          : "cc");
-+    return readval;
-+}
-+#endif
-+
-+#ifdef __x86_64__
-+static inline int testandset (int *p)
-+{
-+    long int readval = 0;
-+
-+    __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
-+                          : "+m" (*p), "+a" (readval)
-+                          : "r" (1)
-+                          : "cc");
-+    return readval;
-+}
-+#endif
-+
-+#ifdef __s390__
-+static inline int testandset (int *p)
-+{
-+    int ret;
-+
-+    __asm__ __volatile__ ("0: cs    %0,%1,0(%2)\n"
-+			  "   jl    0b"
-+			  : "=&d" (ret)
-+			  : "r" (1), "a" (p), "0" (*p)
-+			  : "cc", "memory" );
-+    return ret;
-+}
-+#endif
-+
-+#ifdef __alpha__
-+static inline int testandset (int *p)
-+{
-+    int ret;
-+    unsigned long one;
-+
-+    __asm__ __volatile__ ("0:	mov 1,%2\n"
-+			  "	ldl_l %0,%1\n"
-+			  "	stl_c %2,%1\n"
-+			  "	beq %2,1f\n"
-+			  ".subsection 2\n"
-+			  "1:	br 0b\n"
-+			  ".previous"
-+			  : "=r" (ret), "=m" (*p), "=r" (one)
-+			  : "m" (*p));
-+    return ret;
-+}
-+#endif
-+
-+#ifdef __sparc__
-+static inline int testandset (int *p)
-+{
-+	int ret;
-+
-+	__asm__ __volatile__("ldstub	[%1], %0"
-+			     : "=r" (ret)
-+			     : "r" (p)
-+			     : "memory");
-+
-+	return (ret ? 1 : 0);
-+}
-+#endif
-+
-+#ifdef __arm__
-+static inline int testandset (int *spinlock)
-+{
-+    register unsigned int ret;
-+    __asm__ __volatile__("swp %0, %1, [%2]"
-+                         : "=r"(ret)
-+                         : "0"(1), "r"(spinlock));
-+
-+    return ret;
-+}
-+#endif
-+
-+#ifdef __mc68000
-+static inline int testandset (int *p)
-+{
-+    char ret;
-+    __asm__ __volatile__("tas %1; sne %0"
-+                         : "=r" (ret)
-+                         : "m" (p)
-+                         : "cc","memory");
-+    return ret;
-+}
-+#endif
-+
-+#ifdef __ia64
-+#include <ia64intrin.h>
-+
-+static inline int testandset (int *p)
-+{
-+    return __sync_lock_test_and_set (p, 1);
-+}
-+#endif
-+
-+typedef int spinlock_t;
-+
-+#define SPIN_LOCK_UNLOCKED 0
-+
-+#if defined(CONFIG_USER_ONLY)
-+static inline void spin_lock(spinlock_t *lock)
-+{
-+    while (testandset(lock));
-+}
-+
-+static inline void spin_unlock(spinlock_t *lock)
-+{
-+    *lock = 0;
-+}
-+
-+static inline int spin_trylock(spinlock_t *lock)
-+{
-+    return !testandset(lock);
-+}
-+#else
-+static inline void spin_lock(spinlock_t *lock)
-+{
-+}
-+
-+static inline void spin_unlock(spinlock_t *lock)
-+{
-+}
-+
-+static inline int spin_trylock(spinlock_t *lock)
-+{
-+    return 1;
-+}
-+#endif
-+
-+#endif
---- qemu.orig/target-arm/cpu.h
-+++ qemu/target-arm/cpu.h
-@@ -36,10 +36,11 @@
- #define EXCP_DATA_ABORT      4
- #define EXCP_IRQ             5
- #define EXCP_FIQ             6
- #define EXCP_BKPT            7
- #define EXCP_EXCEPTION_EXIT  8   /* Return from v7M exception.  */
-+#define EXCP_KERNEL_TRAP     9   /* Jumped to kernel code page.  */
- 
- #define ARMV7M_EXCP_RESET   1
- #define ARMV7M_EXCP_NMI     2
- #define ARMV7M_EXCP_HARD    3
- #define ARMV7M_EXCP_MEM     4
-@@ -220,10 +221,19 @@ int cpu_arm_signal_handler(int host_sign
-                            void *puc);
- 
- void cpu_lock(void);
- void cpu_unlock(void);
- 
-+void cpu_lock(void);
-+void cpu_unlock(void);
-+#if defined(USE_NPTL)
-+static inline void cpu_set_tls(CPUARMState *env, void *newtls)
-+{
-+  env->cp15.c13_tls2 = (uint32_t)(long)newtls;
-+}
-+#endif
-+
- #define CPSR_M (0x1f)
- #define CPSR_T (1 << 5)
- #define CPSR_F (1 << 6)
- #define CPSR_I (1 << 7)
- #define CPSR_A (1 << 8)
---- qemu.orig/target-arm/op.c
-+++ qemu/target-arm/op.c
-@@ -1007,10 +1007,16 @@ void OPPROTO op_exception_exit(void)
- {
-     env->exception_index = EXCP_EXCEPTION_EXIT;
-     cpu_loop_exit();
- }
- 
-+void OPPROTO op_kernel_trap(void)
-+{
-+    env->exception_index = EXCP_KERNEL_TRAP;
-+    cpu_loop_exit();
-+}
-+
- /* VFP support.  We follow the convention used for VFP instrunctions:
-    Single precition routines have a "s" suffix, double precision a
-    "d" suffix.  */
- 
- #define VFP_OP(name, p) void OPPROTO op_vfp_##name##p(void)
---- qemu.orig/target-arm/translate.c
-+++ qemu/target-arm/translate.c
-@@ -7518,11 +7518,18 @@ static inline int gen_intermediate_code_
-             /* We always get here via a jump, so know we are not in a
-                conditional execution block.  */
-             gen_op_exception_exit();
-         }
- #endif
--
-+#ifdef CONFIG_USER_ONLY
-+        /* Intercept jump to the magic kernel page.  */
-+        if (dc->pc > 0xffff0000) {
-+            gen_op_kernel_trap();
-+            dc->is_jmp = DISAS_UPDATE;
-+            break;
-+        }
-+#endif
-         if (env->nb_breakpoints > 0) {
-             for(j = 0; j < env->nb_breakpoints; j++) {
-                 if (env->breakpoints[j] == dc->pc) {
-                     gen_set_condexec(dc);
-                     gen_op_movl_T0_im((long)dc->pc);
diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/qemu-amd64-32b-mapping-0.9.0.patch b/packages/qemu/qemu-0.9.0+cvs20071121/qemu-amd64-32b-mapping-0.9.0.patch
deleted file mode 100644
index c7f36d8110..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20071121/qemu-amd64-32b-mapping-0.9.0.patch
+++ /dev/null
@@ -1,37 +0,0 @@
----
- linux-user/mmap.c |    8 ++++++--
- 1 file changed, 6 insertions(+), 2 deletions(-)
-
-Index: qemu/linux-user/mmap.c
-===================================================================
---- qemu.orig/linux-user/mmap.c	2007-12-03 15:40:25.000000000 +0000
-+++ qemu/linux-user/mmap.c	2007-12-03 16:37:21.000000000 +0000
-@@ -29,6 +29,10 @@
- 
- //#define DEBUG_MMAP
- 
-+#ifndef MAP_32BIT
-+#define MAP_32BIT 0
-+#endif
-+
- /* NOTE: all the constants are the HOST ones, but addresses are target. */
- int target_mprotect(abi_ulong start, abi_ulong len, int prot)
- {
-@@ -251,7 +255,7 @@ abi_long target_mmap(abi_ulong start, ab
-            especially important if qemu_host_page_size >
-            qemu_real_host_page_size */
-         p = mmap(g2h(mmap_start),
--                 host_len, prot, flags | MAP_FIXED, fd, host_offset);
-+                 host_len, prot, flags | MAP_FIXED | MAP_32BIT, fd, host_offset);
-         if (p == MAP_FAILED)
-             return -1;
-         /* update start so that it points to the file position at 'offset' */
-@@ -406,7 +410,7 @@ abi_long target_mremap(abi_ulong old_add
-     unsigned long host_addr;
- 
-     /* XXX: use 5 args syscall */
--    host_addr = (long)mremap(g2h(old_addr), old_size, new_size, flags);
-+    host_addr = (long)mremap(g2h(old_addr), old_size, new_size, flags | MAP_32BIT);
-     if (host_addr == -1)
-         return -1;
-     new_addr = h2g(host_addr);
diff --git a/packages/qemu/qemu-0.9.0+cvs20071121/workaround_bad_futex_headers.patch b/packages/qemu/qemu-0.9.0+cvs20071121/workaround_bad_futex_headers.patch
deleted file mode 100644
index cc122ebdba..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20071121/workaround_bad_futex_headers.patch
+++ /dev/null
@@ -1,25 +0,0 @@
----
- linux-user/syscall.c |   10 +++++++++-
- 1 file changed, 9 insertions(+), 1 deletion(-)
-
-Index: qemu/linux-user/syscall.c
-===================================================================
---- qemu.orig/linux-user/syscall.c	2007-08-09 20:28:06.000000000 +0100
-+++ qemu/linux-user/syscall.c	2007-08-09 20:28:41.000000000 +0100
-@@ -61,7 +61,15 @@
- #define tchars host_tchars /* same as target */
- #define ltchars host_ltchars /* same as target */
- 
--#include <linux/futex.h>
-+#define FUTEX_WAIT              0
-+#define FUTEX_WAKE              1
-+#define FUTEX_FD                2
-+#define FUTEX_REQUEUE           3
-+#define FUTEX_CMP_REQUEUE       4
-+#define FUTEX_WAKE_OP           5
-+#define FUTEX_LOCK_PI           6
-+#define FUTEX_UNLOCK_PI         7
-+
- #include <linux/termios.h>
- #include <linux/unistd.h>
- #include <linux/utsname.h>
diff --git a/packages/qemu/qemu-0.9.1/02_snapshot_use_tmpdir.patch b/packages/qemu/qemu-0.9.1/02_snapshot_use_tmpdir.patch
new file mode 100644
index 0000000000..40264ed443
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/02_snapshot_use_tmpdir.patch
@@ -0,0 +1,23 @@
+#DPATCHLEVEL=0
+---
+# block.c |    6 +++++-
+# 1 file changed, 5 insertions(+), 1 deletion(-)
+#
+Index: block.c
+===================================================================
+--- block.c.orig	2007-12-03 23:47:25.000000000 +0000
++++ block.c	2007-12-03 23:47:31.000000000 +0000
+@@ -191,8 +191,12 @@ void get_tmp_filename(char *filename, in
+ void get_tmp_filename(char *filename, int size)
+ {
+     int fd;
++    char *tmpdir;
+     /* XXX: race condition possible */
+-    pstrcpy(filename, size, "/tmp/vl.XXXXXX");
++    tmpdir = getenv("TMPDIR");
++    if (!tmpdir)
++        tmpdir = "/tmp";
++    snprintf(filename, size, "%s/vl.XXXXXX", tmpdir);
+     fd = mkstemp(filename);
+     close(fd);
+ }
diff --git a/packages/qemu/qemu-0.9.1/04_do_not_print_rtc_freq_if_ok.patch b/packages/qemu/qemu-0.9.1/04_do_not_print_rtc_freq_if_ok.patch
new file mode 100644
index 0000000000..31c9da491d
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/04_do_not_print_rtc_freq_if_ok.patch
@@ -0,0 +1,26 @@
+#DPATCHLEVEL=1
+---
+# vl.c |    5 ++++-
+# 1 file changed, 4 insertions(+), 1 deletion(-)
+#
+Index: qemu/vl.c
+===================================================================
+--- qemu.orig/vl.c	2007-12-03 15:44:35.000000000 +0000
++++ qemu/vl.c	2007-12-03 15:51:03.000000000 +0000
+@@ -1289,12 +1289,15 @@ static void hpet_stop_timer(struct qemu_
+ 
+ static int rtc_start_timer(struct qemu_alarm_timer *t)
+ {
++    unsigned long current_rtc_freq = 0;
+     int rtc_fd;
+ 
+     TFR(rtc_fd = open("/dev/rtc", O_RDONLY));
+     if (rtc_fd < 0)
+         return -1;
+-    if (ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) {
++    ioctl(rtc_fd, RTC_IRQP_READ, &current_rtc_freq);
++    if (current_rtc_freq != RTC_FREQ &&
++        ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) {
+         fprintf(stderr, "Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal\n"
+                 "error, but for better emulation accuracy either use a 2.6 host Linux kernel or\n"
+                 "type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.\n");
diff --git a/packages/qemu/qemu-0.9.1/05_non-fatal_if_linux_hd_missing.patch b/packages/qemu/qemu-0.9.1/05_non-fatal_if_linux_hd_missing.patch
new file mode 100644
index 0000000000..fdd922605e
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/05_non-fatal_if_linux_hd_missing.patch
@@ -0,0 +1,17 @@
+#DPATCHLEVEL=1
+---
+# hw/pc.c |    1 -
+# 1 file changed, 1 deletion(-)
+#
+Index: qemu/hw/pc.c
+===================================================================
+--- qemu.orig/hw/pc.c	2007-12-03 23:47:25.000000000 +0000
++++ qemu/hw/pc.c	2007-12-03 23:47:38.000000000 +0000
+@@ -385,7 +385,6 @@ static void generate_bootsect(uint32_t g
+     if (bs_table[0] == NULL) {
+ 	fprintf(stderr, "A disk image must be given for 'hda' when booting "
+ 		"a Linux kernel\n");
+-	exit(1);
+     }
+ 
+     memset(bootsect, 0, sizeof(bootsect));
diff --git a/packages/qemu/qemu-0.9.1/06_exit_segfault.patch b/packages/qemu/qemu-0.9.1/06_exit_segfault.patch
new file mode 100644
index 0000000000..06123d0626
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/06_exit_segfault.patch
@@ -0,0 +1,45 @@
+#DPATCHLEVEL=0
+---
+# linux-user/main.c |    8 ++++----
+# 1 file changed, 4 insertions(+), 4 deletions(-)
+#
+Index: linux-user/main.c
+===================================================================
+--- linux-user/main.c.orig	2007-12-03 23:47:25.000000000 +0000
++++ linux-user/main.c	2007-12-03 23:47:41.000000000 +0000
+@@ -714,7 +714,7 @@ void cpu_loop (CPUSPARCState *env)
+         default:
+             printf ("Unhandled trap: 0x%x\n", trapnr);
+             cpu_dump_state(env, stderr, fprintf, 0);
+-            exit (1);
++            _exit (1);
+         }
+         process_pending_signals (env);
+     }
+@@ -1634,7 +1634,7 @@ void cpu_loop (CPUState *env)
+         default:
+             printf ("Unhandled trap: 0x%x\n", trapnr);
+             cpu_dump_state(env, stderr, fprintf, 0);
+-            exit (1);
++            _exit (1);
+         }
+         process_pending_signals (env);
+     }
+@@ -1954,7 +1954,7 @@ int main(int argc, char **argv)
+                 for(item = cpu_log_items; item->mask != 0; item++) {
+                     printf("%-10s %s\n", item->name, item->help);
+                 }
+-                exit(1);
++                _exit(1);
+             }
+             cpu_set_log(mask);
+         } else if (!strcmp(r, "s")) {
+@@ -1973,7 +1973,7 @@ int main(int argc, char **argv)
+             if (qemu_host_page_size == 0 ||
+                 (qemu_host_page_size & (qemu_host_page_size - 1)) != 0) {
+                 fprintf(stderr, "page size must be a power of two\n");
+-                exit(1);
++                _exit(1);
+             }
+         } else if (!strcmp(r, "g")) {
+             gdbstub_port = atoi(argv[optind++]);
diff --git a/packages/qemu/qemu-0.9.1/10_signal_jobs.patch b/packages/qemu/qemu-0.9.1/10_signal_jobs.patch
new file mode 100644
index 0000000000..34282adc9d
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/10_signal_jobs.patch
@@ -0,0 +1,26 @@
+#DPATCHLEVEL=0
+---
+# linux-user/signal.c |    7 ++++++-
+# 1 file changed, 6 insertions(+), 1 deletion(-)
+#
+Index: linux-user/signal.c
+===================================================================
+--- linux-user/signal.c.orig	2007-12-03 15:40:26.000000000 +0000
++++ linux-user/signal.c	2007-12-03 15:55:49.000000000 +0000
+@@ -364,10 +364,15 @@ int queue_signal(int sig, target_siginfo
+     k = &sigact_table[sig - 1];
+     handler = k->sa._sa_handler;
+     if (handler == TARGET_SIG_DFL) {
++        if (sig == TARGET_SIGTSTP || sig == TARGET_SIGTTIN || sig == TARGET_SIGTTOU) {
++            kill(getpid(),SIGSTOP);
++            return 0;
++        } else
+         /* default handler : ignore some signal. The other are fatal */
+         if (sig != TARGET_SIGCHLD &&
+             sig != TARGET_SIGURG &&
+-            sig != TARGET_SIGWINCH) {
++            sig != TARGET_SIGWINCH &&
++            sig != TARGET_SIGCONT) {
+             force_sig(sig);
+         } else {
+             return 0; /* indicate ignored */
diff --git a/packages/qemu/qemu-0.9.1/11_signal_sigaction.patch b/packages/qemu/qemu-0.9.1/11_signal_sigaction.patch
new file mode 100644
index 0000000000..33c5e8b12d
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/11_signal_sigaction.patch
@@ -0,0 +1,21 @@
+#DPATCHLEVEL=0
+---
+# linux-user/signal.c |    5 +++++
+# 1 file changed, 5 insertions(+)
+#
+Index: linux-user/signal.c
+===================================================================
+--- linux-user/signal.c.orig	2007-12-03 23:47:44.000000000 +0000
++++ linux-user/signal.c	2007-12-03 23:47:46.000000000 +0000
+@@ -512,6 +512,11 @@ int do_sigaction(int sig, const struct t
+ 
+     if (sig < 1 || sig > TARGET_NSIG || sig == SIGKILL || sig == SIGSTOP)
+         return -EINVAL;
++
++    /* no point doing the stuff as those are not allowed for sigaction */
++    if ((sig == TARGET_SIGKILL) || (sig == TARGET_SIGSTOP))
++        return -EINVAL;
++
+     k = &sigact_table[sig - 1];
+ #if defined(DEBUG_SIGNAL)
+     fprintf(stderr, "sigaction sig=%d act=0x%08x, oact=0x%08x\n",
diff --git a/packages/qemu/qemu-0.9.1/22_net_tuntap_stall.patch b/packages/qemu/qemu-0.9.1/22_net_tuntap_stall.patch
new file mode 100644
index 0000000000..6017df0f6d
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/22_net_tuntap_stall.patch
@@ -0,0 +1,18 @@
+#DPATCHLEVEL=0
+---
+# vl.c |    2 +-
+# 1 file changed, 1 insertion(+), 1 deletion(-)
+#
+Index: vl.c
+===================================================================
+--- vl.c.orig	2007-12-03 23:47:36.000000000 +0000
++++ vl.c	2007-12-03 23:47:48.000000000 +0000
+@@ -4023,7 +4023,7 @@ static int tap_open(char *ifname, int if
+         return -1;
+     }
+     memset(&ifr, 0, sizeof(ifr));
+-    ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
++    ifr.ifr_flags = IFF_TAP | IFF_NO_PI | IFF_ONE_QUEUE;
+     if (ifname[0] != '\0')
+         pstrcpy(ifr.ifr_name, IFNAMSIZ, ifname);
+     else
diff --git a/packages/qemu/qemu-0.9.1/31_syscalls.patch b/packages/qemu/qemu-0.9.1/31_syscalls.patch
new file mode 100644
index 0000000000..95a7332ee8
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/31_syscalls.patch
@@ -0,0 +1,48 @@
+#DPATCHLEVEL=0
+---
+# linux-user/syscall.c |   11 ++++++++---
+# 1 file changed, 8 insertions(+), 3 deletions(-)
+#
+Index: linux-user/syscall.c
+===================================================================
+--- linux-user/syscall.c.orig	2007-12-03 19:32:56.000000000 +0000
++++ linux-user/syscall.c	2007-12-03 19:33:41.000000000 +0000
+@@ -250,6 +250,7 @@ extern int getresuid(uid_t *, uid_t *, u
+ extern int setresgid(gid_t, gid_t, gid_t);
+ extern int getresgid(gid_t *, gid_t *, gid_t *);
+ extern int setgroups(int, gid_t *);
++extern int uselib(const char*);
+ 
+ #define ERRNO_TABLE_SIZE 1200
+ 
+@@ -4024,7 +4025,8 @@ abi_long do_syscall(void *cpu_env, int n
+ #endif
+ #ifdef TARGET_NR_uselib
+     case TARGET_NR_uselib:
+-        goto unimplemented;
++        ret = get_errno(uselib(path((const char*)arg1)));
++        break;
+ #endif
+ #ifdef TARGET_NR_swapon
+     case TARGET_NR_swapon:
+@@ -5289,7 +5291,9 @@ abi_long do_syscall(void *cpu_env, int n
+         goto unimplemented;
+ #ifdef TARGET_NR_mincore
+     case TARGET_NR_mincore:
+-        goto unimplemented;
++        /*page_unprotect_range((void*)arg3, ((size_t)arg2 + TARGET_PAGE_SIZE - 1) / TARGET_PAGE_SIZE);*/
++        ret = get_errno(mincore((void*)arg1, (size_t)arg2, (unsigned char*)arg3));
++        break;
+ #endif
+ #ifdef TARGET_NR_madvise
+     case TARGET_NR_madvise:
+@@ -5429,7 +5433,8 @@ abi_long do_syscall(void *cpu_env, int n
+         break;
+ #ifdef TARGET_NR_readahead
+     case TARGET_NR_readahead:
+-        goto unimplemented;
++        ret = get_errno(readahead((int)arg1, (off64_t)arg2, (size_t)arg3));
++        break;
+ #endif
+ #ifdef TARGET_NR_setxattr
+     case TARGET_NR_setxattr:
diff --git a/packages/qemu/qemu-0.9.1/32_syscall_sysctl.patch b/packages/qemu/qemu-0.9.1/32_syscall_sysctl.patch
new file mode 100644
index 0000000000..5e8dd75b0e
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/32_syscall_sysctl.patch
@@ -0,0 +1,55 @@
+#DPATCHLEVEL=0
+---
+# linux-user/syscall.c |   32 +++++++++++++++++++++++++++++---
+# 1 file changed, 29 insertions(+), 3 deletions(-)
+#
+Index: linux-user/syscall.c
+===================================================================
+--- linux-user/syscall.c.orig	2007-12-03 15:56:24.000000000 +0000
++++ linux-user/syscall.c	2007-12-03 15:57:36.000000000 +0000
+@@ -52,6 +52,7 @@
+ //#include <sys/user.h>
+ #include <netinet/ip.h>
+ #include <netinet/tcp.h>
++#include <sys/sysctl.h>
+ 
+ #define termios host_termios
+ #define winsize host_winsize
+@@ -4739,9 +4740,34 @@ abi_long do_syscall(void *cpu_env, int n
+         break;
+ #endif
+     case TARGET_NR__sysctl:
+-        /* We don't implement this, but ENOTDIR is always a safe
+-           return value. */
+-        ret = -TARGET_ENOTDIR;
++        {
++            struct __sysctl_args *args = (struct __sysctl_args *) arg1;
++            int *name_target, *name, nlen, *oldlenp, oldlen, newlen, i;
++            void *oldval, *newval;
++
++            name_target = (int *) tswapl((long) args->name);
++            nlen = tswapl(args->nlen);
++            oldval = (void *) tswapl((long) args->oldval);
++            oldlenp = (int *) tswapl((long) args->oldlenp);
++            oldlen = tswapl(*oldlenp);
++            newval = (void *) tswapl((long) args->newval);
++            newlen = tswapl(args->newlen);
++
++            name = alloca(nlen * sizeof (int));
++            for (i = 0; i < nlen; i++)
++                name[i] = tswapl(name_target[i]);
++
++            if (nlen == 2 && name[0] == CTL_KERN && name[1] == KERN_VERSION) {
++                ret = get_errno(
++                        sysctl(name, nlen, oldval, &oldlen, newval, newlen));
++                if (!is_error(ret)) {
++                    *oldlenp = tswapl(oldlen);
++                }
++            } else {
++                gemu_log("qemu: Unsupported sysctl name\n");
++                ret = -ENOSYS;
++            }
++        }
+         break;
+     case TARGET_NR_sched_setparam:
+         {
diff --git a/packages/qemu/qemu-0.9.1/33_syscall_ppc_clone.patch b/packages/qemu/qemu-0.9.1/33_syscall_ppc_clone.patch
new file mode 100644
index 0000000000..3f733b6ab8
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/33_syscall_ppc_clone.patch
@@ -0,0 +1,22 @@
+#DPATCHLEVEL=0
+---
+# linux-user/syscall.c |    6 +-----
+# 1 file changed, 1 insertion(+), 5 deletions(-)
+#
+Index: linux-user/syscall.c
+===================================================================
+--- linux-user/syscall.c.orig	2007-12-03 15:58:11.000000000 +0000
++++ linux-user/syscall.c	2007-12-03 15:58:46.000000000 +0000
+@@ -2750,11 +2750,7 @@ int do_fork(CPUState *env, unsigned int 
+         if (!newsp)
+             newsp = env->gpr[1];
+         new_env->gpr[1] = newsp;
+-        {
+-            int i;
+-            for (i = 7; i < 32; i++)
+-                new_env->gpr[i] = 0;
+-        }
++        new_env->gpr[3] = 0;
+ #elif defined(TARGET_SH4)
+ 	if (!newsp)
+ 	  newsp = env->gregs[15];
diff --git a/packages/qemu/qemu-0.9.1/39_syscall_fadvise64.patch b/packages/qemu/qemu-0.9.1/39_syscall_fadvise64.patch
new file mode 100644
index 0000000000..54ee3e0948
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/39_syscall_fadvise64.patch
@@ -0,0 +1,21 @@
+---
+ linux-user/syscall.c |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+Index: linux-user/syscall.c
+===================================================================
+--- linux-user/syscall.c.orig	2007-12-03 19:33:47.000000000 +0000
++++ linux-user/syscall.c	2007-12-03 19:33:48.000000000 +0000
+@@ -5317,6 +5317,12 @@ abi_long do_syscall(void *cpu_env, int n
+         ret = get_errno(mincore((void*)arg1, (size_t)arg2, (unsigned char*)arg3));
+         break;
+ #endif
++#ifdef TARGET_NR_fadvise64_64
++     case TARGET_NR_fadvise64_64:
++        /* Just return success */
++        ret = get_errno(0);
++        break;
++#endif
+ #ifdef TARGET_NR_madvise
+     case TARGET_NR_madvise:
+         /* A straight passthrough may not be safe because qemu sometimes
diff --git a/packages/qemu/qemu-0.9.1/41_arm_fpa_sigfpe.patch b/packages/qemu/qemu-0.9.1/41_arm_fpa_sigfpe.patch
new file mode 100644
index 0000000000..cea3afc7ff
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/41_arm_fpa_sigfpe.patch
@@ -0,0 +1,104 @@
+#DPATCHLEVEL=0
+---
+# linux-user/main.c        |   51 ++++++++++++++++++++++++++++++++++++++++++++++-
+# target-arm/nwfpe/fpa11.c |    7 ++++++
+# 2 files changed, 57 insertions(+), 1 deletion(-)
+#
+Index: linux-user/main.c
+===================================================================
+--- linux-user/main.c.orig	2007-12-03 15:59:10.000000000 +0000
++++ linux-user/main.c	2007-12-03 16:01:27.000000000 +0000
+@@ -377,18 +377,67 @@ void cpu_loop(CPUARMState *env)
+             {
+                 TaskState *ts = env->opaque;
+                 uint32_t opcode;
++                int rc;
+ 
+                 /* we handle the FPU emulation here, as Linux */
+                 /* we get the opcode */
+                 /* FIXME - what to do if get_user() fails? */
+                 get_user_u32(opcode, env->regs[15]);
+ 
+-                if (EmulateAll(opcode, &ts->fpa, env) == 0) {
++                rc = EmulateAll(opcode, &ts->fpa, env);
++                if (rc == 0) { /* illegal instruction */
+                     info.si_signo = SIGILL;
+                     info.si_errno = 0;
+                     info.si_code = TARGET_ILL_ILLOPN;
+                     info._sifields._sigfault._addr = env->regs[15];
+                     queue_signal(info.si_signo, &info);
++                } else if (rc < 0) { /* FP exception */
++                    int arm_fpe=0;
++
++                     /* translate softfloat flags to FPSR flags */
++                    if (-rc & float_flag_invalid)
++                      arm_fpe |= BIT_IOC;
++                    if (-rc & float_flag_divbyzero)
++                      arm_fpe |= BIT_DZC;
++                    if (-rc & float_flag_overflow)
++                      arm_fpe |= BIT_OFC;
++                    if (-rc & float_flag_underflow)
++                      arm_fpe |= BIT_UFC;
++                    if (-rc & float_flag_inexact)
++                      arm_fpe |= BIT_IXC;
++
++                    FPSR fpsr = ts->fpa.fpsr;
++                    //printf("fpsr 0x%x, arm_fpe 0x%x\n",fpsr,arm_fpe);
++
++                    if (fpsr & (arm_fpe << 16)) { /* exception enabled? */
++                      info.si_signo = SIGFPE;
++                      info.si_errno = 0;
++
++                      /* ordered by priority, least first */
++                      if (arm_fpe & BIT_IXC) info.si_code = TARGET_FPE_FLTRES;
++                      if (arm_fpe & BIT_UFC) info.si_code = TARGET_FPE_FLTUND;
++                      if (arm_fpe & BIT_OFC) info.si_code = TARGET_FPE_FLTOVF;
++                      if (arm_fpe & BIT_DZC) info.si_code = TARGET_FPE_FLTDIV;
++                      if (arm_fpe & BIT_IOC) info.si_code = TARGET_FPE_FLTINV;
++
++                      info._sifields._sigfault._addr = env->regs[15];
++                      queue_signal(info.si_signo, &info);
++                    } else {
++                      env->regs[15] += 4;
++                    }
++
++                    /* accumulate unenabled exceptions */
++                    if ((!(fpsr & BIT_IXE)) && (arm_fpe & BIT_IXC))
++                      fpsr |= BIT_IXC;
++                    if ((!(fpsr & BIT_UFE)) && (arm_fpe & BIT_UFC))
++                      fpsr |= BIT_UFC;
++                    if ((!(fpsr & BIT_OFE)) && (arm_fpe & BIT_OFC))
++                      fpsr |= BIT_OFC;
++                    if ((!(fpsr & BIT_DZE)) && (arm_fpe & BIT_DZC))
++                      fpsr |= BIT_DZC;
++                    if ((!(fpsr & BIT_IOE)) && (arm_fpe & BIT_IOC))
++                      fpsr |= BIT_IOC;
++                    ts->fpa.fpsr=fpsr;
+                 } else {
+                     /* increment PC */
+                     env->regs[15] += 4;
+Index: target-arm/nwfpe/fpa11.c
+===================================================================
+--- target-arm/nwfpe/fpa11.c.orig	2007-12-03 15:40:26.000000000 +0000
++++ target-arm/nwfpe/fpa11.c	2007-12-03 15:59:11.000000000 +0000
+@@ -162,6 +162,8 @@ unsigned int EmulateAll(unsigned int opc
+     fpa11->initflag = 1;
+   }
+ 
++  set_float_exception_flags(0, &fpa11->fp_status);  
++
+   if (TEST_OPCODE(opcode,MASK_CPRT))
+   {
+     //fprintf(stderr,"emulating CPRT\n");
+@@ -191,6 +193,11 @@ unsigned int EmulateAll(unsigned int opc
+   }
+ 
+ //  restore_flags(flags);
++  if(nRc == 1 && get_float_exception_flags(&fpa11->fp_status))
++  {
++    //printf("fef 0x%x\n",float_exception_flags);
++    nRc=-get_float_exception_flags(&fpa11->fp_status);
++  }
+ 
+   //printf("returning %d\n",nRc);
+   return(nRc);
diff --git a/packages/qemu/qemu-0.9.1/52_ne2000_return.patch b/packages/qemu/qemu-0.9.1/52_ne2000_return.patch
new file mode 100644
index 0000000000..e4ea33f2c6
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/52_ne2000_return.patch
@@ -0,0 +1,17 @@
+---
+ hw/ne2000.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: qemu/hw/ne2000.c
+===================================================================
+--- qemu.orig/hw/ne2000.c	2007-12-03 19:32:52.000000000 +0000
++++ qemu/hw/ne2000.c	2007-12-03 19:33:55.000000000 +0000
+@@ -217,7 +217,7 @@ static int ne2000_can_receive(void *opaq
+     NE2000State *s = opaque;
+ 
+     if (s->cmd & E8390_STOP)
+-        return 1;
++        return 0;
+     return !ne2000_buffer_full(s);
+ }
+ 
diff --git a/packages/qemu/qemu-0.9.1/61_safe_64bit_int.patch b/packages/qemu/qemu-0.9.1/61_safe_64bit_int.patch
new file mode 100644
index 0000000000..9b1ace81a5
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/61_safe_64bit_int.patch
@@ -0,0 +1,27 @@
+#DPATCHLEVEL=0
+---
+# dyngen-exec.h |    4 ++--
+# 1 file changed, 2 insertions(+), 2 deletions(-)
+#
+Index: dyngen-exec.h
+===================================================================
+--- dyngen-exec.h.orig	2007-12-31 13:06:21.000000000 +0000
++++ dyngen-exec.h	2007-12-31 13:08:54.000000000 +0000
+@@ -38,7 +38,7 @@
+ // Linux/Sparc64 defines uint64_t
+ #if !(defined (__sparc_v9__) && defined(__linux__))
+ /* XXX may be done for all 64 bits targets ? */
+-#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__) 
++#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__) || defined(__sparc__)
+ typedef unsigned long uint64_t;
+ #else
+ typedef unsigned long long uint64_t;
+@@ -55,7 +55,7 @@
+ typedef signed int int32_t;
+ // Linux/Sparc64 defines int64_t
+ #if !(defined (__sparc_v9__) && defined(__linux__))
+-#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__)
++#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__) || defined(__sparc__)
+ typedef signed long int64_t;
+ #else
+ typedef signed long long int64_t;
diff --git a/packages/qemu/qemu-0.9.1/63_sparc_build.patch b/packages/qemu/qemu-0.9.1/63_sparc_build.patch
new file mode 100644
index 0000000000..37b38f641b
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/63_sparc_build.patch
@@ -0,0 +1,18 @@
+#DPATCHLEVEL=0
+---
+# sparc.ld |    2 +-
+# 1 file changed, 1 insertion(+), 1 deletion(-)
+#
+Index: sparc.ld
+===================================================================
+--- sparc.ld.orig	2007-12-03 15:40:26.000000000 +0000
++++ sparc.ld	2007-12-03 16:05:06.000000000 +0000
+@@ -6,7 +6,7 @@ ENTRY(_start)
+ SECTIONS
+ {
+   /* Read-only sections, merged into text segment: */
+-  . = 0x60000000 + SIZEOF_HEADERS;
++  . = 0x60000000 + 0x400;
+   .interp     : { *(.interp)    }
+   .hash          : { *(.hash)           }
+   .dynsym        : { *(.dynsym)         }
diff --git a/packages/qemu/qemu-0.9.1/64_ppc_asm_constraints.patch b/packages/qemu/qemu-0.9.1/64_ppc_asm_constraints.patch
new file mode 100644
index 0000000000..e4858b79d7
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/64_ppc_asm_constraints.patch
@@ -0,0 +1,18 @@
+#DPATCHLEVEL=1
+---
+# cpu-all.h |    2 +-
+# 1 file changed, 1 insertion(+), 1 deletion(-)
+#
+Index: qemu/cpu-all.h
+===================================================================
+--- qemu.orig/cpu-all.h	2007-06-13 11:48:22.000000000 +0100
++++ qemu/cpu-all.h	2007-06-13 11:51:56.000000000 +0100
+@@ -250,7 +250,7 @@ static inline void stw_le_p(void *ptr, i
+ static inline void stl_le_p(void *ptr, int v)
+ {
+ #ifdef __powerpc__
+-    __asm__ __volatile__ ("stwbrx %1,0,%2" : "=m" (*(uint32_t *)ptr) : "r" (v), "r" (ptr));
++    __asm__ __volatile__ ("stwbrx %0,0,%1" : : "r" (v), "r" (ptr) : "memory");
+ #else
+     uint8_t *p = ptr;
+     p[0] = v;
diff --git a/packages/qemu/qemu-0.9.1/65_kfreebsd.patch b/packages/qemu/qemu-0.9.1/65_kfreebsd.patch
new file mode 100644
index 0000000000..dfece800ac
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/65_kfreebsd.patch
@@ -0,0 +1,35 @@
+---
+ configure |    6 ++++++
+ vl.c      |    2 ++
+ 2 files changed, 8 insertions(+)
+
+Index: configure
+===================================================================
+--- configure.orig	2007-12-03 15:40:26.000000000 +0000
++++ configure	2007-12-03 16:05:34.000000000 +0000
+@@ -129,6 +129,12 @@ if [ "$cpu" = "i386" -o "$cpu" = "x86_64
+     kqemu="yes"
+ fi
+ ;;
++GNU/kFreeBSD)
++oss="yes"
++if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
++    kqemu="yes"
++fi
++;;
+ FreeBSD)
+ bsd="yes"
+ oss="yes"
+Index: vl.c
+===================================================================
+--- vl.c.orig	2007-12-03 16:05:32.000000000 +0000
++++ vl.c	2007-12-03 16:05:34.000000000 +0000
+@@ -97,6 +97,8 @@
+ #include <stropts.h>
+ #endif
+ #endif
++#elif defined (__GLIBC__) && defined (__FreeBSD_kernel__)
++#include <freebsd/stdlib.h>
+ #else
+ #include <winsock2.h>
+ int inet_aton(const char *cp, struct in_addr *ia);
diff --git a/packages/qemu/qemu-0.9.1/66_tls_ld.patch b/packages/qemu/qemu-0.9.1/66_tls_ld.patch
new file mode 100644
index 0000000000..54e02eff8b
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/66_tls_ld.patch
@@ -0,0 +1,55 @@
+---
+ arm.ld  |    7 +++++++
+ i386.ld |    7 +++++++
+ 2 files changed, 14 insertions(+)
+
+Index: arm.ld
+===================================================================
+--- arm.ld.orig	2007-06-13 11:48:22.000000000 +0100
++++ arm.ld	2007-06-13 11:51:56.000000000 +0100
+@@ -26,6 +26,10 @@ SECTIONS
+     { *(.rel.rodata) *(.rel.gnu.linkonce.r*) }
+   .rela.rodata   :
+     { *(.rela.rodata) *(.rela.gnu.linkonce.r*) }
++  .rel.tdata     : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
++  .rela.tdata    : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
++  .rel.tbss      : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
++  .rela.tbss     : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+   .rel.got       : { *(.rel.got)		}
+   .rela.got      : { *(.rela.got)		}
+   .rel.ctors     : { *(.rel.ctors)	}
+@@ -58,6 +62,9 @@ SECTIONS
+   .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+    __exidx_end = .;
+   .reginfo : { *(.reginfo) }
++  /* Thread Local Storage sections  */
++  .tdata	  : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
++  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+   /* Adjust the address for the data segment.  We want to adjust up to
+      the same address within the page on the next page up.  */
+   . = ALIGN(0x100000) + (. & (0x100000 - 1));
+Index: i386.ld
+===================================================================
+--- i386.ld.orig	2007-06-13 11:48:22.000000000 +0100
++++ i386.ld	2007-06-13 11:51:56.000000000 +0100
+@@ -28,6 +28,10 @@ SECTIONS
+     { *(.rel.rodata) *(.rel.gnu.linkonce.r*) }
+   .rela.rodata   :
+     { *(.rela.rodata) *(.rela.gnu.linkonce.r*) }
++  .rel.tdata     : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
++  .rela.tdata    : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
++  .rel.tbss      : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
++  .rela.tbss     : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+   .rel.got       : { *(.rel.got)		}
+   .rela.got      : { *(.rela.got)		}
+   .rel.ctors     : { *(.rel.ctors)	}
+@@ -53,6 +57,9 @@ SECTIONS
+   _etext = .;
+   PROVIDE (etext = .);
+   .fini      : { *(.fini)    } =0x47ff041f
++  /* Thread Local Storage sections  */
++  .tdata	  : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
++  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+   . = ALIGN(32 / 8);
+   PROVIDE (__preinit_array_start = .);
+   .preinit_array     : { *(.preinit_array) }
diff --git a/packages/qemu/qemu-0.9.1/91-oh-sdl-cursor.patch b/packages/qemu/qemu-0.9.1/91-oh-sdl-cursor.patch
new file mode 100644
index 0000000000..0d60c1c306
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/91-oh-sdl-cursor.patch
@@ -0,0 +1,18 @@
+=== modified file 'sdl.c'
+---
+ sdl.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: sdl.c
+===================================================================
+--- sdl.c.orig	2007-12-03 19:32:15.000000000 +0000
++++ sdl.c	2007-12-03 19:34:04.000000000 +0000
+@@ -247,7 +247,7 @@ static void sdl_hide_cursor(void)
+ 
+     if (kbd_mouse_is_absolute()) {
+         SDL_ShowCursor(1);
+-        SDL_SetCursor(sdl_cursor_hidden);
++        /* SDL_SetCursor(sdl_cursor_hidden); */
+     } else {
+         SDL_ShowCursor(0);
+     }
diff --git a/packages/qemu/qemu-0.9.1/configure_symlinkpath_fix.patch b/packages/qemu/qemu-0.9.1/configure_symlinkpath_fix.patch
new file mode 100644
index 0000000000..3ec304a38c
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/configure_symlinkpath_fix.patch
@@ -0,0 +1,28 @@
+Index: qemu-0.9.1/configure
+===================================================================
+--- qemu-0.9.1.orig/configure	2008-01-24 15:33:13.000000000 +0000
++++ qemu-0.9.1/configure	2008-01-24 15:45:50.000000000 +0000
+@@ -209,15 +209,17 @@
+ 
+ # find source path
+ source_path=`dirname "$0"`
++source_path_used="no"
++workdir=`pwd`
++workdir=`readlink -f $workdir`
+ if [ -z "$source_path" ]; then
+-    source_path=`pwd`
++    source_path=$workdir
+ else
+     source_path=`cd "$source_path"; pwd`
+-fi
+-if test "$source_path" = `pwd` ; then
+-    source_path_used="no"
+-else
+-    source_path_used="yes"
++    source_path=`readlink -f $source_path`
++    if test "$source_path" != "$workdir" ; then
++        source_path_used="yes"
++    fi
+ fi
+ 
+ werror="no"
diff --git a/packages/qemu/qemu-0.9.1/disable-error-in-configure.patch b/packages/qemu/qemu-0.9.1/disable-error-in-configure.patch
new file mode 100644
index 0000000000..017f9f6355
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/disable-error-in-configure.patch
@@ -0,0 +1,17 @@
+---
+ configure |    2 --
+ 1 file changed, 2 deletions(-)
+
+Index: qemu/configure
+===================================================================
+--- qemu.orig/configure	2007-12-03 16:38:38.000000000 +0000
++++ qemu/configure	2007-12-03 16:38:39.000000000 +0000
+@@ -323,8 +323,6 @@ for opt do
+   ;;
+   --disable-werror) werror="no"
+   ;;
+-  *) echo "ERROR: unknown option $opt"; show_help="yes"
+-  ;;
+   --disable-nptl) nptl="no"
+   ;;
+   esac
diff --git a/packages/qemu/qemu-0.9.1/fix_segfault.patch b/packages/qemu/qemu-0.9.1/fix_segfault.patch
new file mode 100644
index 0000000000..443c330650
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/fix_segfault.patch
@@ -0,0 +1,37 @@
+---
+ linux-user/syscall.c |   22 ----------------------
+ 1 file changed, 22 deletions(-)
+
+Index: qemu/linux-user/syscall.c
+===================================================================
+--- qemu.orig/linux-user/syscall.c	2007-12-03 23:40:11.000000000 +0000
++++ qemu/linux-user/syscall.c	2007-12-03 23:40:21.000000000 +0000
+@@ -5695,28 +5695,6 @@ abi_long do_syscall(void *cpu_env, int n
+            goto unimplemented_nowarn;
+ #endif
+ 
+-#ifdef TARGET_NR_clock_gettime
+-    case TARGET_NR_clock_gettime:
+-    {
+-        struct timespec ts;
+-        ret = get_errno(clock_gettime(arg1, &ts));
+-        if (!is_error(ret)) {
+-            host_to_target_timespec(arg2, &ts);
+-        }
+-        break;
+-    }
+-#endif
+-#ifdef TARGET_NR_clock_getres
+-    case TARGET_NR_clock_getres:
+-    {
+-        struct timespec ts;
+-        ret = get_errno(clock_getres(arg1, &ts));
+-        if (!is_error(ret)) {
+-            host_to_target_timespec(arg2, &ts);
+-        }
+-        break;
+-    }
+-#endif
+ 
+ #if defined(TARGET_NR_set_tid_address) && defined(__NR_set_tid_address)
+     case TARGET_NR_set_tid_address:
diff --git a/packages/qemu/qemu-0.9.1/qemu-0.9.0-nptl-update.patch b/packages/qemu/qemu-0.9.1/qemu-0.9.0-nptl-update.patch
new file mode 100644
index 0000000000..ebc996e873
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/qemu-0.9.0-nptl-update.patch
@@ -0,0 +1,219 @@
+---
+ linux-user/main.c    |    7 ++-
+ linux-user/syscall.c |  114 ++++++++++++++++++++++++++++++++++++++++++++++-----
+ 2 files changed, 111 insertions(+), 10 deletions(-)
+
+Index: qemu/linux-user/main.c
+===================================================================
+--- qemu.orig/linux-user/main.c	2007-12-03 19:34:09.000000000 +0000
++++ qemu/linux-user/main.c	2007-12-03 23:44:45.000000000 +0000
+@@ -391,7 +391,7 @@ do_kernel_trap(CPUARMState *env)
+         cpu_unlock();
+         break;
+     case 0xffff0fe0: /* __kernel_get_tls */
+-        env->regs[0] = env->cp15.c13_tls;
++        env->regs[0] = env->cp15.c13_tls2;
+         break;
+     default:
+         return 1;
+@@ -2037,6 +2037,11 @@ int main(int argc, char **argv)
+     int drop_ld_preload = 0, environ_count = 0;
+     char **target_environ, **wrk, **dst;
+ 
++    char *assume_kernel = getenv("QEMU_ASSUME_KERNEL");
++
++    if (assume_kernel)
++       setenv("LD_ASSUME_KERNEL", assume_kernel, 1);
++
+     if (argc <= 1)
+         usage();
+ 
+Index: qemu/linux-user/syscall.c
+===================================================================
+--- qemu.orig/linux-user/syscall.c	2007-12-03 19:34:09.000000000 +0000
++++ qemu/linux-user/syscall.c	2007-12-03 23:46:54.000000000 +0000
+@@ -61,6 +61,7 @@
+ #define tchars host_tchars /* same as target */
+ #define ltchars host_ltchars /* same as target */
+ 
++#include <linux/futex.h>
+ #include <linux/termios.h>
+ #include <linux/unistd.h>
+ #include <linux/utsname.h>
+@@ -2694,7 +2695,6 @@ abi_long do_arch_prctl(CPUX86State *env,
+     return 0;
+ }
+ #endif
+-
+ #endif /* defined(TARGET_I386) */
+ 
+ /* this stack is the equivalent of the kernel stack associated with a
+@@ -2729,16 +2729,19 @@ int do_fork(CPUState *env, unsigned int 
+     TaskState *ts;
+     uint8_t *new_stack;
+     CPUState *new_env;
+-
++#if defined(TARGET_I386)
++     uint64_t *new_gdt_table;
++#endif
+ #ifdef USE_NPTL
+     unsigned int nptl_flags;
+ 
+     if (flags & CLONE_PARENT_SETTID)
+         *parent_tidptr = gettid();
+ #endif
+-
+     if (flags & CLONE_VM) {
+         ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE);
++        if (!ts)
++          return -ENOMEM;
+         memset(ts, 0, sizeof(TaskState));
+         new_stack = ts->stack;
+         ts->used = 1;
+@@ -2750,6 +2753,29 @@ int do_fork(CPUState *env, unsigned int 
+ #if defined(TARGET_I386)
+         if (!newsp)
+             newsp = env->regs[R_ESP];
++       new_gdt_table = malloc(9 * 8);
++       if (!new_gdt_table) {
++               free(new_env);
++               return -ENOMEM;
++       }
++       /* Copy main GDT table from parent, but clear TLS entries */
++       memcpy(new_gdt_table, g2h(env->gdt.base), 6 * 8);
++       memset(&new_gdt_table[6], 0, 3 * 8); 
++       new_env->gdt.base = h2g(new_gdt_table);
++       if (flags & 0x00080000 /* CLONE_SETTLS */) {
++               ret = do_set_thread_area(new_env, new_env->regs[R_ESI]);
++               if (ret) {
++                       free(new_gdt_table);
++                       free(new_env);
++                       return ret;
++               }
++       }
++       cpu_x86_load_seg(env, R_CS, new_env->regs[R_CS]);
++       cpu_x86_load_seg(env, R_DS, new_env->regs[R_DS]);
++       cpu_x86_load_seg(env, R_ES, new_env->regs[R_ES]);
++       cpu_x86_load_seg(env, R_SS, new_env->regs[R_SS]);
++       cpu_x86_load_seg(env, R_FS, new_env->regs[R_FS]);
++       cpu_x86_load_seg(env, R_GS, new_env->regs[R_GS]);
+         new_env->regs[R_ESP] = newsp;
+         new_env->regs[R_EAX] = 0;
+ #elif defined(TARGET_ARM)
+@@ -3121,6 +3147,68 @@ static inline abi_long host_to_target_ti
+     unlock_user_struct(target_ts, target_addr, 1);
+ }
+ 
++static long do_futex(target_ulong uaddr, int op, uint32_t val,
++                    target_ulong utime, target_ulong uaddr2,
++                    uint32_t val3)
++{
++       struct timespec host_utime;
++       unsigned long val2 = utime;
++
++       if (utime && (op == FUTEX_WAIT || op == FUTEX_LOCK_PI)) {
++               target_to_host_timespec(&host_utime, utime);
++               val2 = (unsigned long)&host_utime;
++       }
++ 
++#ifdef BSWAP_NEEDED
++       switch(op) {
++       case FUTEX_CMP_REQUEUE:
++               val3 = tswap32(val3);
++       case FUTEX_REQUEUE:
++               val2 = tswap32(val2);
++       case FUTEX_WAIT:
++       case FUTEX_WAKE:
++               val = tswap32(val);
++       case FUTEX_LOCK_PI: /* This one's icky, but comes out OK */
++       case FUTEX_UNLOCK_PI:
++               break;
++       default: 
++               gemu_log("qemu: Unsupported futex op %d\n", op);
++               return -ENOSYS;
++       } 
++#if 0 /* No, it's worse than this */
++       if (op == FUTEX_WAKE_OP) {
++               /* Need to munge the secondary operation (val3) */
++               val3 = tswap32(val3);
++               int op2 = (val3 >> 28) & 7;
++               int cmp = (val3 >> 24) & 15;
++               int oparg = (val3 << 8) >> 20;
++               int cmparg = (val3 << 20) >> 20;
++               int shift = val3 & (FUTEX_OP_OPARG_SHIFT << 28);
++
++               if (shift)
++                   oparg = (oparg & 7) + 24 - (oparg & 24);
++               else oparg = 
++               if (op2 == FUTEX_OP_ADD) {
++                       gemu_log("qemu: Unsupported wrong-endian FUTEX_OP_ADD\n");
++                       return -ENOSYS;
++               }
++               if (cmparg == FUTEX_OP_CMP_LT || cmparg == FUTEX_OP_CMP_GE ||
++                   cmparg == FUTEX_OP_CMP_LE || cmparg == FUTEX_OP_CMP_GT) {
++                       gemu_log("qemu: Unsupported wrong-endian futex cmparg %d\n", cmparg);
++                       return -ENOSYS;
++               }
++               val3 = shift | (op2<<28) | (cmp<<24) | (oparg<<12) | cmparg;
++       }
++#endif
++#endif
++       return syscall(__NR_futex, g2h(uaddr), op, val, val2, g2h(uaddr2), val3);
++}
++
++int do_set_tid_address(target_ulong tidptr)
++{
++       return syscall(__NR_set_tid_address, g2h(tidptr));
++}
++
+ /* do_syscall() should always have a single exit point at the end so
+    that actions, such as logging of syscall results, can be performed.
+    All errnos that do_syscall() returns must be -TARGET_<errcode>. */
+@@ -3145,7 +3233,7 @@ abi_long do_syscall(void *cpu_env, int n
+         _mcleanup();
+ #endif
+         gdb_exit(cpu_env, arg1);
+-        /* XXX: should free thread stack and CPU env */
++        /* XXX: should free thread stack, GDT and CPU env */
+         _exit(arg1);
+         ret = 0; /* avoid warning */
+         break;
+@@ -5569,6 +5657,9 @@ abi_long do_syscall(void *cpu_env, int n
+ #elif defined(TARGET_I386) && defined(TARGET_ABI32)
+       ret = do_set_thread_area(cpu_env, arg1);
+       break;
++#elif TARGET_i386
++	  ret = get_errno(do_set_thread_area(cpu_env, arg1));
++	  break;
+ #else
+       goto unimplemented_nowarn;
+ #endif
+@@ -5586,6 +5677,16 @@ abi_long do_syscall(void *cpu_env, int n
+         goto unimplemented_nowarn;
+ #endif
+ 
++#ifdef TARGET_NR_futex
++    case TARGET_NR_futex:
++       ret = get_errno(do_futex(arg1, arg2, arg3, arg4, arg5, arg6));
++       break;
++#endif
++#ifdef TARGET_NR_set_robust_list
++    case TARGET_NR_set_robust_list:
++           goto unimplemented_nowarn;
++#endif
++
+ #ifdef TARGET_NR_clock_gettime
+     case TARGET_NR_clock_gettime:
+     {
+@@ -5627,11 +5728,6 @@ abi_long do_syscall(void *cpu_env, int n
+ 	break;
+ #endif
+ 
+-#ifdef TARGET_NR_set_robust_list
+-    case TARGET_NR_set_robust_list:
+-	goto unimplemented_nowarn;
+-#endif
+-
+ #if defined(TARGET_NR_utimensat) && defined(__NR_utimensat)
+     case TARGET_NR_utimensat:
+         {
diff --git a/packages/qemu/qemu-0.9.1/qemu-0.9.0-nptl.patch b/packages/qemu/qemu-0.9.1/qemu-0.9.0-nptl.patch
new file mode 100644
index 0000000000..10e3cc04a5
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/qemu-0.9.0-nptl.patch
@@ -0,0 +1,929 @@
+These are Paul Brook's patches to QEMU-0.8.2 to enable the running of single
+ARM binaries under QEMU's user-emulation mode. Without them, QEMU-0.8.1
+immediately dies saying:
+	Error: f0005
+	qemu: uncaught target signal 6 (Aborted) - exiting
+while qemu-0.8.2 dies saying:
+	qemu: Unsupported syscall: 983045
+	cannot set up thread-local storage: unknown error
+
+This file is a rediffing of the patches visible at
+https://nowt.dyndns.org/patch.qemu_nptl on 27 Sept 2006
+which "patch" fails to apply automatically.
+See also http://lists.gnu.org/archive/html/qemu-devel/2006-09/msg00194.html
+
+	Martin Guy, 27 Sept 2006
+
+---
+ configure                |   25 ++++++
+ exec-all.h               |  165 ------------------------------------------
+ linux-user/arm/syscall.h |    4 -
+ linux-user/main.c        |   94 +++++++++++++++++++++---
+ linux-user/qemu.h        |    3 
+ linux-user/syscall.c     |   91 ++++++++++++++++++++++-
+ qemu_spinlock.h          |  181 +++++++++++++++++++++++++++++++++++++++++++++++
+ target-arm/cpu.h         |   10 ++
+ target-arm/op.c          |    6 +
+ target-arm/translate.c   |    9 ++
+ 10 files changed, 405 insertions(+), 183 deletions(-)
+
+--- qemu.orig/configure
++++ qemu/configure
+@@ -103,10 +103,11 @@ check_gcc="yes"
+ softmmu="yes"
+ linux_user="no"
+ darwin_user="no"
+ build_docs="no"
+ uname_release=""
++nptl="yes"
+ 
+ # OS specific
+ targetos=`uname -s`
+ case $targetos in
+ CYGWIN*)
+@@ -322,10 +323,12 @@ for opt do
+   ;;
+   --disable-werror) werror="no"
+   ;;
+   *) echo "ERROR: unknown option $opt"; show_help="yes"
+   ;;
++  --disable-nptl) nptl="no"
++  ;;
+   esac
+ done
+ 
+ if [ "$bsd" = "yes" -o "$darwin" = "yes" -o "$mingw32" = "yes" ] ; then
+     AIOLIBS=
+@@ -417,10 +420,11 @@ echo "  --enable-system          enable 
+ echo "  --disable-system         disable all system emulation targets"
+ echo "  --enable-linux-user      enable all linux usermode emulation targets"
+ echo "  --disable-linux-user     disable all linux usermode emulation targets"
+ echo "  --enable-darwin-user     enable all darwin usermode emulation targets"
+ echo "  --disable-darwin-user    disable all darwin usermode emulation targets"
++echo "  --disable-nptl           disable usermode NPTL guest support"
+ echo "  --fmod-lib               path to FMOD library"
+ echo "  --fmod-inc               path to FMOD includes"
+ echo "  --enable-uname-release=R Return R for uname -r in usermode emulation"
+ echo "  --sparc_cpu=V            Build qemu for Sparc architecture v7, v8, v8plus, v8plusa, v9"
+ echo ""
+@@ -583,10 +587,27 @@ fi
+ cat > $TMPC <<EOF
+ int main(void) {
+ }
+ EOF
+ 
++# check NPTL support
++cat > $TMPC <<EOF
++#include <sched.h>
++void foo()
++{
++#ifndef CLONE_SETTLS
++#error bork
++#endif
++}
++EOF
++
++if $cc -c -o $TMPO $TMPC 2> /dev/null ; then
++  :
++else
++   nptl="no"
++fi
++
+ ##########################################
+ # SDL probe
+ 
+ sdl_too_old=no
+ 
+@@ -747,10 +768,11 @@ if test -n "$sparc_cpu"; then
+ fi
+ echo "kqemu support     $kqemu"
+ echo "Documentation     $build_docs"
+ [ ! -z "$uname_release" ] && \
+ echo "uname -r          $uname_release"
++echo "NPTL support      $nptl"
+ 
+ if test $sdl_too_old = "yes"; then
+ echo "-> Your SDL version is too old - please upgrade to have SDL support"
+ fi
+ if [ -s /tmp/qemu-$$-sdl-config.log ]; then
+@@ -1063,10 +1085,13 @@ if test "$target_cpu" = "i386" ; then
+   fi
+ elif test "$target_cpu" = "arm" -o "$target_cpu" = "armeb" ; then
+   echo "TARGET_ARCH=arm" >> $config_mak
+   echo "#define TARGET_ARCH \"arm\"" >> $config_h
+   echo "#define TARGET_ARM 1" >> $config_h
++  if test "$nptl" = "yes" ; then
++	  echo "#define USE_NPTL 1" >> $config_h
++  fi
+   bflt="yes"
+ elif test "$target_cpu" = "sparc" ; then
+   echo "TARGET_ARCH=sparc" >> $config_mak
+   echo "#define TARGET_ARCH \"sparc\"" >> $config_h
+   echo "#define TARGET_SPARC 1" >> $config_h
+--- qemu.orig/exec-all.h
++++ qemu/exec-all.h
+@@ -338,174 +338,11 @@ dummy_label ## n: ;\
+ 
+ extern CPUWriteMemoryFunc *io_mem_write[IO_MEM_NB_ENTRIES][4];
+ extern CPUReadMemoryFunc *io_mem_read[IO_MEM_NB_ENTRIES][4];
+ extern void *io_mem_opaque[IO_MEM_NB_ENTRIES];
+ 
+-#if defined(__powerpc__)
+-static inline int testandset (int *p)
+-{
+-    int ret;
+-    __asm__ __volatile__ (
+-                          "0:    lwarx %0,0,%1\n"
+-                          "      xor. %0,%3,%0\n"
+-                          "      bne 1f\n"
+-                          "      stwcx. %2,0,%1\n"
+-                          "      bne- 0b\n"
+-                          "1:    "
+-                          : "=&r" (ret)
+-                          : "r" (p), "r" (1), "r" (0)
+-                          : "cr0", "memory");
+-    return ret;
+-}
+-#elif defined(__i386__)
+-static inline int testandset (int *p)
+-{
+-    long int readval = 0;
+-
+-    __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
+-                          : "+m" (*p), "+a" (readval)
+-                          : "r" (1)
+-                          : "cc");
+-    return readval;
+-}
+-#elif defined(__x86_64__)
+-static inline int testandset (int *p)
+-{
+-    long int readval = 0;
+-
+-    __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
+-                          : "+m" (*p), "+a" (readval)
+-                          : "r" (1)
+-                          : "cc");
+-    return readval;
+-}
+-#elif defined(__s390__)
+-static inline int testandset (int *p)
+-{
+-    int ret;
+-
+-    __asm__ __volatile__ ("0: cs    %0,%1,0(%2)\n"
+-			  "   jl    0b"
+-			  : "=&d" (ret)
+-			  : "r" (1), "a" (p), "0" (*p)
+-			  : "cc", "memory" );
+-    return ret;
+-}
+-#elif defined(__alpha__)
+-static inline int testandset (int *p)
+-{
+-    int ret;
+-    unsigned long one;
+-
+-    __asm__ __volatile__ ("0:	mov 1,%2\n"
+-			  "	ldl_l %0,%1\n"
+-			  "	stl_c %2,%1\n"
+-			  "	beq %2,1f\n"
+-			  ".subsection 2\n"
+-			  "1:	br 0b\n"
+-			  ".previous"
+-			  : "=r" (ret), "=m" (*p), "=r" (one)
+-			  : "m" (*p));
+-    return ret;
+-}
+-#elif defined(__sparc__)
+-static inline int testandset (int *p)
+-{
+-	int ret;
+-
+-	__asm__ __volatile__("ldstub	[%1], %0"
+-			     : "=r" (ret)
+-			     : "r" (p)
+-			     : "memory");
+-
+-	return (ret ? 1 : 0);
+-}
+-#elif defined(__arm__)
+-static inline int testandset (int *spinlock)
+-{
+-    register unsigned int ret;
+-    __asm__ __volatile__("swp %0, %1, [%2]"
+-                         : "=r"(ret)
+-                         : "0"(1), "r"(spinlock));
+-
+-    return ret;
+-}
+-#elif defined(__mc68000)
+-static inline int testandset (int *p)
+-{
+-    char ret;
+-    __asm__ __volatile__("tas %1; sne %0"
+-                         : "=r" (ret)
+-                         : "m" (p)
+-                         : "cc","memory");
+-    return ret;
+-}
+-#elif defined(__ia64)
+-
+-#include <ia64intrin.h>
+-
+-static inline int testandset (int *p)
+-{
+-    return __sync_lock_test_and_set (p, 1);
+-}
+-#elif defined(__mips__)
+-static inline int testandset (int *p)
+-{
+-    int ret;
+-
+-    __asm__ __volatile__ (
+-	"	.set push		\n"
+-	"	.set noat		\n"
+-	"	.set mips2		\n"
+-	"1:	li	$1, 1		\n"
+-	"	ll	%0, %1		\n"
+-	"	sc	$1, %1		\n"
+-	"	beqz	$1, 1b		\n"
+-	"	.set pop		"
+-	: "=r" (ret), "+R" (*p)
+-	:
+-	: "memory");
+-
+-    return ret;
+-}
+-#else
+-#error unimplemented CPU support
+-#endif
+-
+-typedef int spinlock_t;
+-
+-#define SPIN_LOCK_UNLOCKED 0
+-
+-#if defined(CONFIG_USER_ONLY)
+-static inline void spin_lock(spinlock_t *lock)
+-{
+-    while (testandset(lock));
+-}
+-
+-static inline void spin_unlock(spinlock_t *lock)
+-{
+-    *lock = 0;
+-}
+-
+-static inline int spin_trylock(spinlock_t *lock)
+-{
+-    return !testandset(lock);
+-}
+-#else
+-static inline void spin_lock(spinlock_t *lock)
+-{
+-}
+-
+-static inline void spin_unlock(spinlock_t *lock)
+-{
+-}
+-
+-static inline int spin_trylock(spinlock_t *lock)
+-{
+-    return 1;
+-}
+-#endif
++#include "qemu_spinlock.h"
+ 
+ extern spinlock_t tb_lock;
+ 
+ extern int tb_invalidated_flag;
+ 
+--- qemu.orig/linux-user/arm/syscall.h
++++ qemu/linux-user/arm/syscall.h
+@@ -26,11 +26,13 @@ struct target_pt_regs {
+ #define ARM_ORIG_r0	uregs[17]
+ 
+ #define ARM_SYSCALL_BASE	0x900000
+ #define ARM_THUMB_SYSCALL	0
+ 
+-#define ARM_NR_cacheflush (ARM_SYSCALL_BASE + 0xf0000 + 2)
++#define ARM_NR_BASE	  0xf0000
++#define ARM_NR_cacheflush (ARM_NR_BASE + 2)
++#define ARM_NR_set_tls	  (ARM_NR_BASE + 5)
+ 
+ #define ARM_NR_semihosting	  0x123456
+ #define ARM_NR_thumb_semihosting  0xAB
+ 
+ #if defined(TARGET_WORDS_BIGENDIAN)
+--- qemu.orig/linux-user/main.c
++++ qemu/linux-user/main.c
+@@ -361,10 +361,54 @@ static void arm_cache_flush(abi_ulong st
+             break;
+         addr = last1 + 1;
+     }
+ }
+ 
++/* Handle a jump to the kernel code page.  */
++static int
++do_kernel_trap(CPUARMState *env)
++{
++    uint32_t addr;
++    uint32_t *ptr;
++    uint32_t cpsr;
++
++    switch (env->regs[15]) {
++    case 0xffff0fc0: /* __kernel_cmpxchg */
++        /* XXX: This only works between threads, not between processes.
++           Use native atomic operations.  */
++        /* ??? This probably breaks horribly if the access segfaults.  */
++        cpu_lock();
++        ptr = (uint32_t *)env->regs[2];
++        cpsr = cpsr_read(env);
++        if (*ptr == env->regs[0]) {
++            *ptr = env->regs[1];
++            env->regs[0] = 0;
++            cpsr |= CPSR_C;
++        } else {
++            env->regs[0] = -1;
++            cpsr &= ~CPSR_C;
++        }
++        cpsr_write(env, cpsr, CPSR_C);
++        cpu_unlock();
++        break;
++    case 0xffff0fe0: /* __kernel_get_tls */
++        env->regs[0] = env->cp15.c13_tls;
++        break;
++    default:
++        return 1;
++    }
++    /* Jump back to the caller.  */
++    addr = env->regs[14];
++    if (addr & 1) {
++        env->thumb = 1;
++        addr &= ~1;
++    }
++    env->regs[15] = addr;
++
++    return 0;
++}
++
+ void cpu_loop(CPUARMState *env)
+ {
+     int trapnr;
+     unsigned int n, insn;
+     target_siginfo_t info;
+@@ -471,32 +515,50 @@ void cpu_loop(CPUARMState *env)
+                         get_user_u32(insn, env->regs[15] - 4);
+                         n = insn & 0xffffff;
+                     }
+                 }
+ 
+-                if (n == ARM_NR_cacheflush) {
+-                    arm_cache_flush(env->regs[0], env->regs[1]);
+-                } else if (n == ARM_NR_semihosting
+-                           || n == ARM_NR_thumb_semihosting) {
++                if (n == ARM_NR_semihosting
++                    || n == ARM_NR_thumb_semihosting) {
+                     env->regs[0] = do_arm_semihosting (env);
+                 } else if (n == 0 || n >= ARM_SYSCALL_BASE
+                            || (env->thumb && n == ARM_THUMB_SYSCALL)) {
+                     /* linux syscall */
+                     if (env->thumb || n == 0) {
+                         n = env->regs[7];
+                     } else {
+                         n -= ARM_SYSCALL_BASE;
+                         env->eabi = 0;
+                     }
+-                    env->regs[0] = do_syscall(env,
+-                                              n,
+-                                              env->regs[0],
+-                                              env->regs[1],
+-                                              env->regs[2],
+-                                              env->regs[3],
+-                                              env->regs[4],
+-                                              env->regs[5]);
++                    if ( n > ARM_NR_BASE) {
++                        switch (n)
++                          {
++                          case ARM_NR_cacheflush:
++                              arm_cache_flush(env->regs[0], env->regs[1]);
++                              break;
++#ifdef USE_NPTL
++                          case ARM_NR_set_tls:
++                              cpu_set_tls(env, env->regs[0]);
++                              env->regs[0] = 0;
++                              break;
++#endif
++                          default:
++                              printf ("Error: Bad syscall: %x\n", n);
++                              goto error;
++                          }
++                      }
++                    else
++                      {
++                        env->regs[0] = do_syscall(env,
++                                                  n,
++                                                  env->regs[0],
++                                                  env->regs[1],
++                                                  env->regs[2],
++                                                  env->regs[3],
++                                                  env->regs[4],
++                                                  env->regs[5]);
++                      }
+                 } else {
+                     goto error;
+                 }
+             }
+             break;
+@@ -531,10 +593,14 @@ void cpu_loop(CPUARMState *env)
+                     info.si_code = TARGET_TRAP_BRKPT;
+                     queue_signal(info.si_signo, &info);
+                   }
+             }
+             break;
++        case EXCP_KERNEL_TRAP:
++            if (do_kernel_trap(env))
++              goto error;
++            break;
+         default:
+         error:
+             fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n",
+                     trapnr);
+             cpu_dump_state(env, stderr, fprintf, 0);
+@@ -2378,10 +2444,14 @@ int main(int argc, char **argv)
+ #if defined(TARGET_ARM) || defined(TARGET_M68K)
+     ts->stack_base = info->start_stack;
+     ts->heap_base = info->brk;
+     /* This will be filled in on the first SYS_HEAPINFO call.  */
+     ts->heap_limit = 0;
++    /* Register the magic kernel code page.  The cpu will generate a
++       special exception when it tries to execute code here.  We can't
++       put real code here because it may be in use by the host kernel.  */
++    page_set_flags(0xffff0000, 0xffff0fff, 0);
+ #endif
+ 
+     if (gdbstub_port) {
+         gdbserver_start (gdbstub_port);
+         gdb_handlesig(env, 0);
+--- qemu.orig/linux-user/qemu.h
++++ qemu/linux-user/qemu.h
+@@ -100,10 +100,13 @@ typedef struct TaskState {
+     /* Extra fields for semihosted binaries.  */
+     uint32_t stack_base;
+     uint32_t heap_base;
+     uint32_t heap_limit;
+ #endif
++#ifdef USE_NPTL
++    uint32_t *child_tidptr;
++#endif
+     int used; /* non zero if used */
+     struct image_info *info;
+     uint8_t stack[0];
+ } __attribute__((aligned(16))) TaskState;
+ 
+--- qemu.orig/linux-user/syscall.c
++++ qemu/linux-user/syscall.c
+@@ -69,13 +69,22 @@
+ #include <linux/soundcard.h>
+ #include <linux/dirent.h>
+ #include <linux/kd.h>
+ 
+ #include "qemu.h"
++#include "qemu_spinlock.h"
+ 
+ //#define DEBUG
+ 
++#ifdef USE_NPTL
++#define CLONE_NPTL_FLAGS2 (CLONE_SETTLS | \
++    CLONE_PARENT_SETTID | CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID)
++#else
++/* XXX: Hardcode the above values.  */
++#define CLONE_NPTL_FLAGS2 0
++#endif
++
+ #if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SPARC) \
+     || defined(TARGET_M68K) || defined(TARGET_SH4) || defined(TARGET_CRIS)
+ /* 16 bit uid wrappers emulation */
+ #define USE_UID16
+ #endif
+@@ -2690,27 +2699,46 @@ abi_long do_arch_prctl(CPUX86State *env,
+ 
+ /* this stack is the equivalent of the kernel stack associated with a
+    thread/process */
+ #define NEW_STACK_SIZE 8192
+ 
++#ifdef USE_NPTL
++static spinlock_t nptl_lock = SPIN_LOCK_UNLOCKED;
++#endif
++
+ static int clone_func(void *arg)
+ {
+     CPUState *env = arg;
++#ifdef HAVE_NPTL
++    /* Wait until the parent has finshed initializing the tls state.  */
++    while (!spin_trylock(&nptl_lock))
++        usleep(1);
++    spin_unlock(&nptl_lock);
++#endif
+     cpu_loop(env);
+     /* never exits */
+     return 0;
+ }
+ 
+ /* do_fork() Must return host values and target errnos (unlike most
+    do_*() functions). */
+-int do_fork(CPUState *env, unsigned int flags, abi_ulong newsp)
++int do_fork(CPUState *env, unsigned int flags, unsigned long newsp,
++            uint32_t *parent_tidptr, void *newtls,
++            uint32_t *child_tidptr)
+ {
+     int ret;
+     TaskState *ts;
+     uint8_t *new_stack;
+     CPUState *new_env;
+ 
++#ifdef USE_NPTL
++    unsigned int nptl_flags;
++
++    if (flags & CLONE_PARENT_SETTID)
++        *parent_tidptr = gettid();
++#endif
++
+     if (flags & CLONE_VM) {
+         ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE);
+         memset(ts, 0, sizeof(TaskState));
+         new_stack = ts->stack;
+         ts->used = 1;
+@@ -2772,20 +2800,71 @@ int do_fork(CPUState *env, unsigned int 
+ 	new_env->regs[14] = newsp;
+ #else
+ #error unsupported target CPU
+ #endif
+         new_env->opaque = ts;
++#ifdef USE_NPTL
++        nptl_flags = flags;
++        flags &= ~CLONE_NPTL_FLAGS2;
++
++        if (nptl_flags & CLONE_CHILD_CLEARTID) {
++            ts->child_tidptr = child_tidptr;
++        }
++
++        if (nptl_flags & CLONE_SETTLS)
++            cpu_set_tls (new_env, newtls);
++
++        /* Grab the global cpu lock so that the thread setup appears
++           atomic.  */
++        if (nptl_flags & CLONE_CHILD_SETTID)
++            spin_lock(&nptl_lock);
++
++#else
++        if (flags & CLONE_NPTL_FLAGS2)
++            return -EINVAL;
++#endif
++
++	 if (CLONE_VFORK & flags)
++		flags ^= CLONE_VM;
+ #ifdef __ia64__
+         ret = __clone2(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
+ #else
+ 	ret = clone(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
+ #endif
++#ifdef USE_NPTL
++        if (ret != -1) {
++            if (nptl_flags & CLONE_CHILD_SETTID)
++                *child_tidptr = ret;
++        }
++
++        /* Allow the child to continue.  */
++        if (nptl_flags & CLONE_CHILD_SETTID)
++            spin_unlock(&nptl_lock);
++#endif
+     } else {
+         /* if no CLONE_VM, we consider it is a fork */
+-        if ((flags & ~CSIGNAL) != 0)
++        if ((flags & ~(CSIGNAL | CLONE_NPTL_FLAGS2)) != 0)
+             return -EINVAL;
+         ret = fork();
++#ifdef USE_NPTL
++        /* There is a race condition here.  The parent process could
++           theoretically read the TID in the child process before the child
++           tid is set.  This would require using either ptrace
++           (not implemented) or having *_tidptr to point at a shared memory
++           mapping.  We can't repeat the spinlock hack used above because
++           the child process gets its own copy of the lock.  */
++        if (ret == 0) {
++            /* Child Process.  */
++            if (flags & CLONE_CHILD_SETTID)
++                *child_tidptr = gettid();
++            ts = (TaskState *)env->opaque;
++            if (flags & CLONE_CHILD_CLEARTID)
++                ts->child_tidptr = child_tidptr;
++            if (flags & CLONE_SETTLS)
++                cpu_set_tls (env, newtls);
++        }
++#endif
+     }
+     return ret;
+ }
+ 
+ static abi_long do_fcntl(int fd, int cmd, abi_ulong arg)
+@@ -3106,11 +3185,11 @@ abi_long do_syscall(void *cpu_env, int n
+         break;
+     case TARGET_NR_brk:
+         ret = do_brk(arg1);
+         break;
+     case TARGET_NR_fork:
+-        ret = get_errno(do_fork(cpu_env, SIGCHLD, 0));
++        ret = get_errno(do_fork(cpu_env, SIGCHLD, 0, NULL, NULL, NULL));
+         break;
+ #ifdef TARGET_NR_waitpid
+     case TARGET_NR_waitpid:
+         {
+             int status;
+@@ -4463,11 +4542,12 @@ abi_long do_syscall(void *cpu_env, int n
+ #endif
+     case TARGET_NR_fsync:
+         ret = get_errno(fsync(arg1));
+         break;
+     case TARGET_NR_clone:
+-        ret = get_errno(do_fork(cpu_env, arg1, arg2));
++        ret = get_errno(do_fork(cpu_env, arg1, arg2, (uint32_t *)arg3,
++                        (void *)arg4, (uint32_t *)arg5));
+         break;
+ #ifdef __NR_exit_group
+         /* new thread calls */
+     case TARGET_NR_exit_group:
+         gdb_exit(cpu_env, arg1);
+@@ -4908,11 +4988,12 @@ abi_long do_syscall(void *cpu_env, int n
+     case TARGET_NR_putpmsg:
+         goto unimplemented;
+ #endif
+ #ifdef TARGET_NR_vfork
+     case TARGET_NR_vfork:
+-        ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0));
++        ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0,
++                                NULL, NULL, NULL));
+         break;
+ #endif
+ #ifdef TARGET_NR_ugetrlimit
+     case TARGET_NR_ugetrlimit:
+     {
+--- /dev/null
++++ qemu/qemu_spinlock.h
+@@ -0,0 +1,181 @@
++/*
++ * Atomic operation helper include
++ *
++ *  Copyright (c) 2005 Fabrice Bellard
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++ */
++#ifndef QEMU_SPINLOCK_H
++#define QEMU_SPINLOCK_H
++
++#ifdef __powerpc__
++static inline int testandset (int *p)
++{
++    int ret;
++    __asm__ __volatile__ (
++                          "0:    lwarx %0,0,%1\n"
++                          "      xor. %0,%3,%0\n"
++                          "      bne 1f\n"
++                          "      stwcx. %2,0,%1\n"
++                          "      bne- 0b\n"
++                          "1:    "
++                          : "=&r" (ret)
++                          : "r" (p), "r" (1), "r" (0)
++                          : "cr0", "memory");
++    return ret;
++}
++#endif
++
++#ifdef __i386__
++static inline int testandset (int *p)
++{
++    long int readval = 0;
++
++    __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
++                          : "+m" (*p), "+a" (readval)
++                          : "r" (1)
++                          : "cc");
++    return readval;
++}
++#endif
++
++#ifdef __x86_64__
++static inline int testandset (int *p)
++{
++    long int readval = 0;
++
++    __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
++                          : "+m" (*p), "+a" (readval)
++                          : "r" (1)
++                          : "cc");
++    return readval;
++}
++#endif
++
++#ifdef __s390__
++static inline int testandset (int *p)
++{
++    int ret;
++
++    __asm__ __volatile__ ("0: cs    %0,%1,0(%2)\n"
++			  "   jl    0b"
++			  : "=&d" (ret)
++			  : "r" (1), "a" (p), "0" (*p)
++			  : "cc", "memory" );
++    return ret;
++}
++#endif
++
++#ifdef __alpha__
++static inline int testandset (int *p)
++{
++    int ret;
++    unsigned long one;
++
++    __asm__ __volatile__ ("0:	mov 1,%2\n"
++			  "	ldl_l %0,%1\n"
++			  "	stl_c %2,%1\n"
++			  "	beq %2,1f\n"
++			  ".subsection 2\n"
++			  "1:	br 0b\n"
++			  ".previous"
++			  : "=r" (ret), "=m" (*p), "=r" (one)
++			  : "m" (*p));
++    return ret;
++}
++#endif
++
++#ifdef __sparc__
++static inline int testandset (int *p)
++{
++	int ret;
++
++	__asm__ __volatile__("ldstub	[%1], %0"
++			     : "=r" (ret)
++			     : "r" (p)
++			     : "memory");
++
++	return (ret ? 1 : 0);
++}
++#endif
++
++#ifdef __arm__
++static inline int testandset (int *spinlock)
++{
++    register unsigned int ret;
++    __asm__ __volatile__("swp %0, %1, [%2]"
++                         : "=r"(ret)
++                         : "0"(1), "r"(spinlock));
++
++    return ret;
++}
++#endif
++
++#ifdef __mc68000
++static inline int testandset (int *p)
++{
++    char ret;
++    __asm__ __volatile__("tas %1; sne %0"
++                         : "=r" (ret)
++                         : "m" (p)
++                         : "cc","memory");
++    return ret;
++}
++#endif
++
++#ifdef __ia64
++#include <ia64intrin.h>
++
++static inline int testandset (int *p)
++{
++    return __sync_lock_test_and_set (p, 1);
++}
++#endif
++
++typedef int spinlock_t;
++
++#define SPIN_LOCK_UNLOCKED 0
++
++#if defined(CONFIG_USER_ONLY)
++static inline void spin_lock(spinlock_t *lock)
++{
++    while (testandset(lock));
++}
++
++static inline void spin_unlock(spinlock_t *lock)
++{
++    *lock = 0;
++}
++
++static inline int spin_trylock(spinlock_t *lock)
++{
++    return !testandset(lock);
++}
++#else
++static inline void spin_lock(spinlock_t *lock)
++{
++}
++
++static inline void spin_unlock(spinlock_t *lock)
++{
++}
++
++static inline int spin_trylock(spinlock_t *lock)
++{
++    return 1;
++}
++#endif
++
++#endif
+--- qemu.orig/target-arm/cpu.h
++++ qemu/target-arm/cpu.h
+@@ -36,10 +36,11 @@
+ #define EXCP_DATA_ABORT      4
+ #define EXCP_IRQ             5
+ #define EXCP_FIQ             6
+ #define EXCP_BKPT            7
+ #define EXCP_EXCEPTION_EXIT  8   /* Return from v7M exception.  */
++#define EXCP_KERNEL_TRAP     9   /* Jumped to kernel code page.  */
+ 
+ #define ARMV7M_EXCP_RESET   1
+ #define ARMV7M_EXCP_NMI     2
+ #define ARMV7M_EXCP_HARD    3
+ #define ARMV7M_EXCP_MEM     4
+@@ -220,10 +221,19 @@ int cpu_arm_signal_handler(int host_sign
+                            void *puc);
+ 
+ void cpu_lock(void);
+ void cpu_unlock(void);
+ 
++void cpu_lock(void);
++void cpu_unlock(void);
++#if defined(USE_NPTL)
++static inline void cpu_set_tls(CPUARMState *env, void *newtls)
++{
++  env->cp15.c13_tls2 = (uint32_t)(long)newtls;
++}
++#endif
++
+ #define CPSR_M (0x1f)
+ #define CPSR_T (1 << 5)
+ #define CPSR_F (1 << 6)
+ #define CPSR_I (1 << 7)
+ #define CPSR_A (1 << 8)
+--- qemu.orig/target-arm/op.c
++++ qemu/target-arm/op.c
+@@ -1007,10 +1007,16 @@ void OPPROTO op_exception_exit(void)
+ {
+     env->exception_index = EXCP_EXCEPTION_EXIT;
+     cpu_loop_exit();
+ }
+ 
++void OPPROTO op_kernel_trap(void)
++{
++    env->exception_index = EXCP_KERNEL_TRAP;
++    cpu_loop_exit();
++}
++
+ /* VFP support.  We follow the convention used for VFP instrunctions:
+    Single precition routines have a "s" suffix, double precision a
+    "d" suffix.  */
+ 
+ #define VFP_OP(name, p) void OPPROTO op_vfp_##name##p(void)
+--- qemu.orig/target-arm/translate.c
++++ qemu/target-arm/translate.c
+@@ -7518,11 +7518,18 @@ static inline int gen_intermediate_code_
+             /* We always get here via a jump, so know we are not in a
+                conditional execution block.  */
+             gen_op_exception_exit();
+         }
+ #endif
+-
++#ifdef CONFIG_USER_ONLY
++        /* Intercept jump to the magic kernel page.  */
++        if (dc->pc > 0xffff0000) {
++            gen_op_kernel_trap();
++            dc->is_jmp = DISAS_UPDATE;
++            break;
++        }
++#endif
+         if (env->nb_breakpoints > 0) {
+             for(j = 0; j < env->nb_breakpoints; j++) {
+                 if (env->breakpoints[j] == dc->pc) {
+                     gen_set_condexec(dc);
+                     gen_op_movl_T0_im((long)dc->pc);
diff --git a/packages/qemu/qemu-0.9.1/qemu-amd64-32b-mapping-0.9.0.patch b/packages/qemu/qemu-0.9.1/qemu-amd64-32b-mapping-0.9.0.patch
new file mode 100644
index 0000000000..c7f36d8110
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/qemu-amd64-32b-mapping-0.9.0.patch
@@ -0,0 +1,37 @@
+---
+ linux-user/mmap.c |    8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+Index: qemu/linux-user/mmap.c
+===================================================================
+--- qemu.orig/linux-user/mmap.c	2007-12-03 15:40:25.000000000 +0000
++++ qemu/linux-user/mmap.c	2007-12-03 16:37:21.000000000 +0000
+@@ -29,6 +29,10 @@
+ 
+ //#define DEBUG_MMAP
+ 
++#ifndef MAP_32BIT
++#define MAP_32BIT 0
++#endif
++
+ /* NOTE: all the constants are the HOST ones, but addresses are target. */
+ int target_mprotect(abi_ulong start, abi_ulong len, int prot)
+ {
+@@ -251,7 +255,7 @@ abi_long target_mmap(abi_ulong start, ab
+            especially important if qemu_host_page_size >
+            qemu_real_host_page_size */
+         p = mmap(g2h(mmap_start),
+-                 host_len, prot, flags | MAP_FIXED, fd, host_offset);
++                 host_len, prot, flags | MAP_FIXED | MAP_32BIT, fd, host_offset);
+         if (p == MAP_FAILED)
+             return -1;
+         /* update start so that it points to the file position at 'offset' */
+@@ -406,7 +410,7 @@ abi_long target_mremap(abi_ulong old_add
+     unsigned long host_addr;
+ 
+     /* XXX: use 5 args syscall */
+-    host_addr = (long)mremap(g2h(old_addr), old_size, new_size, flags);
++    host_addr = (long)mremap(g2h(old_addr), old_size, new_size, flags | MAP_32BIT);
+     if (host_addr == -1)
+         return -1;
+     new_addr = h2g(host_addr);
diff --git a/packages/qemu/qemu-0.9.1/series b/packages/qemu/qemu-0.9.1/series
new file mode 100644
index 0000000000..e6ffdcc6bd
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/series
@@ -0,0 +1,25 @@
+02_snapshot_use_tmpdir.patch -p0
+04_do_not_print_rtc_freq_if_ok.patch -p1
+05_non-fatal_if_linux_hd_missing.patch -p1
+06_exit_segfault.patch -p0
+10_signal_jobs.patch -p0
+11_signal_sigaction.patch -p0
+22_net_tuntap_stall.patch -p0
+31_syscalls.patch -p0
+32_syscall_sysctl.patch -p0
+33_syscall_ppc_clone.patch -p0
+39_syscall_fadvise64.patch -p0
+41_arm_fpa_sigfpe.patch -p0
+52_ne2000_return.patch -p1
+61_safe_64bit_int.patch -p0
+63_sparc_build.patch -p0
+64_ppc_asm_constraints.patch -p1
+65_kfreebsd.patch -p0
+66_tls_ld.patch -p0
+91-oh-sdl-cursor.patch -p0
+qemu-0.9.0-nptl.patch -p1
+qemu-0.9.0-nptl-update.patch -p1
+qemu-amd64-32b-mapping-0.9.0.patch -p1
+workaround_bad_futex_headers.patch -p1
+fix_segfault.patch -p1
+disable-error-in-configure.patch -p1
diff --git a/packages/qemu/qemu-0.9.1/workaround_bad_futex_headers.patch b/packages/qemu/qemu-0.9.1/workaround_bad_futex_headers.patch
new file mode 100644
index 0000000000..cc122ebdba
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/workaround_bad_futex_headers.patch
@@ -0,0 +1,25 @@
+---
+ linux-user/syscall.c |   10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+Index: qemu/linux-user/syscall.c
+===================================================================
+--- qemu.orig/linux-user/syscall.c	2007-08-09 20:28:06.000000000 +0100
++++ qemu/linux-user/syscall.c	2007-08-09 20:28:41.000000000 +0100
+@@ -61,7 +61,15 @@
+ #define tchars host_tchars /* same as target */
+ #define ltchars host_ltchars /* same as target */
+ 
+-#include <linux/futex.h>
++#define FUTEX_WAIT              0
++#define FUTEX_WAKE              1
++#define FUTEX_FD                2
++#define FUTEX_REQUEUE           3
++#define FUTEX_CMP_REQUEUE       4
++#define FUTEX_WAKE_OP           5
++#define FUTEX_LOCK_PI           6
++#define FUTEX_UNLOCK_PI         7
++
+ #include <linux/termios.h>
+ #include <linux/unistd.h>
+ #include <linux/utsname.h>
diff --git a/packages/qemu/qemu-native_0.9.0+cvs.bb b/packages/qemu/qemu-native_0.9.0+cvs.bb
deleted file mode 100644
index 65a7908a5c..0000000000
--- a/packages/qemu/qemu-native_0.9.0+cvs.bb
+++ /dev/null
@@ -1,3 +0,0 @@
-require qemu_0.9.0+cvs.bb
-inherit native
-require qemu-native.inc
diff --git a/packages/qemu/qemu-native_20071121.bb b/packages/qemu/qemu-native_20071121.bb
deleted file mode 100644
index a813528d87..0000000000
--- a/packages/qemu/qemu-native_20071121.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-SRCDATE_qemu-native = "20071121"
-require qemu_${PV}.bb
-inherit native
-PR = "r1"
-DEPENDS = "zlib-native"
-prefix = "${STAGING_DIR_NATIVE}/${layout_prefix}"
-
-require qemu-gcc3-check.inc
diff --git a/packages/qemu/qemu_0.9.0+cvs.bb b/packages/qemu/qemu_0.9.0+cvs.bb
deleted file mode 100644
index 8a89b805a2..0000000000
--- a/packages/qemu/qemu_0.9.0+cvs.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-DESCRIPTION = "Qemu is an open source processor emulator."
-HOMEPAGE = "http://fabrice.bellard.free.fr/qemu/"
-SECTION = "devel"
-LICENSE = "GPL"
-SRCDATE="20070701"
-PV = "0.9.0+cvs${SRCDATE}"
-PR = "r1"
-
-SRC_URI = "cvs://anonymous@cvs.savannah.nongnu.org/sources/qemu;method=pserver;rsh=ssh;module=qemu;date=${SRCDATE} \
-           file://configure-0.9.0.patch;patch=1 \
-           file://qemu-sdl-cursor-0.9.0.patch;patch=1 \
-           file://arm_nptl-0.9.0.patch;patch=1 \
-           file://pl110_rgb-r0-0.9.0.patch;patch=1 \
-           file://qemu-0.9.0-gcc4.patch;patch=1 \
-	   file://qemu-amd64-32b-mapping-0.9.0.patch;patch=1"
-S = "${WORKDIR}/qemu"
-
-EXTRA_OECONF="--disable-gcc-check"
-
-inherit autotools
-
-DEFAULT_PREFERENCE = "-1"
diff --git a/packages/qemu/qemu_20071121.bb b/packages/qemu/qemu_20071121.bb
deleted file mode 100644
index 2b6f289974..0000000000
--- a/packages/qemu/qemu_20071121.bb
+++ /dev/null
@@ -1,60 +0,0 @@
-LICENSE = "GPL"
-DEPENDS = "zlib"
-SRCDATE = "20071121"
-PV = "0.9.0+cvs${SRCDATE}"
-PR = "r1"
-
-DEFAULT_PREFERENCE = "-1"
-
-FILESPATH = "${FILE_DIRNAME}/qemu-${PV}:${FILE_DIRNAME}/files"
-FILESDIR = "${WORKDIR}"
-
-SRC_URI = "\
-    cvs://anonymous@cvs.savannah.nongnu.org/sources/qemu;method=pserver;rsh=ssh;module=qemu \
-    file://02_snapshot_use_tmpdir.patch;patch=1;pnum=0 \
-    file://04_do_not_print_rtc_freq_if_ok.patch;patch=1;pnum=1 \
-    file://05_non-fatal_if_linux_hd_missing.patch;patch=1;pnum=1 \
-    file://06_exit_segfault.patch;patch=1;pnum=0 \
-    file://10_signal_jobs.patch;patch=1;pnum=0 \
-    file://11_signal_sigaction.patch;patch=1;pnum=0 \
-    file://22_net_tuntap_stall.patch;patch=1;pnum=0 \
-    file://31_syscalls.patch;patch=1;pnum=0 \
-    file://32_syscall_sysctl.patch;patch=1;pnum=0 \
-    file://33_syscall_ppc_clone.patch;patch=1;pnum=0 \
-    file://39_syscall_fadvise64.patch;patch=1;pnum=0 \
-    file://41_arm_fpa_sigfpe.patch;patch=1;pnum=0 \
-    file://52_ne2000_return.patch;patch=1;pnum=1 \
-    file://61_safe_64bit_int.patch;patch=1;pnum=0 \
-    file://63_sparc_build.patch;patch=1;pnum=0 \
-    file://64_ppc_asm_constraints.patch;patch=1;pnum=1 \
-    file://65_kfreebsd.patch;patch=1;pnum=0 \
-    file://66_tls_ld.patch;patch=1;pnum=0 \
-    file://91-oh-sdl-cursor.patch;patch=1;pnum=0 \
-    file://qemu-0.9.0-nptl.patch;patch=1 \
-    file://qemu-0.9.0-nptl-update.patch;patch=1 \
-    file://qemu-amd64-32b-mapping-0.9.0.patch;patch=1 \
-    file://workaround_bad_futex_headers.patch;patch=1 \
-    file://fix_segfault.patch;patch=1 \
-    file://disable-error-in-configure.patch;patch=1 \
-    file://no-strip.patch;patch=1"
-
-#    svn://svn.o-hand.com/repos/misc/trunk/qemu-packaging/qemu;module=debian;proto=http;srcdate=20070119 \
-#    file://debian/patches/21_net_soopts.patch;patch=1;pnum=0 \
-#    file://debian/patches/35_syscall_sockaddr.patch;patch=1;pnum=0 \
-#    file://debian/patches/43_arm_cpustate.patch;patch=1;pnum=0 \
-#    file://debian/patches/62_linux_boot_nasm.patch;patch=1;pnum=0 \
-#    file://debian/patches/67_ppc_ftbfs.patch;patch=1;pnum=0 \
-#    file://debian/patches/80_ui_curses.patch;patch=1;pnum=0 \
-#    file://debian/patches/96-x.patch;patch=1"
-
-S = "${WORKDIR}/qemu"
-
-#EXTRA_OECONF += "--disable-sdl"
-#EXTRA_OECONF += "--target-list=arm-linux-user"
-EXTRA_OECONF += "--disable-gfx-check"
-
-inherit autotools
-
-do_configure() {
-    oe_runconf
-}
-- 
cgit v1.2.3