mbox series

[00/37] accel/tcg, codebase: Build once patches

Message ID 20250313034524.3069690-1-richard.henderson@linaro.org (mailing list archive)
Headers show
Series accel/tcg, codebase: Build once patches | expand

Message

Richard Henderson March 13, 2025, 3:44 a.m. UTC
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.

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.

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.


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

Comments

Alex Bennée March 13, 2025, 1:56 p.m. UTC | #1
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...
Pierrick Bouvier March 13, 2025, 4:36 p.m. UTC | #2
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
>
Philippe Mathieu-Daudé March 13, 2025, 5:48 p.m. UTC | #3
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)?
Pierrick Bouvier March 13, 2025, 8:13 p.m. UTC | #4
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).