From c09746625cd1afa2d84b4a1a6b00790ae9ceabb2 Mon Sep 17 00:00:00 2001 From: wangziliang Date: Fri, 31 May 2024 14:59:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=9E=84=E5=BB=BAqemu-user?= =?UTF-8?q?=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fix-linux-user-target-build-error.patch | 77 +++++++++++++++++++++++++ qemu.spec | 40 ++++++++++--- 2 files changed, 110 insertions(+), 7 deletions(-) create mode 100644 fix-linux-user-target-build-error.patch diff --git a/fix-linux-user-target-build-error.patch b/fix-linux-user-target-build-error.patch new file mode 100644 index 0000000..eb7a840 --- /dev/null +++ b/fix-linux-user-target-build-error.patch @@ -0,0 +1,77 @@ +diff -ur a/target/arm/internals.h b/target/arm/internals.h +--- a/target/arm/internals.h 2024-05-31 08:54:40.590676179 +0000 ++++ b/target/arm/internals.h 2024-05-31 08:58:13.428364004 +0000 +@@ -314,10 +314,21 @@ + /* Callback function for when a watchpoint or breakpoint triggers. */ + void arm_debug_excp_handler(CPUState *cs); + ++#if defined(CONFIG_USER_ONLY) || !defined(CONFIG_TCG) ++static inline bool arm_is_psci_call(ARMCPU *cpu, int excp_type) ++{ ++ return false; ++} ++static inline void arm_handle_psci_call(ARMCPU *cpu) ++{ ++ g_assert_not_reached(); ++} ++#else + /* Return true if the r0/x0 value indicates that this SMC/HVC is a PSCI call. */ + bool arm_is_psci_call(ARMCPU *cpu, int excp_type); + /* Actually handle a PSCI call */ + void arm_handle_psci_call(ARMCPU *cpu); ++#endif + + /** + * arm_clear_exclusive: clear the exclusive monitor +diff -ur a/target/i386/cpu.c b/target/i386/cpu.c +--- a/target/i386/cpu.c 2024-05-31 08:54:40.735680054 +0000 ++++ b/target/i386/cpu.c 2024-05-31 08:58:01.075033879 +0000 +@@ -7816,15 +7816,6 @@ + + return cpu->env.cr[0] & CR0_PG_MASK; + } +-#endif /* !CONFIG_USER_ONLY */ +- +-static void x86_cpu_set_pc(CPUState *cs, vaddr value) +-{ +- X86CPU *cpu = X86_CPU(cs); +- +- cpu->env.eip = value; +-} +- + + /* At present, we check the vm is *LARGE* or not, i.e. whether + * the memory size is more than 4T or not. +@@ -7843,6 +7834,15 @@ + } + } + ++#endif /* !CONFIG_USER_ONLY */ ++ ++static void x86_cpu_set_pc(CPUState *cs, vaddr value) ++{ ++ X86CPU *cpu = X86_CPU(cs); ++ ++ cpu->env.eip = value; ++} ++ + static vaddr x86_cpu_get_pc(CPUState *cs) + { + X86CPU *cpu = X86_CPU(cs); +diff -ur a/target/i386/cpu.h b/target/i386/cpu.h +--- a/target/i386/cpu.h 2024-05-31 08:54:40.191665515 +0000 ++++ b/target/i386/cpu.h 2024-05-31 08:58:13.429364031 +0000 +@@ -2080,12 +2080,12 @@ + + #ifndef CONFIG_USER_ONLY + extern const VMStateDescription vmstate_x86_cpu; +-#endif + + #define DEFAULT_VM_CPU_PHYS_BITS 42 + #define LARGE_VM_CPU_PHYS_BITS 46 + + void x86_cpu_adjuest_by_ram_size(ram_addr_t ram_size, X86CPU *cpu); ++#endif + + int x86_cpu_pending_interrupt(CPUState *cs, int interrupt_request); + diff --git a/qemu.spec b/qemu.spec index e1b8fbe..fef8d7b 100644 --- a/qemu.spec +++ b/qemu.spec @@ -3,7 +3,7 @@ Name: qemu Version: 8.2.0 -Release: 13 +Release: 14 Epoch: 11 Summary: QEMU is a generic and open source machine emulator and virtualizer License: GPLv2 and BSD and MIT and CC-BY-SA-4.0 @@ -269,6 +269,7 @@ Patch0252: target-loongarch-kvm-Add-pmu-support.patch Patch0253: target-loongarch-kvm-Fix-vm-restore-failed.patch Patch0254: target-loongarch-kvm-Add-pv-steal-time-support.patch Patch0255: target-loongarch-kvm-fpu-save-the-vreg-registers-hig.patch +Patch0256: fix-linux-user-target-build-error.patch BuildRequires: flex BuildRequires: gcc @@ -449,6 +450,12 @@ Requires: qemu %description system-loongarch64 This package provides the QEMU system emulator for loongarch64. +%package user +Summary: Qemu-user +Requires: qemu +%description user +This package provides the QEMU user emulator for multi-arch. + %prep %setup -q -n qemu-%{version}%{?rcstr} %autopatch -p1 @@ -456,26 +463,37 @@ This package provides the QEMU system emulator for loongarch64. %build %ifarch x86_64 buildarch="x86_64-softmmu" -targetarch="aarch64-softmmu arm-softmmu riscv32-softmmu riscv64-softmmu" +targetarch="aarch64-softmmu arm-softmmu riscv32-softmmu riscv64-softmmu \ + aarch64-linux-user arm-linux-user riscv32-linux-user riscv64-linux-user" +usermode_emulator="qemu-aarch64 qemu-arm qemu-riscv32 qemu-riscv64" %endif + %ifarch aarch64 buildarch="aarch64-softmmu" -targetarch="x86_64-softmmu arm-softmmu riscv32-softmmu riscv64-softmmu" +targetarch="x86_64-softmmu arm-softmmu riscv32-softmmu riscv64-softmmu \ + x86_64-linux-user arm-linux-user riscv32-linux-user riscv64-linux-user" +usermode_emulator="qemu-x86_64 qemu-arm qemu-riscv32 qemu-riscv64" %endif %ifarch ppc64le buildarch="ppc64-softmmu" -targetarch="x86_64-softmmu aarch64-softmmu arm-softmmu riscv32-softmmu riscv64-softmmu" +targetarch="x86_64-softmmu aarch64-softmmu arm-softmmu riscv32-softmmu riscv64-softmmu \ + x86_64-linux-user aarch64-linux-user arm-linux-user riscv32-linux-user riscv64-linux-user" +usermode_emulator="qemu-x86_64 qemu-aarch64 qemu-arm qemu-riscv32 qemu-riscv64" %endif %ifarch loongarch64 buildarch="loongarch64-softmmu" -targetarch="x86_64-softmmu aarch64-softmmu arm-softmmu riscv32-softmmu riscv64-softmmu" +targetarch="x86_64-softmmu aarch64-softmmu arm-softmmu riscv32-softmmu riscv64-softmmu \ + x86_64-linux-user aarch64-linux-user arm-linux-user riscv32-linux-user riscv64-linux-user" +usermode_emulator="qemu-x86_64 qemu-aarch64 qemu-arm qemu-riscv32 qemu-riscv64" %endif %ifarch riscv64 buildarch="riscv64-softmmu" -targetarch="x86_64-softmmu aarch64-softmmu arm-softmmu riscv32-softmmu" +targetarch="x86_64-softmmu aarch64-softmmu arm-softmmu riscv32-softmmu \ + x86_64-linux-user aarch64-linux-user arm-linux-user riscv32-linux-user" +usermode_emulator="qemu-x86_64 qemu-aarch64 qemu-arm qemu-riscv32" %endif buildldflags="VL_LDFLAGS=-Wl,--build-id" @@ -549,8 +567,11 @@ cd ../ make %{?_smp_mflags} $buildldflags V=1 - cp ${qemubuilddir}/${buildarch}/qemu-system-* qemu-kvm +for i in ${usermode_emulator} +do + echo "%{_bindir}/${i}" >> %{name}.user +done %install @@ -865,7 +886,12 @@ getent passwd qemu >/dev/null || \ %{_datadir}/%{name}/bios.bin %endif +%files user -f %{name}.user + %changelog +* Fri May 31 2024 wangziliang - 11:8.2.0-14 +- add user-mode emulator package + * Mon May 20 2024 Song Gao - 11:8.2.0-13 - target/loongarch: Fix qemu-system-loongarch64 assert - target/loongarch: Fix qemu-loongarch64 hang when executing 'll.d $t0, $t0, 0' -- Gitee