[PATCH v4 00/55] single-binary: link multi-targets into qemu-system

Yonggang Luo posted 55 patches 11 hours ago
accel/tcg/atomic_common.c.inc                 |   4 +
accel/tcg/atomic_common.h                     |  70 ++
accel/tcg/cpu-exec-common.c                   |  10 +
accel/tcg/cpu-exec-common.h                   |   1 +
accel/tcg/cpu-exec.c                          |   5 +
accel/tcg/cpu-exec.h                          |   1 +
accel/tcg/ldst_common.c.inc                   |   4 +
accel/tcg/ldst_common.h                       |  13 +
accel/tcg/meson.build                         |   2 +-
accel/tcg/tcg-all.c                           |   9 +-
accel/tcg/tcg-runtime-gvec.c                  |   3 +
.../tcg/{tcg-runtime.h => tcg-runtime-gvec.h} | 111 ---
accel/tcg/tcg-runtime.c                       |   8 -
accel/tcg/tcg-runtime.h                       | 293 ------
configs/targets/aarch64-softmmu.c             |  25 -
configs/targets/arm-softmmu.c                 |  25 -
configs/targets/meson.build                   |   6 -
configs/targets/riscv32-softmmu.c             |  24 -
configs/targets/riscv64-softmmu.c             |  24 -
hw/Kconfig                                    |   2 +-
hw/arm/aspeed_ast1040_evb.c                   |   1 +
hw/arm/aspeed_ast10x0_evb.c                   |   2 +
hw/arm/aspeed_ast2400_palmetto.c              |   1 +
hw/arm/aspeed_ast2400_quanta-q71l.c           |   1 +
hw/arm/aspeed_ast2400_supermicrox11.c         |   1 +
hw/arm/aspeed_ast2500_evb.c                   |   1 +
hw/arm/aspeed_ast2500_g220a.c                 |   1 +
hw/arm/aspeed_ast2500_romulus.c               |   1 +
hw/arm/aspeed_ast2500_supermicro-x11spi.c     |   1 +
hw/arm/aspeed_ast2500_tiogapass.c             |   1 +
hw/arm/aspeed_ast2500_witherspoon.c           |   1 +
hw/arm/aspeed_ast2500_yosemitev2.c            |   1 +
hw/arm/aspeed_ast2600_anacapa.c               |   1 +
hw/arm/aspeed_ast2600_bletchley.c             |   1 +
hw/arm/aspeed_ast2600_catalina.c              |   1 +
hw/arm/aspeed_ast2600_evb.c                   |   1 +
hw/arm/aspeed_ast2600_fby35.c                 |   1 +
hw/arm/aspeed_ast2600_fuji.c                  |   1 +
hw/arm/aspeed_ast2600_gb200nvl.c              |   1 +
hw/arm/aspeed_ast2600_rainier.c               |   1 +
hw/arm/aspeed_ast2600_sanmiguel.c             |   1 +
hw/arm/aspeed_ast27x0-fc.c                    |   2 +-
hw/arm/aspeed_ast27x0_evb.c                   |   4 +-
hw/arm/ax3000-evk.c                           |   1 +
hw/arm/b-l475e-iot01a.c                       |   1 +
hw/arm/bananapi_m2u.c                         |  22 +-
hw/arm/collie.c                               |   1 +
hw/arm/cubieboard.c                           |  23 +-
hw/arm/digic_boards.c                         |  19 +-
hw/arm/exynos4_boards.c                       |   2 +
hw/arm/imx25_pdk.c                            |  19 +-
hw/arm/imx8mm-evk.c                           |  23 +-
hw/arm/imx8mp-evk.c                           |   1 +
hw/arm/integratorcp.c                         |  23 +-
hw/arm/kzm.c                                  |  19 +-
hw/arm/max78000fthr.c                         |  19 +-
hw/arm/mcimx6ul-evk.c                         |  19 +-
hw/arm/mcimx7d-sabre.c                        |  23 +-
hw/arm/microbit.c                             |   1 +
hw/arm/mps2-tz.c                              |   5 +
hw/arm/mps2.c                                 |   4 +
hw/arm/mps3r.c                                |   1 +
hw/arm/msf2-som.c                             |  19 +-
hw/arm/musca.c                                |   2 +
hw/arm/netduino2.c                            |  19 +-
hw/arm/netduinoplus2.c                        |  19 +-
hw/arm/npcm7xx_boards.c                       |   5 +
hw/arm/npcm8xx_boards.c                       |   1 +
hw/arm/olimex-stm32-h405.c                    |  19 +-
hw/arm/omap_sx1.c                             |   2 +
hw/arm/orangepi.c                             |  23 +-
hw/arm/raspi.c                                |   7 +-
hw/arm/raspi4b.c                              |   2 +-
hw/arm/realview.c                             |   4 +
hw/arm/sabrelite.c                            |   1 +
hw/arm/sbsa-ref.c                             |   1 +
hw/arm/stellaris.c                            |   2 +
hw/arm/stm32vldiscovery.c                     |  19 +-
hw/arm/versatilepb.c                          |   2 +
hw/arm/vexpress.c                             |   2 +
hw/arm/virt.c                                 |   1 +
hw/arm/xen-pvh.c                              |   1 +
hw/arm/xilinx_zynq.c                          |   1 +
hw/arm/xlnx-versal-virt.c                     |   2 +
hw/arm/xlnx-zcu102.c                          |   1 +
hw/core/Kconfig                               |   2 +-
hw/core/machine-qmp-cmds.c                    |  30 +
hw/core/meson.build                           |   2 +-
hw/dma/Kconfig                                |   4 +-
hw/i2c/Kconfig                                |   2 +-
hw/microblaze/petalogix_ml605_mmu.c           |  19 +-
hw/microblaze/petalogix_s3adsp1800_mmu.c      |   1 +
hw/microblaze/xlnx-zynqmp-pmu.c               |  19 +-
hw/usb/Kconfig                                |   2 +-
include/accel/tcg/cpu-ldst.h                  |   4 +-
include/exec/abi_ptr.h                        |   7 +-
include/exec/helper-gen-common.h              |  20 +
include/exec/helper-head.h.inc                |  21 +-
include/exec/helper-proto-common.h            |  20 +
include/exec/target_long.h                    |  11 +
include/qemu/config-file.h                    |   2 +
include/qemu/module.h                         |   1 -
include/qemu/target-info-def.h                |  90 ++
include/qemu/target-info-impl.h               |  42 -
include/qemu/target-info-init.h               |  53 --
include/qemu/target-info-qom.h                |  30 -
include/qemu/target-info-select.h             |  24 +
include/qemu/target-info.h                    | 174 +++-
include/qemu/target-kconfig-has.h             |   7 +
include/qemu/target-kconfig.h                 |  34 +
include/qom/object.h                          |  26 +-
include/tcg/tcg-op-gvec.h                     |  21 +-
include/tcg/tcg-op-mem.h                      | 114 ++-
include/tcg/tcg-op-tl.h                       | 568 ++++++++++++
include/tcg/tcg-op.h                          | 291 +-----
include/tcg/tcg.h                             |  73 +-
meson.build                                   | 233 ++++-
page-vary-common.c                            |   2 +-
page-vary-system.c                            |   2 +-
qapi/machine.json                             |  48 +-
qemu-options.hx                               |  11 +-
qom/object.c                                  |  20 +-
scripts/gen-target-kconfig.py                 | 162 ++++
stubs/meson.build                             |   1 +
stubs/target-info-select.c                    |  14 +
system/target-info-select.c                   |  26 +
system/vl.c                                   | 312 ++++++-
target-info-stub.c => target-info-def.c       |   9 +-
target-info-qom.c                             |  55 --
target-info.c                                 | 180 +++-
target-kconfig.c                              |  20 +
target/arm/cpu.c                              |   6 +-
target/arm/cpu.h                              |   1 +
target/arm/cpu64.c                            |  80 +-
target/arm/hvf/hvf-stub.c                     |  14 +
target/arm/hvf/meson.build                    |   1 +
target/arm/kvm-stub.c                         |   5 +
target/arm/kvm.c                              |  36 +
target/arm/kvm_arm.h                          |   9 +
target/arm/meson.build                        |   4 +-
target/arm/tcg/translate-a64.c                |   6 +-
target/arm/tcg/translate-a64.h                |   3 +
target/arm/tcg/translate-sme.c                |   5 +-
target/arm/tcg/translate-sve.c                |  18 +-
target/arm/whpx/whpx-stub.c                   |   5 +
target/microblaze/meson.build                 |   2 +-
target/none/cpu-param.h                       |   7 +
target/none/cpu-qom.h                         |   6 +
target/none/cpu.h                             |  18 +
tcg/meson.build                               |   9 +-
tcg/tcg-op-gvec.c                             |  17 -
tcg/tcg-op-ldst.c                             |  31 +
tcg/tcg-op.c                                  |  32 -
tcg/tcg.c                                     |  52 +-
tests/qtest/fuzz/fuzz.c                       |   3 -
.../qtest/machine-list-combined-targets.h.in  |   4 +
tests/qtest/machine-list-combined-test.c      | 104 +++
tests/qtest/machine-list-test.c               |  94 ++
tests/qtest/machine-list-test.inc.h           | 876 ++++++++++++++++++
tests/qtest/machine-option-test.c             | 714 ++++++++++++++
tests/qtest/meson.build                       |  41 +-
tests/unit/meson.build                        |  35 +
tests/unit/test-helper-tl.c                   |  20 +
tests/unit/test-helper-tl.h                   |  25 +
tests/unit/test-helper-tl32.c                 |  27 +
tests/unit/test-helper-tl64.c                 |  27 +
tests/unit/test-target-info.c                 |  38 +
tests/unit/test-target-kconfig-has.c          |  22 +
tests/unit/test-tcg-call-tl-stubs.c           |  45 +
tests/unit/test-tcg-call-tl.c                 | 280 ++++++
tests/unit/test-tcg-op-dispatch.h             | 203 ++++
tests/unit/test-tcg-op-mem-config32.h         |   2 +
tests/unit/test-tcg-op-mem-config64.h         |   2 +
tests/unit/test-tcg-op-mem-tl32.c             |  26 +
tests/unit/test-tcg-op-mem-tl64.c             |  26 +
tests/unit/test-tcg-op-mem-va32-tl64.c        |  35 +
tests/unit/test-tcg-op-mem.c                  |  51 +
tests/unit/test-tcg-op-tl32.c                 |  24 +
tests/unit/test-tcg-op-tl64.c                 |  24 +
tests/unit/test-tcg-op.c                      |  66 ++
util/module.c                                 |   4 +-
util/qemu-config.c                            |  10 +-
182 files changed, 5772 insertions(+), 1281 deletions(-)
create mode 100644 accel/tcg/atomic_common.h
create mode 100644 accel/tcg/cpu-exec-common.h
create mode 100644 accel/tcg/cpu-exec.h
create mode 100644 accel/tcg/ldst_common.h
copy accel/tcg/{tcg-runtime.h => tcg-runtime-gvec.h} (70%)
delete mode 100644 configs/targets/aarch64-softmmu.c
delete mode 100644 configs/targets/arm-softmmu.c
delete mode 100644 configs/targets/meson.build
delete mode 100644 configs/targets/riscv32-softmmu.c
delete mode 100644 configs/targets/riscv64-softmmu.c
create mode 100644 include/qemu/target-info-def.h
delete mode 100644 include/qemu/target-info-impl.h
delete mode 100644 include/qemu/target-info-init.h
delete mode 100644 include/qemu/target-info-qom.h
create mode 100644 include/qemu/target-info-select.h
create mode 100644 include/qemu/target-kconfig-has.h
create mode 100644 include/qemu/target-kconfig.h
create mode 100644 include/tcg/tcg-op-tl.h
create mode 100644 scripts/gen-target-kconfig.py
create mode 100644 stubs/target-info-select.c
create mode 100644 system/target-info-select.c
rename target-info-stub.c => target-info-def.c (88%)
delete mode 100644 target-info-qom.c
create mode 100644 target-kconfig.c
create mode 100644 target/arm/hvf/hvf-stub.c
create mode 100644 target/none/cpu-param.h
create mode 100644 target/none/cpu-qom.h
create mode 100644 target/none/cpu.h
create mode 100644 tests/qtest/machine-list-combined-targets.h.in
create mode 100644 tests/qtest/machine-list-combined-test.c
create mode 100644 tests/qtest/machine-list-test.c
create mode 100644 tests/qtest/machine-list-test.inc.h
create mode 100644 tests/qtest/machine-option-test.c
create mode 100644 tests/unit/test-helper-tl.c
create mode 100644 tests/unit/test-helper-tl.h
create mode 100644 tests/unit/test-helper-tl32.c
create mode 100644 tests/unit/test-helper-tl64.c
create mode 100644 tests/unit/test-target-info.c
create mode 100644 tests/unit/test-target-kconfig-has.c
create mode 100644 tests/unit/test-tcg-call-tl-stubs.c
create mode 100644 tests/unit/test-tcg-call-tl.c
create mode 100644 tests/unit/test-tcg-op-dispatch.h
create mode 100644 tests/unit/test-tcg-op-mem-config32.h
create mode 100644 tests/unit/test-tcg-op-mem-config64.h
create mode 100644 tests/unit/test-tcg-op-mem-tl32.c
create mode 100644 tests/unit/test-tcg-op-mem-tl64.c
create mode 100644 tests/unit/test-tcg-op-mem-va32-tl64.c
create mode 100644 tests/unit/test-tcg-op-mem.c
create mode 100644 tests/unit/test-tcg-op-tl32.c
create mode 100644 tests/unit/test-tcg-op-tl64.c
create mode 100644 tests/unit/test-tcg-op.c
[PATCH v4 00/55] single-binary: link multi-targets into qemu-system
Posted by Yonggang Luo 11 hours ago
This series produces one qemu-system binary that can run ARM (32 and 64) and
MicroBlaze. Upstream filters machines with TypeInfo.is_available. This series
passes a TargetInfo into that callback and compiles ARM and MicroBlaze once so
they can share qemu-system.

