From 5ac1e9fc321004cb4849dfd3d78c63b329d647bb Mon Sep 17 00:00:00 2001 From: Maxython Date: Sat, 6 Nov 2021 13:58:22 +0300 Subject: [PATCH] Update package qemu-system-x86-64-headless --- .../0017-fix-i386-mmu.patch | 37 +++++++++++++++++++ packages/qemu-system-x86-64-headless/build.sh | 2 +- 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 packages/qemu-system-x86-64-headless/0017-fix-i386-mmu.patch diff --git a/packages/qemu-system-x86-64-headless/0017-fix-i386-mmu.patch b/packages/qemu-system-x86-64-headless/0017-fix-i386-mmu.patch new file mode 100644 index 0000000000..c6a45e8f55 --- /dev/null +++ b/packages/qemu-system-x86-64-headless/0017-fix-i386-mmu.patch @@ -0,0 +1,37 @@ +--- qemu-6.1.0/target/i386/tcg/sysemu/excp_helper.c ++++ qemu-6.1.0/target/i386/tcg/sysemu/excp_helper.c +@@ -94,15 +94,6 @@ static int mmu_translate(CPUState *cs, hwaddr addr, MMUTranslateFunc get_hphys_f + bool la57 = pg_mode & PG_MODE_LA57; + uint64_t pml5e_addr, pml5e; + uint64_t pml4e_addr, pml4e; +- int32_t sext; +- +- /* test virtual address sign extension */ +- sext = la57 ? (int64_t)addr >> 56 : (int64_t)addr >> 47; +- if (get_hphys_func && sext != 0 && sext != -1) { +- env->error_code = 0; +- cs->exception_index = EXCP0D_GPF; +- return 1; +- } + + if (la57) { + pml5e_addr = ((cr3 & ~0xfff) + +@@ -423,6 +414,18 @@ static int handle_mmu_fault(CPUState *cs, vaddr addr, int size, + page_size = 4096; + } else { + pg_mode = get_pg_mode(env); ++ if (pg_mode & PG_MODE_LMA) { ++ int32_t sext; ++ ++ /* test virtual address sign extension */ ++ sext = (int64_t)addr >> (pg_mode & PG_MODE_LA57 ? 56 : 47); ++ if (sext != 0 && sext != -1) { ++ env->error_code = 0; ++ cs->exception_index = EXCP0D_GPF; ++ return 1; ++ } ++ } ++ + error_code = mmu_translate(cs, addr, get_hphys, env->cr[3], is_write1, + mmu_idx, pg_mode, + &paddr, &page_size, &prot); diff --git a/packages/qemu-system-x86-64-headless/build.sh b/packages/qemu-system-x86-64-headless/build.sh index 795a16757a..d754ae938c 100644 --- a/packages/qemu-system-x86-64-headless/build.sh +++ b/packages/qemu-system-x86-64-headless/build.sh @@ -3,7 +3,7 @@ TERMUX_PKG_DESCRIPTION="A generic and open source machine emulator and virtualiz TERMUX_PKG_LICENSE="LGPL-2.1" TERMUX_PKG_MAINTAINER="Leonid Pliushch " TERMUX_PKG_VERSION=1:6.1.0 -TERMUX_PKG_REVISION=4 +TERMUX_PKG_REVISION=5 TERMUX_PKG_SRCURL=https://download.qemu.org/qemu-${TERMUX_PKG_VERSION:2}.tar.xz TERMUX_PKG_SHA256=eebc089db3414bbeedf1e464beda0a7515aad30f73261abc246c9b27503a3c96 TERMUX_PKG_DEPENDS="glib, libbz2, libc++, libcurl, libgnutls, libiconv, libjpeg-turbo, liblzo, libnettle, libnfs, libpixman, libpng, libspice-server, libssh, libusb, libusbredir, ncurses, pulseaudio, qemu-common, resolv-conf, zlib, zstd"