From 4144219d66ab2630d159e6b870675b795a884d6c Mon Sep 17 00:00:00 2001 From: huangyan Date: Wed, 2 Apr 2025 14:11:28 +0800 Subject: [PATCH] support qemu-user-static build Ported-by: huangyan Original-author: wangziliang --- ...x-user-Print-tid-not-pid-with-strace.patch | 25 ++++++ fix-linux-user-target-build-error.patch | 77 +++++++++++++++++++ qemu.spec | 41 ++++++++-- 3 files changed, 136 insertions(+), 7 deletions(-) create mode 100644 Revert-linux-user-Print-tid-not-pid-with-strace.patch create mode 100644 fix-linux-user-target-build-error.patch diff --git a/Revert-linux-user-Print-tid-not-pid-with-strace.patch b/Revert-linux-user-Print-tid-not-pid-with-strace.patch new file mode 100644 index 0000000..345bd72 --- /dev/null +++ b/Revert-linux-user-Print-tid-not-pid-with-strace.patch @@ -0,0 +1,25 @@ +From ab7eb334c3baf20d189028d0dd5fdcbfc00c6511 Mon Sep 17 00:00:00 2001 +From: huangyan +Date: Wed, 2 Apr 2025 14:09:11 +0800 +Subject: [PATCH] Revert-linux-user-Print-tid-not-pid-with-strace + +--- + linux-user/strace.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/linux-user/strace.c b/linux-user/strace.c +index ac9177ebe..cf26e5526 100644 +--- a/linux-user/strace.c ++++ b/linux-user/strace.c +@@ -4176,7 +4176,7 @@ print_syscall(CPUArchState *cpu_env, int num, + if (!f) { + return; + } +- fprintf(f, "%d ", get_task_state(env_cpu(cpu_env))->ts_tid); ++ fprintf(f, "%d ", getpid()); + + for (i = 0; i < nsyscalls; i++) { + if (scnames[i].nr == num) { +-- +2.43.0 + 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 c129e8e..43395ab 100644 --- a/qemu.spec +++ b/qemu.spec @@ -3,7 +3,7 @@ Name: qemu Version: 8.2.0 -Release: 29 +Release: 30 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 @@ -622,6 +622,8 @@ Patch0605: target-i386-kvm-Support-to-get-and-enable-extensions.patch Patch0606: target-i386-csv-Request-to-set-private-memory-of-CSV.patch Patch0607: target-i386-csv-Support-load-kernel-hashes-for-CSV3-.patch Patch0608: target-i386-csv-Support-inject-secret-for-CSV3-guest.patch +Patch0609: fix-linux-user-target-build-error.patch +Patch0610: Revert-linux-user-Print-tid-not-pid-with-strace.patch BuildRequires: flex BuildRequires: gcc @@ -803,6 +805,12 @@ Requires: spice-gtk %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 @@ -810,26 +818,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" @@ -903,8 +922,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 @@ -1219,7 +1241,12 @@ getent passwd qemu >/dev/null || \ %{_datadir}/%{name}/bios.bin %endif +%files user -f %{name}.user + %changelog +* Wed Mar 19 2025 wangziliang - 11:8.2.0-30 +- add user-mode emulator package + * Fri Feb 21 2025 Jiabo Feng - 11:8.2.0-29 - target/i386: csv: Support inject secret for CSV3 guest only if the extension is enabled - target/i386: csv: Support load kernel hashes for CSV3 guest only if the extension is enabled -- Gitee