ARM virt keeps the QOM name virt. MicroBlaze boards keep their own names, so
TYPE_ACCEL_CPU and the virt ACPI helpers stay per target. aarch64 and arm share
one copy of the ARM sources. MicroBlaze is folded the same way. qemu-system
links a target only when its arch sources are target-info-def.c alone. Machine
is_available accepts ARM-family boards for arm and aarch64, aarch64-only boards
for aarch64, and MicroBlaze boards for microblaze.

target_ulong and TCG _tl helpers:

arm and microblaze are 32-bit and aarch64 is 64-bit, so the shared compile uses
a uint64_t target_ulong in softmmu common code. MO_TL follows
target_long_bits(). target_long stays per-target. tcg_gen_*_tl and the TL memory
helpers call the i32 or i64 operation through tl_is_64(). A helper tl argument
uses an i64 slot in common code: tcg_gen_callN zero-extends a 32-bit temp into
that slot and truncates an i64 return. Per-target builds keep target_ulong and
TCGv tied to TARGET_LONG_BITS.

Target selection has to work with more than one TargetInfo:

- The combined binary takes arch:name on -M/-machine and in a [machine] type
  (aarch64:virt). arch: binds the target. microblaze: runs that target's
  default machine. arm and aarch64 have no default. No -M leaves target none
  and the empty none machine. qemu-system-$arch keeps the historic -M name.
  -M help lists every target; arch:help lists one. A later bare name keeps the
  last arch prefix. query-targets lists each linked target, including none.
