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



Reply via email to