[{"id":3673217,"web_url":"http://patchwork.ozlabs.org/comment/3673217/","msgid":"<7d3db657-510d-48af-be69-66b66627aff8@tls.msk.ru>","list_archive_url":null,"date":"2026-04-03T16:36:02","subject":"Re: [PATCH for-11.0 5/6] qom: Restrict compat properties API to\n system emulation","submitter":{"id":183,"url":"http://patchwork.ozlabs.org/api/people/183/","name":"Michael Tokarev","email":"mjt@tls.msk.ru"},"content":"On 03.04.2026 13:43, Michael Tokarev wrote:\n> From: Philippe Mathieu-Daudé <philmd@linaro.org>\n> \n> Move compat properties API definitions to their own file\n> unit, compile it only when system emulation is configured.\n> \n> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>\n> Reviewed-by: Michael Tokarev <mjt@tls.msk.ru>\n\nThis one breaks user-only build on a few architectures:\n\nhttps://buildd.debian.org/status/fetch.php?pkg=qemu&arch=amd64&ver=1%3A11.0.0%7Erc2%2Bds-1&stamp=1775233181&raw=0\nhttps://buildd.debian.org/status/fetch.php?pkg=qemu&arch=amd64&ver=1%3A11.0.0%7Erc2%2Bds-1&stamp=1775233181&raw=0\nhttps://buildd.debian.org/status/fetch.php?pkg=qemu&arch=ppc64el&ver=1%3A11.0.0%7Erc2%2Bds-1&stamp=1775233277&raw=0\n\ncc -m64  -o qemu-aarch64 libcommon.a.p/accel_accel-common.c.o \nlibcommon.a.p/hw_core_cpu-common.c.o \nlibcommon.a.p/hw_core_machine-smp.c.o libcommon.a.p/cpu-common.c.o \nlibcommon.a.p/page-vary-common.c.o libcommon.a.p/target-info.c.o \nlibcommon.a.p/disas_capstone.c.o libcommon.a.p/disas_disas-host.c.o \nlibcommon.a.p/disas_disas-target.c.o libcommon.a.p/disas_objdump.c.o \nlibcommon.a.p/disas_disas-common.c.o libcommon.a.p/fpu_softfloat.c.o \nlibcommon.a.p/meson-generated_.._gdbstub_gdbstub-xml.c.o \nlibcommon_arm.a.p/target_arm_mmuidx.c.o \nlibcommon_arm.a.p/target_arm_tcg_arith_helper.c.o \nlibcommon_arm.a.p/target_arm_tcg_crypto_helper.c.o \nlibuser.a.p/semihosting_user.c.o libuser.a.p/semihosting_guestfd.c.o \nlibuser.a.p/accel_accel-user.c.o libuser.a.p/accel_tcg_cpu-exec.c.o \nlibuser.a.p/accel_tcg_cpu-exec-common.c.o \nlibuser.a.p/accel_tcg_tcg-runtime.c.o \nlibuser.a.p/accel_tcg_tcg-runtime-gvec.c.o \nlibuser.a.p/accel_tcg_tb-maint.c.o libuser.a.p/accel_tcg_tcg-all.c.o \nlibuser.a.p/accel_tcg_tcg-stats.c.o \nlibuser.a.p/accel_tcg_translate-all.c.o \nlibuser.a.p/accel_tcg_translator.c.o libuser.a.p/accel_tcg_user-exec.c.o \nlibuser.a.p/accel_tcg_user-exec-stub.c.o \nlibuser.a.p/hw_core_cpu-user.c.o libuser.a.p/hw_core_qdev-user.c.o \nlibuser.a.p/gdbstub_gdbstub.c.o libuser.a.p/gdbstub_syscalls.c.o \nlibuser.a.p/gdbstub_user.c.o libuser.a.p/cpu-target.c.o \nlibuser.a.p/tcg_optimize.c.o libuser.a.p/tcg_region.c.o \nlibuser.a.p/tcg_tcg.c.o libuser.a.p/tcg_tcg-common.c.o \nlibuser.a.p/tcg_tcg-op.c.o libuser.a.p/tcg_tcg-op-ldst.c.o \nlibuser.a.p/tcg_tcg-op-gvec.c.o libuser.a.p/tcg_tcg-op-vec.c.o \nlibuser.a.p/tcg_perf.c.o libuser.a.p/common-user_safe-syscall.S.o \nlibuser.a.p/common-user_safe-syscall-error.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_gdbstub.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_cpu.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_cpregs-gcs.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_cpregs-pmu.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_debug_helper.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_helper.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_vfp_fpscr.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_el2-stubs.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_common-semi-target.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_tcg_debug.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_tcg_hflags.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_tcg_neon_helper.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_tcg_tlb_helper.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_tcg_vec_helper.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_tcg_vfp_helper.c.o \nlibqemu-aarch64-linux-user.a.p/linux-user_aarch64_cpu_loop.c.o \nlibqemu-aarch64-linux-user.a.p/linux-user_aarch64_elfload.c.o \nlibqemu-aarch64-linux-user.a.p/linux-user_aarch64_signal.c.o \nlibqemu-aarch64-linux-user.a.p/target-info-stub.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_cpu64.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_gdbstub64.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_tcg_cpu32.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_tcg_gengvec.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_tcg_translate.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_tcg_translate-m-nocp.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_tcg_translate-mve.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_tcg_translate-neon.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_tcg_translate-vfp.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_tcg_m_helper.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_tcg_mve_helper.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_tcg_op_helper.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_tcg_cpu64.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_tcg_gengvec64.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_tcg_translate-a64.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_tcg_translate-sve.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_tcg_translate-sme.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_tcg_helper-a64.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_tcg_mte_helper.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_tcg_pauth_helper.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_tcg_sme_helper.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_tcg_sve_helper.c.o \nlibqemu-aarch64-linux-user.a.p/target_arm_tcg_vec_helper64.c.o \nlibqemu-aarch64-linux-user.a.p/semihosting_syscalls.c.o \nlibqemu-aarch64-linux-user.a.p/semihosting_arm-compat-semi.c.o \nlibqemu-aarch64-linux-user.a.p/accel_accel-target.c.o \nlibqemu-aarch64-linux-user.a.p/gdbstub_user-target.c.o \nlibqemu-aarch64-linux-user.a.p/linux-user_elfload.c.o \nlibqemu-aarch64-linux-user.a.p/linux-user_exit.c.o \nlibqemu-aarch64-linux-user.a.p/linux-user_fd-trans.c.o \nlibqemu-aarch64-linux-user.a.p/linux-user_linuxload.c.o \nlibqemu-aarch64-linux-user.a.p/linux-user_main.c.o \nlibqemu-aarch64-linux-user.a.p/linux-user_mmap.c.o \nlibqemu-aarch64-linux-user.a.p/linux-user_signal.c.o \nlibqemu-aarch64-linux-user.a.p/linux-user_strace.c.o \nlibqemu-aarch64-linux-user.a.p/linux-user_syscall.c.o \nlibqemu-aarch64-linux-user.a.p/linux-user_thunk.c.o \nlibqemu-aarch64-linux-user.a.p/linux-user_uaccess.c.o \nlibqemu-aarch64-linux-user.a.p/linux-user_uname.c.o \nlibqemu-aarch64-linux-user.a.p/linux-user_flatload.c.o \nlibqemu-aarch64-linux-user.a.p/linux-user_semihost.c.o \nlibqemu-aarch64-linux-user.a.p/linux-user_aarch64_mte_user_helper.c.o \nlibhwcore.a.p/hw_core_bus.c.o libhwcore.a.p/hw_core_gpio.c.o \nlibhwcore.a.p/hw_core_qdev-properties.c.o libhwcore.a.p/hw_core_qdev.c.o \nlibhwcore.a.p/hw_core_resetcontainer.c.o \nlibhwcore.a.p/hw_core_resettable.c.o \nlibhwcore.a.p/hw_core_vmstate-if.c.o libhwcore.a.p/hw_core_irq.c.o \nlibhwcore.a.p/hw_core_clock.c.o libhwcore.a.p/hw_core_qdev-clock.c.o \nlibqom.a.p/qom_container.c.o libqom.a.p/qom_object.c.o \nlibqom.a.p/qom_object_interfaces.c.o libqom.a.p/qom_qom-qobject.c.o \nlibevent-loop-base.a.p/event-loop-base.c.o -Wl,--as-needed \n-Wl,--no-undefined -pie -static-pie -fstack-protector-strong \n-Wl,-z,relro -Wl,-z,now -g -O2 -Werror=implicit-function-declaration \n'-ffile-prefix-map=/build/reproducible-path/qemu-11.0.0~rc2+ds=.' \n-fstack-protector-strong -fstack-clash-protection -Wformat \n-Werror=format-security -fcf-protection -ffile-prefix-map=../../= \n-Wdate-time -D_FORTIFY_SOURCE=2 -DPROVIDE_STUBS_FOR_STATIC -Wl,-z,relro \n-Wl,--as-needed -Wl,-Map=%.map,--no-print-map-discarded \n-Wl,--start-group libqemuutil.a /usr/lib/x86_64-linux-gnu/libcapstone.a \n/usr/lib/x86_64-linux-gnu/libz.a -lm -pthread \n/usr/lib/x86_64-linux-gnu/libglib-2.0.a \n/usr/lib/gcc/x86_64-linux-gnu/15/libatomic.a \n/usr/lib/x86_64-linux-gnu/libsysprof-capture-4.a -Wl,-z,nodelete \n/usr/lib/x86_64-linux-gnu/libpcre2-8.a -Wl,--end-group\n/usr/bin/x86_64-linux-gnu-ld.bfd: \nlibhwcore.a.p/hw_core_qdev-properties.c.o: in function \n`qdev_prop_set_globals':\n./b/user/hw/core/qdev-properties.c:1021:(.text+0x1913): undefined \nreference to `object_apply_global_props'\n/usr/bin/x86_64-linux-gnu-ld.bfd: \n./b/user/hw/core/qdev-properties.c:1021:(.text+0x194a): undefined \nreference to `object_apply_global_props'\n/usr/bin/x86_64-linux-gnu-ld.bfd: libhwcore.a.p/hw_core_qdev.c.o: in \nfunction `device_post_init':\n./b/user/hw/core/qdev.c:689:(.text+0x3ee): undefined reference to \n`object_apply_compat_props'\ncollect2: error: ld returned 1 exit status\n[1743/1778] cc -m64  -o qemu-aarch64_be \nlibcommon.a.p/accel_accel-common.c.o \nlibcommon.a.p/hw_core_cpu-common.c.o \nlibcommon.a.p/hw_core_machine-smp.c.o libcommon.a.p/cpu-common.c.o \nlibcommon.a.p/page-vary-common.c.o libcommon.a.p/target-info.c.o \nlibcommon.a.p/disas_capstone.c.o libcommon.a.p/disas_disas-host.c.o \nlibcommon.a.p/disas_disas-target.c.o libcommon.a.p/disas_objdump.c.o \nlibcommon.a.p/disas_disas-common.c.o libcommon.a.p/fpu_softfloat.c.o \nlibcommon.a.p/meson-generated_.._gdbstub_gdbstub-xml.c.o \nlibcommon_arm.a.p/target_arm_mmuidx.c.o \nlibcommon_arm.a.p/target_arm_tcg_arith_helper.c.o \nlibcommon_arm.a.p/target_arm_tcg_crypto_helper.c.o \nlibuser.a.p/semihosting_user.c.o libuser.a.p/semihosting_guestfd.c.o \nlibuser.a.p/accel_accel-user.c.o libuser.a.p/accel_tcg_cpu-exec.c.o \nlibuser.a.p/accel_tcg_cpu-exec-common.c.o \nlibuser.a.p/accel_tcg_tcg-runtime.c.o \nlibuser.a.p/accel_tcg_tcg-runtime-gvec.c.o \nlibuser.a.p/accel_tcg_tb-maint.c.o libuser.a.p/accel_tcg_tcg-all.c.o \nlibuser.a.p/accel_tcg_tcg-stats.c.o \nlibuser.a.p/accel_tcg_translate-all.c.o \nlibuser.a.p/accel_tcg_translator.c.o libuser.a.p/accel_tcg_user-exec.c.o \nlibuser.a.p/accel_tcg_user-exec-stub.c.o \nlibuser.a.p/hw_core_cpu-user.c.o libuser.a.p/hw_core_qdev-user.c.o \nlibuser.a.p/gdbstub_gdbstub.c.o libuser.a.p/gdbstub_syscalls.c.o \nlibuser.a.p/gdbstub_user.c.o libuser.a.p/cpu-target.c.o \nlibuser.a.p/tcg_optimize.c.o libuser.a.p/tcg_region.c.o \nlibuser.a.p/tcg_tcg.c.o libuser.a.p/tcg_tcg-common.c.o \nlibuser.a.p/tcg_tcg-op.c.o libuser.a.p/tcg_tcg-op-ldst.c.o \nlibuser.a.p/tcg_tcg-op-gvec.c.o libuser.a.p/tcg_tcg-op-vec.c.o \nlibuser.a.p/tcg_perf.c.o libuser.a.p/common-user_safe-syscall.S.o \nlibuser.a.p/common-user_safe-syscall-error.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_gdbstub.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_cpu.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_cpregs-gcs.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_cpregs-pmu.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_debug_helper.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_helper.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_vfp_fpscr.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_el2-stubs.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_common-semi-target.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_debug.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_hflags.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_neon_helper.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_tlb_helper.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_vec_helper.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_vfp_helper.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_aarch64_cpu_loop.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_aarch64_elfload.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_aarch64_signal.c.o \nlibqemu-aarch64_be-linux-user.a.p/target-info-stub.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_cpu64.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_gdbstub64.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_cpu32.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_gengvec.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_translate.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_translate-m-nocp.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_translate-mve.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_translate-neon.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_translate-vfp.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_m_helper.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_mve_helper.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_op_helper.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_cpu64.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_gengvec64.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_translate-a64.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_translate-sve.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_translate-sme.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_helper-a64.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_mte_helper.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_pauth_helper.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_sme_helper.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_sve_helper.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_vec_helper64.c.o \nlibqemu-aarch64_be-linux-user.a.p/semihosting_syscalls.c.o \nlibqemu-aarch64_be-linux-user.a.p/semihosting_arm-compat-semi.c.o \nlibqemu-aarch64_be-linux-user.a.p/accel_accel-target.c.o \nlibqemu-aarch64_be-linux-user.a.p/gdbstub_user-target.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_elfload.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_exit.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_fd-trans.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_linuxload.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_main.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_mmap.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_signal.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_strace.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_syscall.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_thunk.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_uaccess.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_uname.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_flatload.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_semihost.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_aarch64_mte_user_helper.c.o \nlibhwcore.a.p/hw_core_bus.c.o libhwcore.a.p/hw_core_gpio.c.o \nlibhwcore.a.p/hw_core_qdev-properties.c.o libhwcore.a.p/hw_core_qdev.c.o \nlibhwcore.a.p/hw_core_resetcontainer.c.o \nlibhwcore.a.p/hw_core_resettable.c.o \nlibhwcore.a.p/hw_core_vmstate-if.c.o libhwcore.a.p/hw_core_irq.c.o \nlibhwcore.a.p/hw_core_clock.c.o libhwcore.a.p/hw_core_qdev-clock.c.o \nlibqom.a.p/qom_container.c.o libqom.a.p/qom_object.c.o \nlibqom.a.p/qom_object_interfaces.c.o libqom.a.p/qom_qom-qobject.c.o \nlibevent-loop-base.a.p/event-loop-base.c.o -Wl,--as-needed \n-Wl,--no-undefined -pie -static-pie -fstack-protector-strong \n-Wl,-z,relro -Wl,-z,now -g -O2 -Werror=implicit-function-declaration \n'-ffile-prefix-map=/build/reproducible-path/qemu-11.0.0~rc2+ds=.' \n-fstack-protector-strong -fstack-clash-protection -Wformat \n-Werror=format-security -fcf-protection -ffile-prefix-map=../../= \n-Wdate-time -D_FORTIFY_SOURCE=2 -DPROVIDE_STUBS_FOR_STATIC -Wl,-z,relro \n-Wl,--as-needed -Wl,-Map=%.map,--no-print-map-discarded \n-Wl,--start-group libqemuutil.a /usr/lib/x86_64-linux-gnu/libcapstone.a \n/usr/lib/x86_64-linux-gnu/libz.a -lm -pthread \n/usr/lib/x86_64-linux-gnu/libglib-2.0.a \n/usr/lib/gcc/x86_64-linux-gnu/15/libatomic.a \n/usr/lib/x86_64-linux-gnu/libsysprof-capture-4.a -Wl,-z,nodelete \n/usr/lib/x86_64-linux-gnu/libpcre2-8.a -Wl,--end-group\nFAILED: [code=1] qemu-aarch64_be\ncc -m64  -o qemu-aarch64_be libcommon.a.p/accel_accel-common.c.o \nlibcommon.a.p/hw_core_cpu-common.c.o \nlibcommon.a.p/hw_core_machine-smp.c.o libcommon.a.p/cpu-common.c.o \nlibcommon.a.p/page-vary-common.c.o libcommon.a.p/target-info.c.o \nlibcommon.a.p/disas_capstone.c.o libcommon.a.p/disas_disas-host.c.o \nlibcommon.a.p/disas_disas-target.c.o libcommon.a.p/disas_objdump.c.o \nlibcommon.a.p/disas_disas-common.c.o libcommon.a.p/fpu_softfloat.c.o \nlibcommon.a.p/meson-generated_.._gdbstub_gdbstub-xml.c.o \nlibcommon_arm.a.p/target_arm_mmuidx.c.o \nlibcommon_arm.a.p/target_arm_tcg_arith_helper.c.o \nlibcommon_arm.a.p/target_arm_tcg_crypto_helper.c.o \nlibuser.a.p/semihosting_user.c.o libuser.a.p/semihosting_guestfd.c.o \nlibuser.a.p/accel_accel-user.c.o libuser.a.p/accel_tcg_cpu-exec.c.o \nlibuser.a.p/accel_tcg_cpu-exec-common.c.o \nlibuser.a.p/accel_tcg_tcg-runtime.c.o \nlibuser.a.p/accel_tcg_tcg-runtime-gvec.c.o \nlibuser.a.p/accel_tcg_tb-maint.c.o libuser.a.p/accel_tcg_tcg-all.c.o \nlibuser.a.p/accel_tcg_tcg-stats.c.o \nlibuser.a.p/accel_tcg_translate-all.c.o \nlibuser.a.p/accel_tcg_translator.c.o libuser.a.p/accel_tcg_user-exec.c.o \nlibuser.a.p/accel_tcg_user-exec-stub.c.o \nlibuser.a.p/hw_core_cpu-user.c.o libuser.a.p/hw_core_qdev-user.c.o \nlibuser.a.p/gdbstub_gdbstub.c.o libuser.a.p/gdbstub_syscalls.c.o \nlibuser.a.p/gdbstub_user.c.o libuser.a.p/cpu-target.c.o \nlibuser.a.p/tcg_optimize.c.o libuser.a.p/tcg_region.c.o \nlibuser.a.p/tcg_tcg.c.o libuser.a.p/tcg_tcg-common.c.o \nlibuser.a.p/tcg_tcg-op.c.o libuser.a.p/tcg_tcg-op-ldst.c.o \nlibuser.a.p/tcg_tcg-op-gvec.c.o libuser.a.p/tcg_tcg-op-vec.c.o \nlibuser.a.p/tcg_perf.c.o libuser.a.p/common-user_safe-syscall.S.o \nlibuser.a.p/common-user_safe-syscall-error.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_gdbstub.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_cpu.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_cpregs-gcs.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_cpregs-pmu.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_debug_helper.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_helper.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_vfp_fpscr.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_el2-stubs.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_common-semi-target.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_debug.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_hflags.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_neon_helper.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_tlb_helper.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_vec_helper.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_vfp_helper.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_aarch64_cpu_loop.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_aarch64_elfload.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_aarch64_signal.c.o \nlibqemu-aarch64_be-linux-user.a.p/target-info-stub.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_cpu64.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_gdbstub64.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_cpu32.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_gengvec.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_translate.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_translate-m-nocp.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_translate-mve.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_translate-neon.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_translate-vfp.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_m_helper.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_mve_helper.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_op_helper.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_cpu64.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_gengvec64.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_translate-a64.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_translate-sve.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_translate-sme.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_helper-a64.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_mte_helper.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_pauth_helper.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_sme_helper.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_sve_helper.c.o \nlibqemu-aarch64_be-linux-user.a.p/target_arm_tcg_vec_helper64.c.o \nlibqemu-aarch64_be-linux-user.a.p/semihosting_syscalls.c.o \nlibqemu-aarch64_be-linux-user.a.p/semihosting_arm-compat-semi.c.o \nlibqemu-aarch64_be-linux-user.a.p/accel_accel-target.c.o \nlibqemu-aarch64_be-linux-user.a.p/gdbstub_user-target.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_elfload.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_exit.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_fd-trans.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_linuxload.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_main.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_mmap.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_signal.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_strace.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_syscall.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_thunk.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_uaccess.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_uname.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_flatload.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_semihost.c.o \nlibqemu-aarch64_be-linux-user.a.p/linux-user_aarch64_mte_user_helper.c.o \nlibhwcore.a.p/hw_core_bus.c.o libhwcore.a.p/hw_core_gpio.c.o \nlibhwcore.a.p/hw_core_qdev-properties.c.o libhwcore.a.p/hw_core_qdev.c.o \nlibhwcore.a.p/hw_core_resetcontainer.c.o \nlibhwcore.a.p/hw_core_resettable.c.o \nlibhwcore.a.p/hw_core_vmstate-if.c.o libhwcore.a.p/hw_core_irq.c.o \nlibhwcore.a.p/hw_core_clock.c.o libhwcore.a.p/hw_core_qdev-clock.c.o \nlibqom.a.p/qom_container.c.o libqom.a.p/qom_object.c.o \nlibqom.a.p/qom_object_interfaces.c.o libqom.a.p/qom_qom-qobject.c.o \nlibevent-loop-base.a.p/event-loop-base.c.o -Wl,--as-needed \n-Wl,--no-undefined -pie -static-pie -fstack-protector-strong \n-Wl,-z,relro -Wl,-z,now -g -O2 -Werror=implicit-function-declaration \n'-ffile-prefix-map=/build/reproducible-path/qemu-11.0.0~rc2+ds=.' \n-fstack-protector-strong -fstack-clash-protection -Wformat \n-Werror=format-security -fcf-protection -ffile-prefix-map=../../= \n-Wdate-time -D_FORTIFY_SOURCE=2 -DPROVIDE_STUBS_FOR_STATIC -Wl,-z,relro \n-Wl,--as-needed -Wl,-Map=%.map,--no-print-map-discarded \n-Wl,--start-group libqemuutil.a /usr/lib/x86_64-linux-gnu/libcapstone.a \n/usr/lib/x86_64-linux-gnu/libz.a -lm -pthread \n/usr/lib/x86_64-linux-gnu/libglib-2.0.a \n/usr/lib/gcc/x86_64-linux-gnu/15/libatomic.a \n/usr/lib/x86_64-linux-gnu/libsysprof-capture-4.a -Wl,-z,nodelete \n/usr/lib/x86_64-linux-gnu/libpcre2-8.a -Wl,--end-group\n/usr/bin/x86_64-linux-gnu-ld.bfd: \nlibhwcore.a.p/hw_core_qdev-properties.c.o: in function \n`qdev_prop_set_globals':\n./b/user/hw/core/qdev-properties.c:1021:(.text+0x1913): undefined \nreference to `object_apply_global_props'\n/usr/bin/x86_64-linux-gnu-ld.bfd: \n./b/user/hw/core/qdev-properties.c:1021:(.text+0x194a): undefined \nreference to `object_apply_global_props'\n/usr/bin/x86_64-linux-gnu-ld.bfd: libhwcore.a.p/hw_core_qdev.c.o: in \nfunction `device_post_init':\n./b/user/hw/core/qdev.c:689:(.text+0x3ee): undefined reference to \n`object_apply_compat_props'\ncollect2: error: ld returned 1 exit status\n\nSo apparently something else is needed here.\n\nIt looks like this patchset is a bit more difficult.\n\nI'll dig deeper.\n\nThnks,\n\n/mjt\n\n> ---\n>   qom/compat-properties.c | 116 ++++++++++++++++++++++++++++++++++++++++\n>   qom/meson.build         |   3 ++\n>   qom/object.c            | 100 ----------------------------------\n>   3 files changed, 119 insertions(+), 100 deletions(-)\n>   create mode 100644 qom/compat-properties.c\n> \n> diff --git a/qom/compat-properties.c b/qom/compat-properties.c\n> new file mode 100644\n> index 0000000000..f8d9b0036a\n> --- /dev/null\n> +++ b/qom/compat-properties.c\n> @@ -0,0 +1,116 @@\n> +/*\n> + * QEMU Object Model\n> + *\n> + * Copyright IBM, Corp. 2011\n> + *\n> + * Authors:\n> + *  Anthony Liguori   <aliguori@us.ibm.com>\n> + *\n> + * SPDX-License-Identifier: GPL-2.0-or-later\n> + */\n> +\n> +#include \"qemu/osdep.h\"\n> +#include \"qapi/error.h\"\n> +#include \"qom/compat-properties.h\"\n> +#include \"qom/qom-qobject.h\"\n> +#include \"hw/core/qdev.h\"\n> +\n> +bool object_apply_global_props(Object *obj, const GPtrArray *props,\n> +                               Error **errp)\n> +{\n> +    int i;\n> +\n> +    if (!props) {\n> +        return true;\n> +    }\n> +\n> +    for (i = 0; i < props->len; i++) {\n> +        GlobalProperty *p = g_ptr_array_index(props, i);\n> +        Error *err = NULL;\n> +\n> +        if (object_dynamic_cast(obj, p->driver) == NULL) {\n> +            continue;\n> +        }\n> +        if (p->optional && !object_property_find(obj, p->property)) {\n> +            continue;\n> +        }\n> +        p->used = true;\n> +        if (!object_property_parse(obj, p->property, p->value, &err)) {\n> +            error_prepend(&err, \"can't apply global %s.%s=%s: \",\n> +                          p->driver, p->property, p->value);\n> +            /*\n> +             * If errp != NULL, propagate error and return.\n> +             * If errp == NULL, report a warning, but keep going\n> +             * with the remaining globals.\n> +             */\n> +            if (errp) {\n> +                error_propagate(errp, err);\n> +                return false;\n> +            } else {\n> +                warn_report_err(err);\n> +            }\n> +        }\n> +    }\n> +\n> +    return true;\n> +}\n> +\n> +/*\n> + * Global property defaults\n> + * Slot 0: accelerator's global property defaults\n> + * Slot 1: machine's global property defaults\n> + * Slot 2: global properties from legacy command line option\n> + * Each is a GPtrArray of GlobalProperty.\n> + * Applied in order, later entries override earlier ones.\n> + */\n> +static GPtrArray *object_compat_props[3];\n> +\n> +/*\n> + * Retrieve @GPtrArray for global property defined with options\n> + * other than \"-global\".  These are generally used for syntactic\n> + * sugar and legacy command line options.\n> + */\n> +void object_register_sugar_prop(const char *driver, const char *prop,\n> +                                const char *value, bool optional)\n> +{\n> +    GlobalProperty *g;\n> +    if (!object_compat_props[2]) {\n> +        object_compat_props[2] = g_ptr_array_new();\n> +    }\n> +    g = g_new0(GlobalProperty, 1);\n> +    g->driver = g_strdup(driver);\n> +    g->property = g_strdup(prop);\n> +    g->value = g_strdup(value);\n> +    g->optional = optional;\n> +    g_ptr_array_add(object_compat_props[2], g);\n> +}\n> +\n> +/*\n> + * Set machine's global property defaults to @compat_props.\n> + * May be called at most once.\n> + */\n> +void object_set_machine_compat_props(GPtrArray *compat_props)\n> +{\n> +    assert(!object_compat_props[1]);\n> +    object_compat_props[1] = compat_props;\n> +}\n> +\n> +/*\n> + * Set accelerator's global property defaults to @compat_props.\n> + * May be called at most once.\n> + */\n> +void object_set_accelerator_compat_props(GPtrArray *compat_props)\n> +{\n> +    assert(!object_compat_props[0]);\n> +    object_compat_props[0] = compat_props;\n> +}\n> +\n> +void object_apply_compat_props(Object *obj)\n> +{\n> +    int i;\n> +\n> +    for (i = 0; i < ARRAY_SIZE(object_compat_props); i++) {\n> +        object_apply_global_props(obj, object_compat_props[i],\n> +                                  i == 2 ? &error_fatal : &error_abort);\n> +    }\n> +}\n> diff --git a/qom/meson.build b/qom/meson.build\n> index 8192243430..bd6f4aadd7 100644\n> --- a/qom/meson.build\n> +++ b/qom/meson.build\n> @@ -5,6 +5,9 @@ qom_ss.add(files(\n>     'object_interfaces.c',\n>     'qom-qobject.c',\n>   ))\n> +if have_system\n> +  qom_ss.add(files('compat-properties.c'))\n> +endif\n>   \n>   qmp_ss.add(files('qom-qmp-cmds.c'))\n>   system_ss.add(files('qom-hmp-cmds.c'))\n> diff --git a/qom/object.c b/qom/object.c\n> index 838b1d2b22..f00d659ef0 100644\n> --- a/qom/object.c\n> +++ b/qom/object.c\n> @@ -440,106 +440,6 @@ static void object_post_init_with_type(Object *obj, TypeImpl *ti)\n>       }\n>   }\n>   \n> -bool object_apply_global_props(Object *obj, const GPtrArray *props,\n> -                               Error **errp)\n> -{\n> -    int i;\n> -\n> -    if (!props) {\n> -        return true;\n> -    }\n> -\n> -    for (i = 0; i < props->len; i++) {\n> -        GlobalProperty *p = g_ptr_array_index(props, i);\n> -        Error *err = NULL;\n> -\n> -        if (object_dynamic_cast(obj, p->driver) == NULL) {\n> -            continue;\n> -        }\n> -        if (p->optional && !object_property_find(obj, p->property)) {\n> -            continue;\n> -        }\n> -        p->used = true;\n> -        if (!object_property_parse(obj, p->property, p->value, &err)) {\n> -            error_prepend(&err, \"can't apply global %s.%s=%s: \",\n> -                          p->driver, p->property, p->value);\n> -            /*\n> -             * If errp != NULL, propagate error and return.\n> -             * If errp == NULL, report a warning, but keep going\n> -             * with the remaining globals.\n> -             */\n> -            if (errp) {\n> -                error_propagate(errp, err);\n> -                return false;\n> -            } else {\n> -                warn_report_err(err);\n> -            }\n> -        }\n> -    }\n> -\n> -    return true;\n> -}\n> -\n> -/*\n> - * Global property defaults\n> - * Slot 0: accelerator's global property defaults\n> - * Slot 1: machine's global property defaults\n> - * Slot 2: global properties from legacy command line option\n> - * Each is a GPtrArray of GlobalProperty.\n> - * Applied in order, later entries override earlier ones.\n> - */\n> -static GPtrArray *object_compat_props[3];\n> -\n> -/*\n> - * Retrieve @GPtrArray for global property defined with options\n> - * other than \"-global\".  These are generally used for syntactic\n> - * sugar and legacy command line options.\n> - */\n> -void object_register_sugar_prop(const char *driver, const char *prop,\n> -                                const char *value, bool optional)\n> -{\n> -    GlobalProperty *g;\n> -    if (!object_compat_props[2]) {\n> -        object_compat_props[2] = g_ptr_array_new();\n> -    }\n> -    g = g_new0(GlobalProperty, 1);\n> -    g->driver = g_strdup(driver);\n> -    g->property = g_strdup(prop);\n> -    g->value = g_strdup(value);\n> -    g->optional = optional;\n> -    g_ptr_array_add(object_compat_props[2], g);\n> -}\n> -\n> -/*\n> - * Set machine's global property defaults to @compat_props.\n> - * May be called at most once.\n> - */\n> -void object_set_machine_compat_props(GPtrArray *compat_props)\n> -{\n> -    assert(!object_compat_props[1]);\n> -    object_compat_props[1] = compat_props;\n> -}\n> -\n> -/*\n> - * Set accelerator's global property defaults to @compat_props.\n> - * May be called at most once.\n> - */\n> -void object_set_accelerator_compat_props(GPtrArray *compat_props)\n> -{\n> -    assert(!object_compat_props[0]);\n> -    object_compat_props[0] = compat_props;\n> -}\n> -\n> -void object_apply_compat_props(Object *obj)\n> -{\n> -    int i;\n> -\n> -    for (i = 0; i < ARRAY_SIZE(object_compat_props); i++) {\n> -        object_apply_global_props(obj, object_compat_props[i],\n> -                                  i == 2 ? &error_fatal : &error_abort);\n> -    }\n> -}\n> -\n>   static void object_class_property_init_all(Object *obj)\n>   {\n>       ObjectPropertyIterator iter;","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n secure) header.d=tls.msk.ru header.i=@tls.msk.ru header.a=rsa-sha256\n header.s=202602 header.b=Ufhfyg9Z;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from lists.gnu.org (lists.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fnPWR5RL1z1yCs\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 04 Apr 2026 03:36:50 +1100 (AEDT)","from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1w8hVH-00079s-KO; Fri, 03 Apr 2026 12:36:15 -0400","from eggs.gnu.org ([2001:470:142:3::10])\n by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <mjt@tls.msk.ru>) id 1w8hVE-000796-0S\n for qemu-devel@nongnu.org; Fri, 03 Apr 2026 12:36:13 -0400","from isrv.corpit.ru ([212.248.84.144])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <mjt@tls.msk.ru>) id 1w8hV9-0002CZ-Jj\n for qemu-devel@nongnu.org; Fri, 03 Apr 2026 12:36:11 -0400","from [192.168.177.146] (mjtthink.wg.tls.msk.ru [192.168.177.146])\n by isrv.corpit.ru (Postfix) with ESMTP id BCE5D19A8D8;\n Fri, 03 Apr 2026 19:35:24 +0300 (MSK)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=tls.msk.ru; s=202602;\n t=1775234124; bh=ZygCmhJ6FGimZGUaRCh/LVeW2TF2mti+4hdr6c6OXvg=;\n h=Date:Subject:To:Cc:References:From:In-Reply-To;\n b=Ufhfyg9ZDTk9Yivc0xT+1Q4Q9/5KvV7iiKpirwH0AaBxW5FWEa1wm2tYIFvGaGZl/\n bHFvj5NGxsJFi8/PhW1387h0XesB53DJWhYtWMls5KyXuYB7kuaA/cEVWhImbW3HXC\n YpcPKaFAAJpLacpsKFpu2RNYS+Ys1tWHkVeLe/zT2Ek+rtIUF56nnBBgTh2+SUEgDX\n sefqC/5KvijR3Ne0gvpYQbATI3QwNpss7iEAusXxYrPxpUXzOK6uHNtBzWmMP6UaGf\n PFE2IoxhrZz9U6AbUN+S0OyGGg4ZMr8+bj/5ZjKtzgW2JsvM1hAJmMigNhGGGYAVPb\n GVqslENbEHyKA==","Message-ID":"<7d3db657-510d-48af-be69-66b66627aff8@tls.msk.ru>","Date":"Fri, 3 Apr 2026 19:36:02 +0300","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH for-11.0 5/6] qom: Restrict compat properties API to\n system emulation","To":"qemu-devel@nongnu.org","Cc":"=?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= <philmd@linaro.org>","References":"<20260403104327.1163942-1-mjt@tls.msk.ru>\n <20260403104327.1163942-6-mjt@tls.msk.ru>","Content-Language":"en-US, ru-RU","From":"Michael Tokarev <mjt@tls.msk.ru>","Autocrypt":"addr=mjt@tls.msk.ru; keydata=\n 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","In-Reply-To":"<20260403104327.1163942-6-mjt@tls.msk.ru>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"8bit","Received-SPF":"pass client-ip=212.248.84.144; envelope-from=mjt@tls.msk.ru;\n helo=isrv.corpit.ru","X-Spam_score_int":"-19","X-Spam_score":"-2.0","X-Spam_bar":"--","X-Spam_report":"(-2.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1,\n RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001,\n RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=ham autolearn_force=no","X-Spam_action":"no action","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"qemu development <qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<https://lists.nongnu.org/archive/html/qemu-devel>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"}}]