- TargetInfo is a constructor list. target_info_select() picks the entry,
  including SYS_EMU_TARGET_NONE. is_available takes const TargetInfo *. A
  single-target binary keeps its TargetInfo. arch: must match that binary or
  the machine is rejected. That binary drops types that fail is_available at
  registration. The combined binary keeps those types and filters with
  is_available for the selected target.

Peter Maydell suggested this arch:name form in review of
https://patchwork.ozlabs.org/project/qemu-devel/cover/20260828225901.367438-1-pierrick.bouvier@oss.qualcomm.com/#3749257

Daniel P. Berrange asked to query every machine in the binary and which targets
can run it. This series adds query-targets for that:
https://patchwork.ozlabs.org/project/qemu-devel/cover/20260828225901.367438-1-pierrick.bouvier@oss.qualcomm.com/#3749292

qemu-system-$TARGET is still built, including the Windows *w twin. qemu-system
is extra. It links aarch64, arm, and microblaze. Do not add qemu-systemw for
that binary. A GUI twin would keep QEMU exporting data from the .exe into
DLLs, and those data exports cannot be delay-loaded (qdev_prop_array and other
qdev_prop_*). That would block enabling modules globally on Windows.

Examples:

  qemu-system -M aarch64:virt ...
  qemu-system -M microblaze:petalogix-s3adsp1800 ...
  qemu-system-aarch64 -M virt ...

