Message ID | 20250313034524.3069690-1-richard.henderson@linaro.org (mailing list archive) |
---|---|
Headers | show |
Series | accel/tcg, codebase: Build once patches | expand |
Richard Henderson <richard.henderson@linaro.org> writes: > All this is working toward building accel/tcg/translator.c once, > but it got late and I decided to stop at a convenient milestone. > <snip> > > I know there is overlap with other in-flight patches, but it > seemed easiest to just start from master. I guess that was why the re-base fails with: [2210/6843] Compiling C object libcommon.a.p/hw_vfio_migration.c.o FAILED: libcommon.a.p/hw_vfio_migration.c.o cc -m64 -Ilibcommon.a.p -I../../common-user/host/x86_64 -I../../linux-user/include/host/x86_64 -I../../linux-user/include -Isubprojects/libvduse -I../../subprojects/libvduse -I/usr/include/capstone -I/usr/include/p11-kit-1 -I/usr/include/pixman-1 -I/usr/include/libpng16 -I/usr/include/spice-server -I/usr/include/spice-1 -I/usr/include/libusb-1.0 -I/usr/include/SDL2 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/gio-unix-2.0 -I/usr/include/slirp -I/usr/include/gtk-3.0 -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/freetype2 -I/usr/include/fribidi -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/x86_64-linux-gnu -I/usr/include/atk-1.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/vte-2.91 -I/usr/include/virgl -I/usr/include/cacard -I/usr/include/nss -I/usr/include/nspr -I/usr/include/PCSC -I/usr/include/pipewire-0.3 -I/usr/include/spa-0.2 -I/usr/include/fuse3 -I/usr/include/uuid -fdiagnostics-color=auto -Wall -Winvalid-pch -Werror -std=gnu11 -O2 -fstack-protector-strong -Wempty-body -Wendif-labels -Wexpansion-to-defined -Wformat-security -Wformat-y2k -Wignored-qualifiers -Wimplicit-fallthrough=2 -Winit-self -Wmissing-format-attribute -Wmissing-prototypes -Wnested-externs -Wold-style-declaration -Wold-style-definition -Wredundant-decls -Wshadow=local -Wstrict-prototypes -Wtype-limits -Wundef -Wvla -Wwrite-strings -Wno-missing-include-dirs -Wno-psabi -Wno-shift-negative-value -isystem /home/alex/lsrc/qemu.git/linux-headers -isystem linux-headers -iquote . -iquote /home/alex/lsrc/qemu.git -iquote /home/alex/lsrc/qemu.git/include -iquote /home/alex/lsrc/qemu.git/host/include/x86_64 -iquote /home/alex/lsrc/qemu.git/host/include/generic -iquote /home/alex/lsrc/qemu.git/tcg/i386 -pthread -mcx16 -msse2 -D_GNU_SOURCE -D_LARGEFILE_SOURCE -fno-strict-aliasing -fno-common -fwrapv -ftrivial-auto-var-init=zero -fzero-call-used-regs=used-gpr -fPIE -D_FILE_OFFSET_BITS=64 -D__USE_FILE_OFFSET64 -D__USE_LARGEFILE64 -DUSE_POSIX_ACLS=1 -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -DNCURSES_WIDECHAR=1 -D_REENTRANT -DSTRUCT_IOVEC_DEFINED -MD -MQ libcommon.a.p/hw_vfio_migration.c.o -MF libcommon.a.p/hw_vfio_migration.c.o.d -o libcommon.a.p/hw_vfio_migration.c.o -c ../../hw/vfio/migration.c In file included from ../../hw/vfio/migration.c:30: /home/alex/lsrc/qemu.git/include/system/ram_addr.h:22:10: fatal error: cpu.h: No such file or directory 22 | #include "cpu.h" | ^~~~~~~ compilation terminated. [2211/6843] Compiling C object libcommon.a.p/hw_vfio_iommufd.c.o FAILED: libcommon.a.p/hw_vfio_iommufd.c.o cc -m64 -Ilibcommon.a.p -I../../common-user/host/x86_64 -I../../linux-user/include/host/x86_64 -I../../linux-user/include -Isubprojects/libvduse -I../../subprojects/libvduse -I/usr/include/capstone -I/usr/include/p11-kit-1 -I/usr/include/pixman-1 -I/usr/include/libpng16 -I/usr/include/spice-server -I/usr/include/spice-1 -I/usr/include/libusb-1.0 -I/usr/include/SDL2 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/gio-unix-2.0 -I/usr/include/slirp -I/usr/include/gtk-3.0 -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/freetype2 -I/usr/include/fribidi -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/x86_64-linux-gnu -I/usr/include/atk-1.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/vte-2.91 -I/usr/include/virgl -I/usr/include/cacard -I/usr/include/nss -I/usr/include/nspr -I/usr/include/PCSC -I/usr/include/pipewire-0.3 -I/usr/include/spa-0.2 -I/usr/include/fuse3 -I/usr/include/uuid -fdiagnostics-color=auto -Wall -Winvalid-pch -Werror -std=gnu11 -O2 -fstack-protector-strong -Wempty-body -Wendif-labels -Wexpansion-to-defined -Wformat-security -Wformat-y2k -Wignored-qualifiers -Wimplicit-fallthrough=2 -Winit-self -Wmissing-format-attribute -Wmissing-prototypes -Wnested-externs -Wold-style-declaration -Wold-style-definition -Wredundant-decls -Wshadow=local -Wstrict-prototypes -Wtype-limits -Wundef -Wvla -Wwrite-strings -Wno-missing-include-dirs -Wno-psabi -Wno-shift-negative-value -isystem /home/alex/lsrc/qemu.git/linux-headers -isystem linux-headers -iquote . -iquote /home/alex/lsrc/qemu.git -iquote /home/alex/lsrc/qemu.git/include -iquote /home/alex/lsrc/qemu.git/host/include/x86_64 -iquote /home/alex/lsrc/qemu.git/host/include/generic -iquote /home/alex/lsrc/qemu.git/tcg/i386 -pthread -mcx16 -msse2 -D_GNU_SOURCE -D_LARGEFILE_SOURCE -fno-strict-aliasing -fno-common -fwrapv -ftrivial-auto-var-init=zero -fzero-call-used-regs=used-gpr -fPIE -D_FILE_OFFSET_BITS=64 -D__USE_FILE_OFFSET64 -D__USE_LARGEFILE64 -DUSE_POSIX_ACLS=1 -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -DNCURSES_WIDECHAR=1 -D_REENTRANT -DSTRUCT_IOVEC_DEFINED -MD -MQ libcommon.a.p/hw_vfio_iommufd.c.o -MF libcommon.a.p/hw_vfio_iommufd.c.o.d -o libcommon.a.p/hw_vfio_iommufd.c.o -c ../../hw/vfio/iommufd.c In file included from ../../hw/vfio/iommufd.c:28: /home/alex/lsrc/qemu.git/include/system/ram_addr.h:22:10: fatal error: cpu.h: No such file or directory 22 | #include "cpu.h" | ^~~~~~~ compilation terminated. I'll see if I can bisect...
On 3/12/25 20:44, Richard Henderson wrote: > All this is working toward building accel/tcg/translator.c once, > but it got late and I decided to stop at a convenient milestone. > > In the process, I discovered that we have already added files to > common_ss which indirectly depend on CONFIG_USER_ONLY. Sometimes > this is harmless, and sometimes it really is not. For instance, > plugin/api.c is affected by different translation-block.h layout. > Maybe it's finally a good reason to tackle user/system at the same time we make the rest of the files common. > The only solution I can see is to poison CONFIG_USER_ONLY outside > of specific contexts. I hoisted some existing magic in tcg/ and > gdbstub/ to build separate shared_libraries for user and system, > as that's the only way to add extra command-line -Defines. > It's a good approach (make common + poison is what prevent regressions and ensure we progress). Working on target code, I found the need to have a common-{arch} lib, allowing to share code between variants of a given arch (arm vs aarch64), with a specific define too. s/shared_libraries/static_libraries As you mention, it's the only way, static libs used in our meson is just a hack to apply flags to a set of files, and in the end, object files are aggregated to create a final binary, without any intermediate file. I guess that was the only way to "make it work" for a project lacking proper libraries in the first place. > Ideally, we would reuse the existing user_ss and system_ss source > sets for these new static_libraries. But in order for that to work, > we'd need to construct the configuration_data sets to apply, and it > wasn't immediately obvious what the correct sets would be. Getting > that wrong would silently omit files from the build, which could be > hard to diagnose. I thought it would be quicker and safer to create > new source sets with only unconditional files. > > I know there is overlap with other in-flight patches, but it > seemed easiest to just start from master. > It's probably the best way, even though we'll have rebase conflicts. Stacking series is something not convenient, a nightmare to apply, and does not scale when having several people working on the same topic. > > r~ > > > Richard Henderson (37): > accel/tcg: Build user-exec-stub.c once > accel/tcg: Build plugin-gen.c once > include/exec: Use vaddr for *_mmu guest memory access routines > include/exec: Split out cpu-ldst-common.h > include/exec: Inline *_mmuidx_ra memory operations > include/exec: Inline *_data_ra memory operations > include/exec: Inline *_data memory operations > include/exec: Inline *_code memory operations > accel/tcg: Perform aligned atomic reads in translator_ld > accel/tcg: Use cpu_ld*_code_mmu in translator.c > accel/tcg: Implement translator_ld*_end > accel/tcg: Remove mmap_lock/unlock from watchpoint.c > include/exec: Split out mmap-lock.h > include/system: Move exec/memory.h to system/memory.h > include/system: Move exec/address-spaces.h to system/address-spaces.h > include/system: Move exec/ioport.h to system/ioport.h > meson: Introduce top-level libuser_ss and libsystem_ss > gdbstub: Move syscalls.c out of common_ss > accel/tcg: Use libuser_ss and libsystem_ss > target/mips: Protect semihosting call with CONFIG_SEMIHOSTING > target/xtensa: Protect semihosting call with CONFIG_SEMIHOSTING > semihosting: Move user-only implementation out-of-line > include/system: Move exec/ram_addr.h to system/ram_addr.h > include/system: Move exec/ramblock.h to system/ramblock.h > common-user: Split out watchpoint-stub.c > hw/core: Move unconditional files to libsystem_ss, libuser_ss > system: Move watchpoint.c to libsystem_ss > plugins: Move api.c, core.c to libuser_ss, libsystem_ss > include/exec: Split out cpu-mmu-index.h > include/exec: Drop ifndef CONFIG_USER_ONLY from cpu-common.h > include/hw/core: Drop ifndef CONFIG_USER_ONLY from cpu.h > include/hw/intc: Remove ifndef CONFIG_USER_ONLY from armv7m_nvic.h > include/hw/s390x: Remove ifndef CONFIG_USER_ONLY in css.h > include/system: Remove ifndef CONFIG_USER_ONLY > include/qemu: Remove ifndef CONFIG_USER_ONLY from accel.h > target/riscv: Remove ifndef CONFIG_USER_ONLY from cpu_cfg.h > meson: Only allow CONFIG_USER_ONLY from certain source sets > > accel/tcg/atomic_template.h | 16 +- > accel/tcg/internal-target.h | 1 + > hw/arm/strongarm.h | 2 +- > hw/display/apple-gfx.h | 2 +- > hw/display/framebuffer.h | 2 +- > hw/display/vga_int.h | 4 +- > hw/hyperv/hv-balloon-our_range_memslots.h | 2 +- > hw/intc/ioapic_internal.h | 2 +- > hw/net/i82596.h | 4 +- > hw/net/pcnet.h | 2 +- > hw/s390x/ipl.h | 2 +- > hw/tpm/tpm_ppi.h | 2 +- > hw/usb/hcd-uhci.h | 2 +- > hw/vfio/pci.h | 2 +- > hw/virtio/vhost-iova-tree.h | 2 +- > include/exec/cpu-all.h | 9 +- > include/exec/cpu-common.h | 26 - > include/exec/cpu-ldst-common.h | 122 +++++ > include/exec/cpu-mmu-index.h | 33 ++ > include/exec/cpu_ldst.h | 540 +++++++++++++------- > include/exec/mmap-lock.h | 33 ++ > include/exec/page-protection.h | 22 - > include/exec/poison.h | 5 + > include/exec/translator.h | 50 +- > include/hw/acpi/acpi.h | 2 +- > include/hw/acpi/ich9_tco.h | 2 +- > include/hw/arm/fsl-imx25.h | 2 +- > include/hw/arm/fsl-imx31.h | 2 +- > include/hw/arm/fsl-imx6.h | 2 +- > include/hw/arm/fsl-imx6ul.h | 2 +- > include/hw/arm/omap.h | 2 +- > include/hw/arm/stm32l4x5_soc.h | 2 +- > include/hw/boards.h | 2 +- > include/hw/char/parallel-isa.h | 2 +- > include/hw/char/parallel.h | 2 +- > include/hw/char/riscv_htif.h | 2 +- > include/hw/char/serial-mm.h | 2 +- > include/hw/char/serial.h | 2 +- > include/hw/core/cpu.h | 33 -- > include/hw/display/macfb.h | 2 +- > include/hw/dma/i8257.h | 2 +- > include/hw/fsi/aspeed_apb2opb.h | 2 +- > include/hw/fsi/cfam.h | 2 +- > include/hw/fsi/fsi-master.h | 2 +- > include/hw/fsi/fsi.h | 2 +- > include/hw/fsi/lbus.h | 2 +- > include/hw/gpio/npcm7xx_gpio.h | 2 +- > include/hw/hw.h | 4 - > include/hw/i2c/npcm7xx_smbus.h | 2 +- > include/hw/i2c/pm_smbus.h | 2 +- > include/hw/i386/apic_internal.h | 2 +- > include/hw/i386/x86.h | 2 +- > include/hw/ide/ahci.h | 2 +- > include/hw/ide/ide-bus.h | 2 +- > include/hw/intc/armv7m_nvic.h | 14 - > include/hw/ipmi/ipmi.h | 2 +- > include/hw/isa/apm.h | 2 +- > include/hw/isa/isa.h | 4 +- > include/hw/m68k/q800.h | 2 +- > include/hw/mem/npcm7xx_mc.h | 2 +- > include/hw/mem/pc-dimm.h | 2 +- > include/hw/mips/mips.h | 2 +- > include/hw/misc/auxbus.h | 2 +- > include/hw/misc/ivshmem-flat.h | 2 +- > include/hw/misc/lasi.h | 2 +- > include/hw/misc/mac_via.h | 2 +- > include/hw/misc/npcm7xx_mft.h | 2 +- > include/hw/misc/npcm_clk.h | 2 +- > include/hw/misc/npcm_gcr.h | 2 +- > include/hw/misc/pvpanic.h | 2 +- > include/hw/net/dp8393x.h | 2 +- > include/hw/net/msf2-emac.h | 2 +- > include/hw/nubus/nubus.h | 2 +- > include/hw/nvram/mac_nvram.h | 2 +- > include/hw/nvram/npcm7xx_otp.h | 2 +- > include/hw/pci-host/fsl_imx8m_phy.h | 2 +- > include/hw/pci-host/pam.h | 2 +- > include/hw/pci-host/remote.h | 2 +- > include/hw/pci/pci.h | 2 +- > include/hw/pci/pcie_host.h | 2 +- > include/hw/pci/shpc.h | 2 +- > include/hw/ppc/mac_dbdma.h | 2 +- > include/hw/ppc/pnv_lpc.h | 2 +- > include/hw/ppc/pnv_occ.h | 2 +- > include/hw/ppc/pnv_sbe.h | 2 +- > include/hw/ppc/pnv_xscom.h | 2 +- > include/hw/ppc/ppc4xx.h | 2 +- > include/hw/ppc/vof.h | 4 +- > include/hw/ppc/xics.h | 2 +- > include/hw/register.h | 2 +- > include/hw/remote/proxy-memory-listener.h | 2 +- > include/hw/s390x/css.h | 2 - > include/hw/sh4/sh_intc.h | 2 +- > include/hw/southbridge/ich9.h | 2 +- > include/hw/sysbus.h | 2 +- > include/hw/timer/npcm7xx_timer.h | 2 +- > include/hw/tricore/triboard.h | 2 +- > include/hw/tricore/tricore.h | 2 +- > include/hw/usb.h | 2 +- > include/hw/vfio/vfio-common.h | 2 +- > include/hw/vfio/vfio-container-base.h | 2 +- > include/hw/virtio/vhost-backend.h | 2 +- > include/hw/virtio/vhost.h | 2 +- > include/hw/virtio/virtio.h | 2 +- > include/hw/xen/xen-pvh-common.h | 2 +- > include/hw/xtensa/mx_pic.h | 2 +- > include/qemu/accel.h | 10 +- > include/qemu/iova-tree.h | 2 +- > include/qemu/reserved-region.h | 2 +- > include/semihosting/semihost.h | 29 +- > include/{exec => system}/address-spaces.h | 8 +- > include/system/confidential-guest-support.h | 4 - > include/system/cpu-timers.h | 2 +- > include/system/dma.h | 4 +- > include/system/hostmem.h | 2 +- > include/{exec => system}/ioport.h | 8 +- > include/system/kvm_int.h | 2 +- > include/{exec => system}/memory.h | 8 +- > include/system/qtest.h | 2 - > include/{exec => system}/ram_addr.h | 9 +- > include/{exec => system}/ramblock.h | 9 +- > include/system/replay.h | 4 - > include/system/vhost-user-backend.h | 2 +- > include/system/xen.h | 4 - > migration/rdma.h | 2 +- > rust/wrapper.h | 4 +- > target/i386/hvf/vmx.h | 2 +- > target/loongarch/cpu.h | 2 +- > target/mips/cpu.h | 2 +- > target/riscv/cpu_cfg.h | 2 - > accel/hvf/hvf-accel-ops.c | 2 +- > accel/kvm/kvm-all.c | 4 +- > accel/tcg/cpu-exec.c | 1 + > accel/tcg/cputlb.c | 40 +- > accel/tcg/plugin-gen.c | 13 +- > accel/tcg/tb-maint.c | 1 + > accel/tcg/translate-all.c | 3 +- > accel/tcg/translator.c | 120 +++-- > accel/tcg/user-exec.c | 48 +- > accel/tcg/watchpoint.c | 3 - > backends/tpm/tpm_util.c | 2 +- > block/blkio.c | 4 +- > common-user/watchpoint-stub.c | 28 + > disas/disas-mon.c | 2 +- > hw/acpi/erst.c | 4 +- > hw/arm/aspeed_ast10x0.c | 2 +- > hw/arm/bananapi_m2u.c | 2 +- > hw/arm/collie.c | 2 +- > hw/arm/exynos4_boards.c | 2 +- > hw/arm/fsl-imx31.c | 2 +- > hw/arm/fsl-imx8mp.c | 2 +- > hw/arm/imx8mp-evk.c | 2 +- > hw/arm/integratorcp.c | 2 +- > hw/arm/kzm.c | 2 +- > hw/arm/microbit.c | 2 +- > hw/arm/mps2-tz.c | 2 +- > hw/arm/mps2.c | 2 +- > hw/arm/mps3r.c | 2 +- > hw/arm/msf2-soc.c | 2 +- > hw/arm/msf2-som.c | 2 +- > hw/arm/musca.c | 2 +- > hw/arm/omap1.c | 2 +- > hw/arm/omap_sx1.c | 2 +- > hw/arm/orangepi.c | 2 +- > hw/arm/stellaris.c | 2 +- > hw/arm/stm32f100_soc.c | 2 +- > hw/arm/stm32f205_soc.c | 2 +- > hw/arm/stm32f405_soc.c | 2 +- > hw/arm/stm32l4x5_soc.c | 2 +- > hw/avr/atmega.c | 4 +- > hw/block/fdc-isa.c | 2 +- > hw/block/fdc-sysbus.c | 2 +- > hw/char/goldfish_tty.c | 2 +- > hw/char/omap_uart.c | 2 +- > hw/char/riscv_htif.c | 2 +- > hw/core/cpu-system.c | 4 +- > hw/core/loader-fit.c | 2 +- > hw/core/loader.c | 2 +- > hw/core/null-machine.c | 2 +- > hw/core/sysbus.c | 2 +- > hw/display/edid-region.c | 2 +- > hw/display/virtio-gpu-udmabuf.c | 2 +- > hw/dma/rc4030.c | 2 +- > hw/hyperv/hv-balloon.c | 4 +- > hw/hyperv/hyperv.c | 4 +- > hw/i386/acpi-common.c | 2 +- > hw/i386/acpi-microvm.c | 2 +- > hw/i386/kvm/xen_evtchn.c | 2 +- > hw/i386/kvm/xen_gnttab.c | 2 +- > hw/i386/kvm/xen_overlay.c | 2 +- > hw/i386/pc_piix.c | 2 +- > hw/i386/sgx-epc.c | 2 +- > hw/i386/sgx.c | 2 +- > hw/i386/vapic.c | 2 +- > hw/ide/ahci-sysbus.c | 2 +- > hw/input/lasips2.c | 2 +- > hw/intc/loongarch_extioi.c | 2 +- > hw/intc/mips_gic.c | 2 +- > hw/intc/ompic.c | 2 +- > hw/intc/riscv_aplic.c | 2 +- > hw/intc/riscv_imsic.c | 2 +- > hw/loongarch/virt.c | 2 +- > hw/mem/memory-device.c | 2 +- > hw/microblaze/petalogix_ml605_mmu.c | 2 +- > hw/microblaze/petalogix_s3adsp1800_mmu.c | 2 +- > hw/microblaze/xlnx-zynqmp-pmu.c | 2 +- > hw/mips/mipssim.c | 2 +- > hw/misc/allwinner-h3-dramc.c | 2 +- > hw/misc/allwinner-r40-dramc.c | 2 +- > hw/misc/ivshmem-flat.c | 2 +- > hw/misc/mac_via.c | 2 +- > hw/net/i82596.c | 2 +- > hw/net/ne2000.c | 2 +- > hw/nvram/fw_cfg.c | 2 +- > hw/openrisc/openrisc_sim.c | 2 +- > hw/openrisc/virt.c | 2 +- > hw/pci-bridge/pci_bridge_dev.c | 2 +- > hw/pci-host/mv64361.c | 2 +- > hw/pci-host/remote.c | 2 +- > hw/ppc/pegasos2.c | 2 +- > hw/ppc/pnv_homer.c | 2 +- > hw/ppc/pnv_psi.c | 2 +- > hw/ppc/ppc405_uc.c | 2 +- > hw/ppc/ppc4xx_sdram.c | 2 +- > hw/ppc/prep_systemio.c | 2 +- > hw/ppc/rs6000_mc.c | 2 +- > hw/ppc/sam460ex.c | 2 +- > hw/ppc/spapr.c | 2 +- > hw/ppc/spapr_caps.c | 2 +- > hw/ppc/spapr_ovec.c | 2 +- > hw/ppc/spapr_pci.c | 2 +- > hw/ppc/vof.c | 2 +- > hw/remote/iommu.c | 4 +- > hw/remote/machine.c | 2 +- > hw/remote/memory.c | 2 +- > hw/remote/proxy-memory-listener.c | 4 +- > hw/remote/vfio-user-obj.c | 2 +- > hw/riscv/microblaze-v-generic.c | 2 +- > hw/riscv/opentitan.c | 2 +- > hw/riscv/shakti_c.c | 2 +- > hw/s390x/css.c | 2 +- > hw/s390x/s390-pci-inst.c | 2 +- > hw/s390x/s390-skeys.c | 2 +- > hw/s390x/s390-stattrib-kvm.c | 2 +- > hw/s390x/s390-stattrib.c | 2 +- > hw/s390x/s390-virtio-ccw.c | 2 +- > hw/s390x/virtio-ccw.c | 2 +- > hw/sparc/sun4m_iommu.c | 2 +- > hw/sparc64/sun4u_iommu.c | 2 +- > hw/timer/hpet.c | 2 +- > hw/timer/sh_timer.c | 2 +- > hw/tpm/tpm_crb.c | 2 +- > hw/vfio/ap.c | 2 +- > hw/vfio/ccw.c | 2 +- > hw/vfio/common.c | 6 +- > hw/vfio/container.c | 6 +- > hw/vfio/iommufd.c | 2 +- > hw/vfio/migration.c | 2 +- > hw/vfio/platform.c | 4 +- > hw/vfio/spapr.c | 4 +- > hw/virtio/vhost-user.c | 2 +- > hw/virtio/vhost-vdpa.c | 2 +- > hw/virtio/virtio-balloon.c | 2 +- > hw/virtio/virtio-bus.c | 2 +- > hw/virtio/virtio-mem.c | 2 +- > hw/xtensa/sim.c | 2 +- > hw/xtensa/virt.c | 2 +- > hw/xtensa/xtensa_memory.c | 2 +- > hw/xtensa/xtfpga.c | 2 +- > linux-user/arm/cpu_loop.c | 1 + > linux-user/elfload.c | 1 + > linux-user/flatload.c | 1 + > linux-user/mmap.c | 1 + > linux-user/syscall.c | 1 + > migration/dirtyrate.c | 4 +- > migration/file.c | 2 +- > migration/multifd-nocomp.c | 2 +- > migration/multifd-qatzip.c | 2 +- > migration/multifd-qpl.c | 2 +- > migration/multifd-uadk.c | 2 +- > migration/multifd-zero-page.c | 2 +- > migration/multifd-zlib.c | 2 +- > migration/multifd-zstd.c | 2 +- > migration/multifd.c | 2 +- > migration/postcopy-ram.c | 2 +- > migration/ram.c | 2 +- > migration/rdma.c | 2 +- > migration/savevm.c | 2 +- > monitor/hmp-cmds-target.c | 4 +- > monitor/hmp-cmds.c | 4 +- > semihosting/uaccess.c | 1 + > semihosting/user.c | 30 ++ > stubs/ram-block.c | 2 +- > system/dirtylimit.c | 2 +- > system/ioport.c | 6 +- > system/memory.c | 6 +- > system/memory_mapping.c | 4 +- > system/physmem.c | 6 +- > system/qtest.c | 4 +- > target/arm/gdbstub64.c | 3 + > target/arm/helper.c | 1 + > target/arm/hvf/hvf.c | 2 +- > target/arm/kvm.c | 2 +- > target/arm/tcg/mte_helper.c | 2 +- > target/avr/helper.c | 2 +- > target/hppa/mem_helper.c | 1 + > target/i386/cpu-apic.c | 2 +- > target/i386/cpu.c | 2 +- > target/i386/kvm/xen-emu.c | 2 +- > target/i386/nvmm/nvmm-all.c | 4 +- > target/i386/sev.c | 2 +- > target/i386/tcg/system/misc_helper.c | 2 +- > target/i386/tcg/system/tcg-cpu.c | 2 +- > target/i386/tcg/translate.c | 1 + > target/i386/whpx/whpx-all.c | 4 +- > target/loongarch/cpu_helper.c | 1 + > target/loongarch/kvm/kvm.c | 2 +- > target/microblaze/helper.c | 1 + > target/microblaze/mmu.c | 1 + > target/mips/cpu.c | 3 +- > target/openrisc/translate.c | 1 + > target/ppc/kvm.c | 2 +- > target/riscv/kvm/kvm-cpu.c | 2 +- > target/s390x/kvm/kvm.c | 2 +- > target/s390x/mmu_helper.c | 2 +- > target/s390x/sigp.c | 2 +- > target/s390x/tcg/excp_helper.c | 2 +- > target/sparc/cpu.c | 1 + > target/sparc/mmu_helper.c | 1 + > target/tricore/helper.c | 1 + > target/xtensa/cpu.c | 2 +- > target/xtensa/dbg_helper.c | 2 +- > target/xtensa/mmu_helper.c | 1 + > target/xtensa/translate.c | 13 +- > tests/qtest/fuzz/generic_fuzz.c | 4 +- > tests/qtest/fuzz/qos_fuzz.c | 2 +- > tests/qtest/fuzz/qtest_wrappers.c | 2 +- > tests/unit/test-resv-mem.c | 2 +- > ui/console.c | 2 +- > util/vfio-helpers.c | 2 +- > MAINTAINERS | 8 +- > accel/tcg/ldst_common.c.inc | 335 +----------- > accel/tcg/meson.build | 25 +- > common-user/meson.build | 1 + > docs/devel/memory.rst | 2 +- > gdbstub/meson.build | 36 +- > hw/core/meson.build | 4 +- > hw/display/apple-gfx.m | 2 +- > meson.build | 24 + > plugins/meson.build | 5 +- > scripts/analyze-inclusions | 2 +- > semihosting/meson.build | 2 + > system/meson.build | 5 +- > tcg/meson.build | 23 +- > 354 files changed, 1211 insertions(+), 1229 deletions(-) > create mode 100644 include/exec/cpu-ldst-common.h > create mode 100644 include/exec/cpu-mmu-index.h > create mode 100644 include/exec/mmap-lock.h > rename include/{exec => system}/address-spaces.h (89%) > rename include/{exec => system}/ioport.h (96%) > rename include/{exec => system}/memory.h (99%) > rename include/{exec => system}/ram_addr.h (99%) > rename include/{exec => system}/ramblock.h (96%) > create mode 100644 common-user/watchpoint-stub.c > create mode 100644 semihosting/user.c >
On 13/3/25 17:36, Pierrick Bouvier wrote: > On 3/12/25 20:44, Richard Henderson wrote: >> All this is working toward building accel/tcg/translator.c once, >> but it got late and I decided to stop at a convenient milestone. >> >> In the process, I discovered that we have already added files to >> common_ss which indirectly depend on CONFIG_USER_ONLY. Sometimes >> this is harmless, and sometimes it really is not. For instance, >> plugin/api.c is affected by different translation-block.h layout. >> > > Maybe it's finally a good reason to tackle user/system at the same time > we make the rest of the files common. > >> The only solution I can see is to poison CONFIG_USER_ONLY outside >> of specific contexts. I hoisted some existing magic in tcg/ and >> gdbstub/ to build separate shared_libraries for user and system, >> as that's the only way to add extra command-line -Defines. >> > > It's a good approach (make common + poison is what prevent regressions > and ensure we progress). > Working on target code, I found the need to have a common-{arch} lib, > allowing to share code between variants of a given arch (arm vs > aarch64), with a specific define too. Are really ARM & Aarch64 different architectures (QEMU wise)?
On 3/13/25 10:48, Philippe Mathieu-Daudé wrote: > On 13/3/25 17:36, Pierrick Bouvier wrote: >> On 3/12/25 20:44, Richard Henderson wrote: >>> All this is working toward building accel/tcg/translator.c once, >>> but it got late and I decided to stop at a convenient milestone. >>> >>> In the process, I discovered that we have already added files to >>> common_ss which indirectly depend on CONFIG_USER_ONLY. Sometimes >>> this is harmless, and sometimes it really is not. For instance, >>> plugin/api.c is affected by different translation-block.h layout. >>> >> >> Maybe it's finally a good reason to tackle user/system at the same time >> we make the rest of the files common. >> >>> The only solution I can see is to poison CONFIG_USER_ONLY outside >>> of specific contexts. I hoisted some existing magic in tcg/ and >>> gdbstub/ to build separate shared_libraries for user and system, >>> as that's the only way to add extra command-line -Defines. >>> >> >> It's a good approach (make common + poison is what prevent regressions >> and ensure we progress). >> Working on target code, I found the need to have a common-{arch} lib, >> allowing to share code between variants of a given arch (arm vs >> aarch64), with a specific define too. > > Are really ARM & Aarch64 different architectures (QEMU wise)? > Not really, but as long as we have #ifdef TARGET_AARCH64, the cu is duplicated, and it brings a lot of issues (symbols, type difference, multiple board type definition, etc).