From: "Philippe Mathieu-Daudé via" <qemu-devel@nongnu.org>
To: Richard Henderson <richard.henderson@linaro.org>,
Mark Burton <mark.burton@greensocs.com>,
qemu-devel@nongnu.org
Cc: "Amir Gonnen" <amir.gonnen@neuroblade.ai>,
"Eric Blake" <eblake@redhat.com>,
"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
"Daniel P . Berrangé" <berrange@redhat.com>,
"Thomas Huth" <thuth@redhat.com>,
"Stefan Hajnoczi" <stefanha@redhat.com>,
"Markus Armbruster" <armbru@redhat.com>,
"Edgar E . Iglesias" <edgar.iglesias@gmail.com>,
"Yanan Wang" <wangyanan55@huawei.com>,
"Damien Hedde" <damien.hedde@greensocs.com>,
"Philippe Mathieu-Daudé" <f4bug@amsat.org>,
"Mirela Grujic" <mirela.grujic@greensocs.com>,
"Juan Quintela" <quintela@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Eduardo Habkost" <eduardo@habkost.net>
Subject: [NOTFORMERGE PATCH 1/1] target: Add system emulation aiming to target any architecture
Date: Tue, 15 Feb 2022 01:26:58 +0100 [thread overview]
Message-ID: <20220215002658.60678-2-f4bug@amsat.org> (raw)
In-Reply-To: <20220215002658.60678-1-f4bug@amsat.org>
Add the 'any'-architecture target.
- Only consider 64-bit targets
- Do not use any hardware accelerator (except qtest)
- For architecture constants, use:
. max of supported targets phys/virt address space
. max of supported targets MMU modes
. min of supported targets variable page bits
Build as:
$ ../configure --target-list=any-softmmu \
--disable-tcg --disable-kvm --disable-hvf
Test as:
$ qemu-system-any -M none,accel=qtest -monitor stdio
QEMU 6.2.50 monitor - type 'help' for more information
(qemu) info mtree
address-space: I/O
0000000000000000-000000000000ffff (prio 0, i/o): io
address-space: memory
0000000000000000-ffffffffffffffff (prio 0, i/o): system
(qemu) info qom-tree
/machine (none-machine)
/peripheral (container)
/peripheral-anon (container)
/unattached (container)
/io[0] (memory-region)
/sysbus (System)
/system[0] (memory-region)
(qemu) info qtree
bus: main-system-bus
type System
(qemu) info cpus
(qemu)
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
configs/devices/any-softmmu/default.mak | 1 +
configs/targets/any-softmmu.mak | 3 +++
hw/any/meson.build | 5 +++++
hw/meson.build | 1 +
include/sysemu/arch_init.h | 1 +
meson.build | 6 +++--
qapi/machine.json | 2 +-
target/Kconfig | 1 +
target/any/Kconfig | 4 ++++
target/any/cpu-param.h | 30 +++++++++++++++++++++++++
target/any/cpu.h | 26 +++++++++++++++++++++
target/any/meson.build | 8 +++++++
target/meson.build | 1 +
13 files changed, 86 insertions(+), 3 deletions(-)
create mode 100644 configs/devices/any-softmmu/default.mak
create mode 100644 configs/targets/any-softmmu.mak
create mode 100644 hw/any/meson.build
create mode 100644 target/any/Kconfig
create mode 100644 target/any/cpu-param.h
create mode 100644 target/any/cpu.h
create mode 100644 target/any/meson.build
diff --git a/configs/devices/any-softmmu/default.mak b/configs/devices/any-softmmu/default.mak
new file mode 100644
index 0000000000..315c06b689
--- /dev/null
+++ b/configs/devices/any-softmmu/default.mak
@@ -0,0 +1 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
diff --git a/configs/targets/any-softmmu.mak b/configs/targets/any-softmmu.mak
new file mode 100644
index 0000000000..2c6cf1edd4
--- /dev/null
+++ b/configs/targets/any-softmmu.mak
@@ -0,0 +1,3 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+TARGET_ARCH=any
diff --git a/hw/any/meson.build b/hw/any/meson.build
new file mode 100644
index 0000000000..60e1567e53
--- /dev/null
+++ b/hw/any/meson.build
@@ -0,0 +1,5 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+any_ss = ss.source_set()
+
+hw_arch += {'any': any_ss}
diff --git a/hw/meson.build b/hw/meson.build
index b3366c888e..6e7e102bbd 100644
--- a/hw/meson.build
+++ b/hw/meson.build
@@ -44,6 +44,7 @@ subdir('xen')
subdir('xenpv')
subdir('alpha')
+subdir('any')
subdir('arm')
subdir('avr')
subdir('cris')
diff --git a/include/sysemu/arch_init.h b/include/sysemu/arch_init.h
index 79c2591425..f86bf4b0cd 100644
--- a/include/sysemu/arch_init.h
+++ b/include/sysemu/arch_init.h
@@ -4,6 +4,7 @@
enum {
QEMU_ARCH_ALL = -1,
+ QEMU_ARCH_ANY = -1,
QEMU_ARCH_ALPHA = (1 << 0),
QEMU_ARCH_ARM = (1 << 1),
QEMU_ARCH_CRIS = (1 << 2),
diff --git a/meson.build b/meson.build
index 9460875693..f587f4ba59 100644
--- a/meson.build
+++ b/meson.build
@@ -61,7 +61,7 @@ python = import('python').find_installation()
supported_oses = ['windows', 'freebsd', 'netbsd', 'openbsd', 'darwin', 'sunos', 'linux']
supported_cpus = ['ppc', 'ppc64', 's390x', 'riscv', 'x86', 'x86_64',
- 'arm', 'aarch64', 'loongarch64', 'mips', 'mips64', 'sparc', 'sparc64']
+ 'arm', 'aarch64', 'loongarch64', 'mips', 'mips64', 'sparc', 'sparc64', 'any']
cpu = host_machine.cpu_family()
@@ -1934,7 +1934,9 @@ foreach target : target_dirs
if default_targets
continue
endif
- error('No accelerator available for target @0@'.format(target))
+ if 'any-softmmu' not in target_dirs
+ error('No accelerator available for target @0@'.format(target))
+ endif
endif
actual_target_dirs += target
diff --git a/qapi/machine.json b/qapi/machine.json
index 42fc68403d..4b09831a27 100644
--- a/qapi/machine.json
+++ b/qapi/machine.json
@@ -34,7 +34,7 @@
'mips64el', 'mipsel', 'nios2', 'or1k', 'ppc',
'ppc64', 'riscv32', 'riscv64', 'rx', 's390x', 'sh4',
'sh4eb', 'sparc', 'sparc64', 'tricore',
- 'x86_64', 'xtensa', 'xtensaeb' ] }
+ 'x86_64', 'xtensa', 'xtensaeb', 'any' ] }
##
# @CpuS390State:
diff --git a/target/Kconfig b/target/Kconfig
index ae7f24fc66..ea381d28b5 100644
--- a/target/Kconfig
+++ b/target/Kconfig
@@ -1,4 +1,5 @@
source alpha/Kconfig
+source any/Kconfig
source arm/Kconfig
source avr/Kconfig
source cris/Kconfig
diff --git a/target/any/Kconfig b/target/any/Kconfig
new file mode 100644
index 0000000000..8840d70e55
--- /dev/null
+++ b/target/any/Kconfig
@@ -0,0 +1,4 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+config ANY
+ bool
diff --git a/target/any/cpu-param.h b/target/any/cpu-param.h
new file mode 100644
index 0000000000..21cda0ddc2
--- /dev/null
+++ b/target/any/cpu-param.h
@@ -0,0 +1,30 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+#ifndef ANY_CPU_PARAM_H
+#define ANY_CPU_PARAM_H
+
+#define TARGET_LONG_BITS 64
+
+#define TARGET_PHYS_ADDR_SPACE_BITS 64 /* MAX(targets) */
+#define TARGET_VIRT_ADDR_SPACE_BITS 64 /* MAX(targets) */
+
+#define TARGET_PAGE_BITS_VARY
+#define TARGET_PAGE_BITS_MIN 10 /* MIN(targets)=ARMv5/ARMv6, ignoring AVR */
+
+#define NB_MMU_MODES 15 /* MAX(targets) = ARM */
+
+#include "hw/core/cpu.h"
+#include "qom/object.h"
+
+#define TYPE_ANY_CPU "any-cpu"
+
+OBJECT_DECLARE_CPU_TYPE(ANYCPU, ANYCPUClass, ANY_CPU)
+
+struct ANYCPUClass {
+ /*< private >*/
+ CPUClass parent_class;
+ /*< public >*/
+ DeviceRealize parent_realize;
+ DeviceReset parent_reset;
+};
+
+#endif
diff --git a/target/any/cpu.h b/target/any/cpu.h
new file mode 100644
index 0000000000..f85ebed956
--- /dev/null
+++ b/target/any/cpu.h
@@ -0,0 +1,26 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+#ifndef TARGET_ANY_CPU_H
+#define TARGET_ANY_CPU_H
+
+#include "exec/cpu-defs.h"
+
+#define ANY_CPU_TYPE_SUFFIX "-" TYPE_ANY_CPU
+#define ANY_CPU_TYPE_NAME(name) (name ANY_CPU_TYPE_SUFFIX)
+#define CPU_RESOLVING_TYPE TYPE_ANY_CPU
+
+struct CPUArchState {
+ /* nothing here */
+};
+
+struct ArchCPU {
+ /*< private >*/
+ CPUState parent_obj;
+ /*< public >*/
+
+ CPUNegativeOffsetState neg;
+ CPUArchState env;
+};
+
+#include "exec/cpu-all.h"
+
+#endif
diff --git a/target/any/meson.build b/target/any/meson.build
new file mode 100644
index 0000000000..1c36a6e3a1
--- /dev/null
+++ b/target/any/meson.build
@@ -0,0 +1,8 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+any_ss = ss.source_set()
+
+any_softmmu_ss = ss.source_set()
+
+target_arch += {'any': any_ss}
+target_softmmu_arch += {'any': any_softmmu_ss}
diff --git a/target/meson.build b/target/meson.build
index 2f6940255e..ef7f960f6e 100644
--- a/target/meson.build
+++ b/target/meson.build
@@ -1,4 +1,5 @@
subdir('alpha')
+subdir('any')
subdir('arm')
subdir('avr')
subdir('cris')
--
2.34.1
prev parent reply other threads:[~2022-02-15 0:29 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-15 0:26 [NOTFORMERGE PATCH 0/1] target: Toward heterogeneous machine Philippe Mathieu-Daudé via
2022-02-15 0:26 ` Philippe Mathieu-Daudé via [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220215002658.60678-2-f4bug@amsat.org \
--to=qemu-devel@nongnu.org \
--cc=amir.gonnen@neuroblade.ai \
--cc=armbru@redhat.com \
--cc=berrange@redhat.com \
--cc=damien.hedde@greensocs.com \
--cc=eblake@redhat.com \
--cc=edgar.iglesias@gmail.com \
--cc=eduardo@habkost.net \
--cc=f4bug@amsat.org \
--cc=marcel.apfelbaum@gmail.com \
--cc=mark.burton@greensocs.com \
--cc=mirela.grujic@greensocs.com \
--cc=pbonzini@redhat.com \
--cc=quintela@redhat.com \
--cc=richard.henderson@linaro.org \
--cc=stefanha@redhat.com \
--cc=thuth@redhat.com \
--cc=wangyanan55@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).