A bare machine name on qemu-system needs an arch: prefix. An unknown target
fails with "target '...' is not available".

v1: https://patchew.org/QEMU/20260823150731.896-1-luoyonggang@gmail.com/
v2: https://patchew.org/QEMU/20260826184229.1145-1-luoyonggang@gmail.com/
v3: https://patchew.org/QEMU/20260923131635.1894-1-luoyonggang@gmail.com/
branch: https://gitlab.com/lygstate-qemu/qemu/-/tree/single-binary-arm-riscv?ref_type=heads
x86_64 and i386: https://gitlab.com/lygstate-qemu/qemu/-/tree/combined-binary-multi-targets?ref_type=heads

Changes v3 -> v4:

v4 keeps arch:name selection, target none, and query-targets. qemu-system links
ARM and MicroBlaze only.

- Limit the combined binary to aarch64, arm, and microblaze. RISC-V stays on
  qemu-system-riscv32 and qemu-system-riscv64. Remove the target/riscv and
  hw/riscv compile-once patches and the RISC-V TARGET_LONG_BITS rewrites.
- Drop virt QOM prefixes, MachineInfo typename, the shared TYPE_ACCEL_CPU
  parent, virt ACPI prefixes, and the RISC-V crc32, crc32c, and wfi helper
  renames. Those names are already unique for ARM and MicroBlaze.
- Drop TargetCpuOps, AccelClass is_available, the move of kvm and whpx onto
  system_ss, and TargetInfo-gated migration fields.
- The combined binary registers every machine and filters with is_available
  for the selected target. v3 skipped that filter while the target was none.

v4 builds without these series:

  [PATCH v2 0/9] machine: uniquify virt QOM names
  https://patchew.org/QEMU/20260922215533.641-1-luoyonggang@gmail.com/
  [PATCH 00/21] accel/tcg: share raise_excp across TCG targets
  https://patchew.org/QEMU/20260918004225.827-1-luoyonggang@gmail.com/
  [PATCH v5 00/11] single-binary: Compile hw/riscv once
  https://patchew.org/QEMU/20260918-hw-riscv-cpu-int-v5-0-f98c5a244636@rev.ng/

Anton Johansson via qemu development (1):
  target-info: Introduce target_riscv32

Pierrick Bouvier (2):
  configs/targets: remove target info definitions
  target-info: rename target-info-stub.c in target-info-def.c

Yonggang Luo (52):
  target-info: rename target-info-impl.h to target-info-def.h
  vl: parse early options before target-info init
  target-info: replace QOM registration with a constructor list
  tests/unit: add test-target-info
  tests/qtest: prepare machine-list-test for combined qemu-system
  kconfig: rename REGISTER to HW_REGISTER
  target-info: add TargetKconfig
  target-info: add target_is_* helpers for each architecture
  target-info: add target_is_any()
  qom: pass TargetInfo to is_available for latter use
  target/arm: move kvm_arm_set_cpreg_mig_tolerances to kvm.c
  target/arm: allow -cpu host with Nitro
  target/arm: gate -cpu host with TypeIsAvailable
  target/arm: replace target_long in A64 translate
  target/arm: use vaddr for the A64 insn_start pc
  tests/qtest: raise aspeed_smc-test timeout to 12 minutes
  target-info: add tl_is_64() and target_is_tl32/64 helpers
  tcg: declare TCGv in tcg.h
  tcg: dispatch TL memory helpers from tcg-op-mem.h
  tcg: dispatch tcg_gen_*_tl without TARGET_LONG_BITS
  tcg: dispatch tcg_gen_gvec_dup_tl at runtime
  tcg: give common-system helper tl an i64 slot
  accel/tcg: move helper_exit_atomic next to cpu_loop_exit_atomic
  tcg: move dup_const into tcg.c
  tcg: move goto_tb helpers into tcg-op-ldst.c
  accel/tcg: move gvec helpers into tcg-runtime-gvec.h
  accel/tcg: move helper_lookup_tb_ptr into cpu-exec.h
  accel/tcg: move memory helpers out of tcg-runtime.h
  tests/unit: cover common-system tl dispatch and calls
  target/arm: fix A64 guest address width at 64
  target/arm: pass tl temps into SVE and SME helpers
  exec: provide target_ulong for softmmu common code
  exec: compile abi_ptr.h without per-target cpu-param.h
  accel/tcg: keep cpu-ldst endian aliases per-target
  target/arm: fold arm_ss into common source sets
  target/microblaze: fold system sources into common source sets
  meson: link shared objects into qemu-system
  target-info: add SysEmuTarget none
  module: load every arch-tagged module when target is none
  accel/tcg: tolerate NULL target_cpu_type for -M none
  target-info: select combined qemu-system target by name
  vl: parse arch: machine types on combined qemu-system
  qapi: add query-targets
  target-info: add target_is_microblaze
  hw/microblaze: set petalogix-s3adsp1800 TypeInfo.is_available
  hw/microblaze: expand petalogix-ml605 and xlnx-zynqmp-pmu to TypeInfo
  hw/arm: expand leftover 32-bit DEFINE_MACHINE to TypeInfo
  hw/arm: expand imx8mm-evk DEFINE_MACHINE to TypeInfo
  hw/arm: set virt TypeInfo.is_available
  hw/arm: set remaining 32-bit machine TypeInfo.is_available
  hw/arm: set aarch64-only machine TypeInfo.is_available
  tests/qtest: cover combined qemu-system machines

 accel/tcg/atomic_common.c.inc                 |   4 +
 accel/tcg/atomic_common.h                     |  70 ++
 accel/tcg/cpu-exec-common.c                   |  10 +
 accel/tcg/cpu-exec-common.h                   |   1 +
 accel/tcg/cpu-exec.c                          |   5 +
 accel/tcg/cpu-exec.h                          |   1 +
 accel/tcg/ldst_common.c.inc                   |   4 +
 accel/tcg/ldst_common.h                       |  13 +
 accel/tcg/meson.build                         |   2 +-
 accel/tcg/tcg-all.c                           |   9 +-
 accel/tcg/tcg-runtime-gvec.c                  |   3 +
 .../tcg/{tcg-runtime.h => tcg-runtime-gvec.h} | 111 ---
 accel/tcg/tcg-runtime.c                       |   8 -
 accel/tcg/tcg-runtime.h                       | 293 ------
 configs/targets/aarch64-softmmu.c             |  25 -
 configs/targets/arm-softmmu.c                 |  25 -
 configs/targets/meson.build                   |   6 -
 configs/targets/riscv32-softmmu.c             |  24 -
 configs/targets/riscv64-softmmu.c             |  24 -
 hw/Kconfig                                    |   2 +-
 hw/arm/aspeed_ast1040_evb.c                   |   1 +
 hw/arm/aspeed_ast10x0_evb.c                   |   2 +
 hw/arm/aspeed_ast2400_palmetto.c              |   1 +
 hw/arm/aspeed_ast2400_quanta-q71l.c           |   1 +
 hw/arm/aspeed_ast2400_supermicrox11.c         |   1 +
 hw/arm/aspeed_ast2500_evb.c                   |   1 +
 hw/arm/aspeed_ast2500_g220a.c                 |   1 +
 hw/arm/aspeed_ast2500_romulus.c               |   1 +
 hw/arm/aspeed_ast2500_supermicro-x11spi.c     |   1 +
 hw/arm/aspeed_ast2500_tiogapass.c             |   1 +
 hw/arm/aspeed_ast2500_witherspoon.c           |   1 +
 hw/arm/aspeed_ast2500_yosemitev2.c            |   1 +
 hw/arm/aspeed_ast2600_anacapa.c               |   1 +
 hw/arm/aspeed_ast2600_bletchley.c             |   1 +
 hw/arm/aspeed_ast2600_catalina.c              |   1 +
 hw/arm/aspeed_ast2600_evb.c                   |   1 +
 hw/arm/aspeed_ast2600_fby35.c                 |   1 +
 hw/arm/aspeed_ast2600_fuji.c                  |   1 +
 hw/arm/aspeed_ast2600_gb200nvl.c              |   1 +
 hw/arm/aspeed_ast2600_rainier.c               |   1 +
 hw/arm/aspeed_ast2600_sanmiguel.c             |   1 +
 hw/arm/aspeed_ast27x0-fc.c                    |   2 +-
 hw/arm/aspeed_ast27x0_evb.c                   |   4 +-
 hw/arm/ax3000-evk.c                           |   1 +
 hw/arm/b-l475e-iot01a.c                       |   1 +
 hw/arm/bananapi_m2u.c                         |  22 +-
 hw/arm/collie.c                               |   1 +
 hw/arm/cubieboard.c                           |  23 +-
 hw/arm/digic_boards.c                         |  19 +-
 hw/arm/exynos4_boards.c                       |   2 +
 hw/arm/imx25_pdk.c                            |  19 +-
 hw/arm/imx8mm-evk.c                           |  23 +-
 hw/arm/imx8mp-evk.c                           |   1 +
 hw/arm/integratorcp.c                         |  23 +-
 hw/arm/kzm.c                                  |  19 +-
 hw/arm/max78000fthr.c                         |  19 +-
 hw/arm/mcimx6ul-evk.c                         |  19 +-
 hw/arm/mcimx7d-sabre.c                        |  23 +-
 hw/arm/microbit.c                             |   1 +
 hw/arm/mps2-tz.c                              |   5 +
 hw/arm/mps2.c                                 |   4 +
 hw/arm/mps3r.c                                |   1 +
 hw/arm/msf2-som.c                             |  19 +-
 hw/arm/musca.c                                |   2 +
 hw/arm/netduino2.c                            |  19 +-
 hw/arm/netduinoplus2.c                        |  19 +-
 hw/arm/npcm7xx_boards.c                       |   5 +
 hw/arm/npcm8xx_boards.c                       |   1 +
 hw/arm/olimex-stm32-h405.c                    |  19 +-
 hw/arm/omap_sx1.c                             |   2 +
 hw/arm/orangepi.c                             |  23 +-
 hw/arm/raspi.c                                |   7 +-
 hw/arm/raspi4b.c                              |   2 +-
 hw/arm/realview.c                             |   4 +
 hw/arm/sabrelite.c                            |   1 +
 hw/arm/sbsa-ref.c                             |   1 +
 hw/arm/stellaris.c                            |   2 +
 hw/arm/stm32vldiscovery.c                     |  19 +-
 hw/arm/versatilepb.c                          |   2 +
 hw/arm/vexpress.c                             |   2 +
 hw/arm/virt.c                                 |   1 +
 hw/arm/xen-pvh.c                              |   1 +
 hw/arm/xilinx_zynq.c                          |   1 +
 hw/arm/xlnx-versal-virt.c                     |   2 +
 hw/arm/xlnx-zcu102.c                          |   1 +
 hw/core/Kconfig                               |   2 +-
 hw/core/machine-qmp-cmds.c                    |  30 +
 hw/core/meson.build                           |   2 +-
 hw/dma/Kconfig                                |   4 +-
 hw/i2c/Kconfig                                |   2 +-
 hw/microblaze/petalogix_ml605_mmu.c           |  19 +-
 hw/microblaze/petalogix_s3adsp1800_mmu.c      |   1 +
 hw/microblaze/xlnx-zynqmp-pmu.c               |  19 +-
 hw/usb/Kconfig                                |   2 +-
 include/accel/tcg/cpu-ldst.h                  |   4 +-
 include/exec/abi_ptr.h                        |   7 +-
 include/exec/helper-gen-common.h              |  20 +
 include/exec/helper-head.h.inc                |  21 +-
 include/exec/helper-proto-common.h            |  20 +
 include/exec/target_long.h                    |  11 +
 include/qemu/config-file.h                    |   2 +
 include/qemu/module.h                         |   1 -
 include/qemu/target-info-def.h                |  90 ++
 include/qemu/target-info-impl.h               |  42 -
 include/qemu/target-info-init.h               |  53 --
 include/qemu/target-info-qom.h                |  30 -
 include/qemu/target-info-select.h             |  24 +
 include/qemu/target-info.h                    | 174 +++-
 include/qemu/target-kconfig-has.h             |   7 +
 include/qemu/target-kconfig.h                 |  34 +
 include/qom/object.h                          |  26 +-
 include/tcg/tcg-op-gvec.h                     |  21 +-
 include/tcg/tcg-op-mem.h                      | 114 ++-
 include/tcg/tcg-op-tl.h                       | 568 ++++++++++++
 include/tcg/tcg-op.h                          | 291 +-----
 include/tcg/tcg.h                             |  73 +-
 meson.build                                   | 233 ++++-
 page-vary-common.c                            |   2 +-
 page-vary-system.c                            |   2 +-
 qapi/machine.json                             |  48 +-
 qemu-options.hx                               |  11 +-
 qom/object.c                                  |  20 +-
 scripts/gen-target-kconfig.py                 | 162 ++++
 stubs/meson.build                             |   1 +
 stubs/target-info-select.c                    |  14 +
 system/target-info-select.c                   |  26 +
 system/vl.c                                   | 312 ++++++-
 target-info-stub.c => target-info-def.c       |   9 +-
 target-info-qom.c                             |  55 --
 target-info.c                                 | 180 +++-
 target-kconfig.c                              |  20 +
 target/arm/cpu.c                              |   6 +-
 target/arm/cpu.h                              |   1 +
 target/arm/cpu64.c                            |  80 +-
 target/arm/hvf/hvf-stub.c                     |  14 +
 target/arm/hvf/meson.build                    |   1 +
 target/arm/kvm-stub.c                         |   5 +
 target/arm/kvm.c                              |  36 +
 target/arm/kvm_arm.h                          |   9 +
 target/arm/meson.build                        |   4 +-
 target/arm/tcg/translate-a64.c                |   6 +-
 target/arm/tcg/translate-a64.h                |   3 +
 target/arm/tcg/translate-sme.c                |   5 +-
 target/arm/tcg/translate-sve.c                |  18 +-
 target/arm/whpx/whpx-stub.c                   |   5 +
 target/microblaze/meson.build                 |   2 +-
 target/none/cpu-param.h                       |   7 +
 target/none/cpu-qom.h                         |   6 +
 target/none/cpu.h                             |  18 +
 tcg/meson.build                               |   9 +-
 tcg/tcg-op-gvec.c                             |  17 -
 tcg/tcg-op-ldst.c                             |  31 +
 tcg/tcg-op.c                                  |  32 -
 tcg/tcg.c                                     |  52 +-
 tests/qtest/fuzz/fuzz.c                       |   3 -
 .../qtest/machine-list-combined-targets.h.in  |   4 +
 tests/qtest/machine-list-combined-test.c      | 104 +++
 tests/qtest/machine-list-test.c               |  94 ++
 tests/qtest/machine-list-test.inc.h           | 876 ++++++++++++++++++
 tests/qtest/machine-option-test.c             | 714 ++++++++++++++
 tests/qtest/meson.build                       |  41 +-
 tests/unit/meson.build                        |  35 +
 tests/unit/test-helper-tl.c                   |  20 +
 tests/unit/test-helper-tl.h                   |  25 +
 tests/unit/test-helper-tl32.c                 |  27 +
 tests/unit/test-helper-tl64.c                 |  27 +
 tests/unit/test-target-info.c                 |  38 +
 tests/unit/test-target-kconfig-has.c          |  22 +
 tests/unit/test-tcg-call-tl-stubs.c           |  45 +
 tests/unit/test-tcg-call-tl.c                 | 280 ++++++
 tests/unit/test-tcg-op-dispatch.h             | 203 ++++
 tests/unit/test-tcg-op-mem-config32.h         |   2 +
 tests/unit/test-tcg-op-mem-config64.h         |   2 +
 tests/unit/test-tcg-op-mem-tl32.c             |  26 +
 tests/unit/test-tcg-op-mem-tl64.c             |  26 +
 tests/unit/test-tcg-op-mem-va32-tl64.c        |  35 +
 tests/unit/test-tcg-op-mem.c                  |  51 +
 tests/unit/test-tcg-op-tl32.c                 |  24 +
 tests/unit/test-tcg-op-tl64.c                 |  24 +
 tests/unit/test-tcg-op.c                      |  66 ++
 util/module.c                                 |   4 +-
 util/qemu-config.c                            |  10 +-
 182 files changed, 5772 insertions(+), 1281 deletions(-)
 create mode 100644 accel/tcg/atomic_common.h
 create mode 100644 accel/tcg/cpu-exec-common.h
 create mode 100644 accel/tcg/cpu-exec.h
 create mode 100644 accel/tcg/ldst_common.h
 copy accel/tcg/{tcg-runtime.h => tcg-runtime-gvec.h} (70%)
 delete mode 100644 configs/targets/aarch64-softmmu.c
 delete mode 100644 configs/targets/arm-softmmu.c
 delete mode 100644 configs/targets/meson.build
 delete mode 100644 configs/targets/riscv32-softmmu.c
 delete mode 100644 configs/targets/riscv64-softmmu.c
 create mode 100644 include/qemu/target-info-def.h
 delete mode 100644 include/qemu/target-info-impl.h
 delete mode 100644 include/qemu/target-info-init.h
 delete mode 100644 include/qemu/target-info-qom.h
 create mode 100644 include/qemu/target-info-select.h
 create mode 100644 include/qemu/target-kconfig-has.h
 create mode 100644 include/qemu/target-kconfig.h
 create mode 100644 include/tcg/tcg-op-tl.h
 create mode 100644 scripts/gen-target-kconfig.py
 create mode 100644 stubs/target-info-select.c
 create mode 100644 system/target-info-select.c
 rename target-info-stub.c => target-info-def.c (88%)
 delete mode 100644 target-info-qom.c
 create mode 100644 target-kconfig.c
 create mode 100644 target/arm/hvf/hvf-stub.c
 create mode 100644 target/none/cpu-param.h
 create mode 100644 target/none/cpu-qom.h
 create mode 100644 target/none/cpu.h
 create mode 100644 tests/qtest/machine-list-combined-targets.h.in
 create mode 100644 tests/qtest/machine-list-combined-test.c
 create mode 100644 tests/qtest/machine-list-test.c
 create mode 100644 tests/qtest/machine-list-test.inc.h
 create mode 100644 tests/qtest/machine-option-test.c
 create mode 100644 tests/unit/test-helper-tl.c
 create mode 100644 tests/unit/test-helper-tl.h
 create mode 100644 tests/unit/test-helper-tl32.c
 create mode 100644 tests/unit/test-helper-tl64.c
 create mode 100644 tests/unit/test-target-info.c
 create mode 100644 tests/unit/test-target-kconfig-has.c
 create mode 100644 tests/unit/test-tcg-call-tl-stubs.c
 create mode 100644 tests/unit/test-tcg-call-tl.c
 create mode 100644 tests/unit/test-tcg-op-dispatch.h
 create mode 100644 tests/unit/test-tcg-op-mem-config32.h
 create mode 100644 tests/unit/test-tcg-op-mem-config64.h
 create mode 100644 tests/unit/test-tcg-op-mem-tl32.c
 create mode 100644 tests/unit/test-tcg-op-mem-tl64.c
 create mode 100644 tests/unit/test-tcg-op-mem-va32-tl64.c
 create mode 100644 tests/unit/test-tcg-op-mem.c
 create mode 100644 tests/unit/test-tcg-op-tl32.c
 create mode 100644 tests/unit/test-tcg-op-tl64.c
 create mode 100644 tests/unit/test-tcg-op.c

-- 
2.52.0.windows.1