* util/log: re-allow switching away from stderr log file
* finish audio configuration rework * cleanup HVF stubs * remove more mentions of softmmu -----BEGIN PGP SIGNATURE----- iQFIBAABCAAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAmUi/kIUHHBib256aW5p QHJlZGhhdC5jb20ACgkQv/vSX3jHroOXWwf/YW16QMzqdAPVHYRf9NcCneRF16El t3lEod0q0sHhchPbh9e04aKbh+oBNeWu9sFyTl11Fwsi+DGmp/b28ziva75/4rfd h5N9aX/z2jwPqy93IwPDu3soKXCCgTK+ywtD/5GLQwBGqxs7W2xUEEb7eCnVefHa zwL3MOUqPICeqOnR1TNw9k3N3veF04D+rmchTwbAjAmx1f8EI+mK9VlGK9V8TUjP 3HjpZYJluc0a92lR5VONJ7V25QfttsjLysTgpFwVAQPS6Frzatc/hWclfLYgw9vl 2Irk83FV8gXPRl0XKNcqSDsv6h/yGP6TDFIB8QwRSRGBqIQi5aOlfBJzsQ== =qbm7 -----END PGP SIGNATURE----- Merge tag 'for-upstream' of https://gitlab.com/bonzini/qemu into staging * util/log: re-allow switching away from stderr log file * finish audio configuration rework * cleanup HVF stubs * remove more mentions of softmmu # -----BEGIN PGP SIGNATURE----- # # iQFIBAABCAAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAmUi/kIUHHBib256aW5p # QHJlZGhhdC5jb20ACgkQv/vSX3jHroOXWwf/YW16QMzqdAPVHYRf9NcCneRF16El # t3lEod0q0sHhchPbh9e04aKbh+oBNeWu9sFyTl11Fwsi+DGmp/b28ziva75/4rfd # h5N9aX/z2jwPqy93IwPDu3soKXCCgTK+ywtD/5GLQwBGqxs7W2xUEEb7eCnVefHa # zwL3MOUqPICeqOnR1TNw9k3N3veF04D+rmchTwbAjAmx1f8EI+mK9VlGK9V8TUjP # 3HjpZYJluc0a92lR5VONJ7V25QfttsjLysTgpFwVAQPS6Frzatc/hWclfLYgw9vl # 2Irk83FV8gXPRl0XKNcqSDsv6h/yGP6TDFIB8QwRSRGBqIQi5aOlfBJzsQ== # =qbm7 # -----END PGP SIGNATURE----- # gpg: Signature made Sun 08 Oct 2023 15:08:50 EDT # gpg: using RSA key F13338574B662389866C7682BFFBD25F78C7AE83 # gpg: issuer "pbonzini@redhat.com" # gpg: Good signature from "Paolo Bonzini <bonzini@gnu.org>" [full] # gpg: aka "Paolo Bonzini <pbonzini@redhat.com>" [full] # Primary key fingerprint: 46F5 9FBD 57D6 12E7 BFD4 E2F7 7E15 100C CD36 69B1 # Subkey fingerprint: F133 3857 4B66 2389 866C 7682 BFFB D25F 78C7 AE83 * tag 'for-upstream' of https://gitlab.com/bonzini/qemu: (25 commits) audio, qtest: get rid of QEMU_AUDIO_DRV audio: reintroduce default audio backend for VNC audio: do not use first -audiodev as default audio device audio: extend -audio to allow creating a default backend audio: extract audio_define_default audio: disable default backends if -audio/-audiodev is used audio: error hints need a trailing \n cutils: squelch compiler warnings with custom paths configure: change $softmmu to $system system: Rename softmmu/ directory as system/ meson: Rename target_softmmu_arch -> target_system_arch meson: Rename softmmu_mods -> system_mods target/i386: Rename i386_softmmu_kvm_ss -> i386_kvm_ss semihosting: Rename softmmu_FOO_user() -> uaccess_FOO_user() gdbstub: Rename 'softmmu' -> 'system' accel: Rename accel_softmmu* -> accel_system* tcg: Correct invalid mentions of 'softmmu' by 'system-mode' fuzz: Correct invalid mentions of 'softmmu' by 'system' cpu: Correct invalid mentions of 'softmmu' by 'system-mode' travis-ci: Correct invalid mentions of 'softmmu' by 'system' ... Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
commit
1527c6b6fa
@ -34,7 +34,7 @@ env:
|
||||
- BASE_CONFIG="--disable-docs --disable-tools"
|
||||
- TEST_BUILD_CMD=""
|
||||
- TEST_CMD="make check V=1"
|
||||
# This is broadly a list of "mainline" softmmu targets which have support across the major distros
|
||||
# This is broadly a list of "mainline" system targets which have support across the major distros
|
||||
- MAIN_SOFTMMU_TARGETS="aarch64-softmmu,mips64-softmmu,ppc64-softmmu,riscv64-softmmu,s390x-softmmu,x86_64-softmmu"
|
||||
- CCACHE_SLOPPINESS="include_file_ctime,include_file_mtime"
|
||||
- CCACHE_MAXSIZE=1G
|
||||
@ -197,7 +197,7 @@ jobs:
|
||||
$(exit $BUILD_RC);
|
||||
fi
|
||||
|
||||
- name: "[s390x] GCC (other-softmmu)"
|
||||
- name: "[s390x] GCC (other-system)"
|
||||
arch: s390x
|
||||
dist: focal
|
||||
addons:
|
||||
|
42
MAINTAINERS
42
MAINTAINERS
@ -137,8 +137,8 @@ Overall TCG CPUs
|
||||
M: Richard Henderson <richard.henderson@linaro.org>
|
||||
R: Paolo Bonzini <pbonzini@redhat.com>
|
||||
S: Maintained
|
||||
F: softmmu/cpus.c
|
||||
F: softmmu/watchpoint.c
|
||||
F: system/cpus.c
|
||||
F: system/watchpoint.c
|
||||
F: cpu-common.c
|
||||
F: cpu-target.c
|
||||
F: page-vary-target.c
|
||||
@ -2114,7 +2114,7 @@ S: Maintained
|
||||
F: docs/interop/virtio-balloon-stats.rst
|
||||
F: hw/virtio/virtio-balloon*.c
|
||||
F: include/hw/virtio/virtio-balloon.h
|
||||
F: softmmu/balloon.c
|
||||
F: system/balloon.c
|
||||
F: include/sysemu/balloon.h
|
||||
|
||||
virtio-9p
|
||||
@ -2801,7 +2801,7 @@ Device Tree
|
||||
M: Alistair Francis <alistair.francis@wdc.com>
|
||||
R: David Gibson <david@gibson.dropbear.id.au>
|
||||
S: Maintained
|
||||
F: softmmu/device_tree.c
|
||||
F: system/device_tree.c
|
||||
F: include/sysemu/device_tree.h
|
||||
|
||||
Dump
|
||||
@ -2857,11 +2857,11 @@ F: include/exec/memory.h
|
||||
F: include/exec/ram_addr.h
|
||||
F: include/exec/ramblock.h
|
||||
F: include/sysemu/memory_mapping.h
|
||||
F: softmmu/dma-helpers.c
|
||||
F: softmmu/ioport.c
|
||||
F: softmmu/memory.c
|
||||
F: softmmu/memory_mapping.c
|
||||
F: softmmu/physmem.c
|
||||
F: system/dma-helpers.c
|
||||
F: system/ioport.c
|
||||
F: system/memory.c
|
||||
F: system/memory_mapping.c
|
||||
F: system/physmem.c
|
||||
F: include/exec/memory-internal.h
|
||||
F: scripts/coccinelle/memory-region-housekeeping.cocci
|
||||
|
||||
@ -2914,12 +2914,12 @@ F: include/sysemu/runstate.h
|
||||
F: include/sysemu/runstate-action.h
|
||||
F: util/main-loop.c
|
||||
F: util/qemu-timer.c
|
||||
F: softmmu/vl.c
|
||||
F: softmmu/main.c
|
||||
F: softmmu/cpus.c
|
||||
F: softmmu/cpu-throttle.c
|
||||
F: softmmu/cpu-timers.c
|
||||
F: softmmu/runstate*
|
||||
F: system/vl.c
|
||||
F: system/main.c
|
||||
F: system/cpus.c
|
||||
F: system/cpu-throttle.c
|
||||
F: system/cpu-timers.c
|
||||
F: system/runstate*
|
||||
F: qapi/run-state.json
|
||||
|
||||
Read, Copy, Update (RCU)
|
||||
@ -3093,7 +3093,7 @@ F: qapi/qom.json
|
||||
F: qapi/qdev.json
|
||||
F: scripts/coccinelle/qom-parent-type.cocci
|
||||
F: scripts/qom-cast-macro-clean-cocci-gen.py
|
||||
F: softmmu/qdev-monitor.c
|
||||
F: system/qdev-monitor.c
|
||||
F: stubs/qdev.c
|
||||
F: qom/
|
||||
F: tests/unit/check-qom-interface.c
|
||||
@ -3127,7 +3127,7 @@ M: Thomas Huth <thuth@redhat.com>
|
||||
M: Laurent Vivier <lvivier@redhat.com>
|
||||
R: Paolo Bonzini <pbonzini@redhat.com>
|
||||
S: Maintained
|
||||
F: softmmu/qtest.c
|
||||
F: system/qtest.c
|
||||
F: accel/qtest/
|
||||
F: tests/qtest/
|
||||
F: docs/devel/qgraph.rst
|
||||
@ -3203,7 +3203,7 @@ F: scripts/simpletrace.py
|
||||
TPM
|
||||
M: Stefan Berger <stefanb@linux.ibm.com>
|
||||
S: Maintained
|
||||
F: softmmu/tpm*
|
||||
F: system/tpm*
|
||||
F: hw/tpm/*
|
||||
F: include/hw/acpi/tpm.h
|
||||
F: include/sysemu/tpm*
|
||||
@ -3248,7 +3248,7 @@ F: migration/rdma*
|
||||
Migration dirty limit and dirty page rate
|
||||
M: Hyman Huang <yong.huang@smartx.com>
|
||||
S: Maintained
|
||||
F: softmmu/dirtylimit.c
|
||||
F: system/dirtylimit.c
|
||||
F: include/sysemu/dirtylimit.h
|
||||
F: migration/dirtyrate.c
|
||||
F: migration/dirtyrate.h
|
||||
@ -3272,7 +3272,7 @@ F: scripts/xml-preprocess*
|
||||
Seccomp
|
||||
M: Daniel P. Berrange <berrange@redhat.com>
|
||||
S: Odd Fixes
|
||||
F: softmmu/qemu-seccomp.c
|
||||
F: system/qemu-seccomp.c
|
||||
F: include/sysemu/seccomp.h
|
||||
F: tests/unit/test-seccomp.c
|
||||
|
||||
@ -3691,7 +3691,7 @@ T: git https://github.com/stefanha/qemu.git block
|
||||
Bootdevice
|
||||
M: Gonglei <arei.gonglei@huawei.com>
|
||||
S: Maintained
|
||||
F: softmmu/bootdevice.c
|
||||
F: system/bootdevice.c
|
||||
|
||||
Quorum
|
||||
M: Alberto Garcia <berto@igalia.com>
|
||||
|
@ -28,7 +28,7 @@
|
||||
#include "hw/boards.h"
|
||||
#include "sysemu/cpus.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "accel-softmmu.h"
|
||||
#include "accel-system.h"
|
||||
|
||||
int accel_init_machine(AccelState *accel, MachineState *ms)
|
||||
{
|
||||
@ -99,8 +99,8 @@ static const TypeInfo accel_ops_type_info = {
|
||||
.class_size = sizeof(AccelOpsClass),
|
||||
};
|
||||
|
||||
static void accel_softmmu_register_types(void)
|
||||
static void accel_system_register_types(void)
|
||||
{
|
||||
type_register_static(&accel_ops_type_info);
|
||||
}
|
||||
type_init(accel_softmmu_register_types);
|
||||
type_init(accel_system_register_types);
|
@ -7,9 +7,9 @@
|
||||
* See the COPYING file in the top-level directory.
|
||||
*/
|
||||
|
||||
#ifndef ACCEL_SOFTMMU_H
|
||||
#define ACCEL_SOFTMMU_H
|
||||
#ifndef ACCEL_SYSTEM_H
|
||||
#define ACCEL_SYSTEM_H
|
||||
|
||||
void accel_init_ops_interfaces(AccelClass *ac);
|
||||
|
||||
#endif /* ACCEL_SOFTMMU_H */
|
||||
#endif /* ACCEL_SYSTEM_H */
|
@ -30,7 +30,7 @@
|
||||
#include "hw/core/accel-cpu.h"
|
||||
|
||||
#ifndef CONFIG_USER_ONLY
|
||||
#include "accel-softmmu.h"
|
||||
#include "accel-system.h"
|
||||
#endif /* !CONFIG_USER_ONLY */
|
||||
|
||||
static const TypeInfo accel_type = {
|
||||
|
@ -1,5 +1,5 @@
|
||||
specific_ss.add(files('accel-target.c'))
|
||||
system_ss.add(files('accel-softmmu.c', 'accel-blocker.c'))
|
||||
system_ss.add(files('accel-system.c', 'accel-blocker.c'))
|
||||
user_ss.add(files('accel-user.c'))
|
||||
|
||||
subdir('tcg')
|
||||
|
@ -1,6 +1,6 @@
|
||||
sysemu_stubs_ss = ss.source_set()
|
||||
sysemu_stubs_ss.add(when: 'CONFIG_XEN', if_false: files('xen-stub.c'))
|
||||
sysemu_stubs_ss.add(when: 'CONFIG_KVM', if_false: files('kvm-stub.c'))
|
||||
sysemu_stubs_ss.add(when: 'CONFIG_TCG', if_false: files('tcg-stub.c'))
|
||||
system_stubs_ss = ss.source_set()
|
||||
system_stubs_ss.add(when: 'CONFIG_XEN', if_false: files('xen-stub.c'))
|
||||
system_stubs_ss.add(when: 'CONFIG_KVM', if_false: files('kvm-stub.c'))
|
||||
system_stubs_ss.add(when: 'CONFIG_TCG', if_false: files('tcg-stub.c'))
|
||||
|
||||
specific_ss.add_all(when: ['CONFIG_SYSTEM_ONLY'], if_true: sysemu_stubs_ss)
|
||||
specific_ss.add_all(when: ['CONFIG_SYSTEM_ONLY'], if_true: system_stubs_ss)
|
||||
|
@ -37,7 +37,7 @@
|
||||
#include "hw/core/cpu.h"
|
||||
#include "sysemu/cpu-timers.h"
|
||||
#include "sysemu/cpu-throttle.h"
|
||||
#include "softmmu/timers-state.h"
|
||||
#include "sysemu/cpu-timers-internal.h"
|
||||
|
||||
/*
|
||||
* ICOUNT: Instruction Counter
|
||||
|
@ -940,7 +940,7 @@ void *page_get_target_data(target_ulong address)
|
||||
void page_reset_target_data(target_ulong start, target_ulong last) { }
|
||||
#endif /* TARGET_PAGE_DATA_SIZE */
|
||||
|
||||
/* The softmmu versions of these helpers are in cputlb.c. */
|
||||
/* The system-mode versions of these helpers are in cputlb.c. */
|
||||
|
||||
static void *cpu_mmu_lookup(CPUState *cpu, vaddr addr,
|
||||
MemOp mop, uintptr_t ra, MMUAccessType type)
|
||||
|
@ -104,6 +104,7 @@ static audio_driver *audio_driver_lookup(const char *name)
|
||||
|
||||
static QTAILQ_HEAD(AudioStateHead, AudioState) audio_states =
|
||||
QTAILQ_HEAD_INITIALIZER(audio_states);
|
||||
static AudioState *default_audio_state;
|
||||
|
||||
const struct mixeng_volume nominal_volume = {
|
||||
.mute = 0,
|
||||
@ -1660,6 +1661,7 @@ static void free_audio_state(AudioState *s)
|
||||
|
||||
void audio_cleanup(void)
|
||||
{
|
||||
default_audio_state = NULL;
|
||||
while (!QTAILQ_EMPTY(&audio_states)) {
|
||||
AudioState *s = QTAILQ_FIRST(&audio_states);
|
||||
QTAILQ_REMOVE(&audio_states, s, list);
|
||||
@ -1686,31 +1688,12 @@ static const VMStateDescription vmstate_audio = {
|
||||
}
|
||||
};
|
||||
|
||||
static void audio_validate_opts(Audiodev *dev, Error **errp);
|
||||
|
||||
static void audio_create_default_audiodevs(void)
|
||||
void audio_create_default_audiodevs(void)
|
||||
{
|
||||
const char *drvname = getenv("QEMU_AUDIO_DRV");
|
||||
|
||||
if (!defaults_enabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* QEMU_AUDIO_DRV=none is used by libqtest. */
|
||||
if (drvname && !g_str_equal(drvname, "none")) {
|
||||
error_report("Please use -audiodev instead of QEMU_AUDIO_*");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
for (int i = 0; audio_prio_list[i]; i++) {
|
||||
if (drvname && !g_str_equal(drvname, audio_prio_list[i])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (audio_driver_lookup(audio_prio_list[i])) {
|
||||
QDict *dict = qdict_new();
|
||||
Audiodev *dev = NULL;
|
||||
AudiodevListEntry *e;
|
||||
Visitor *v;
|
||||
|
||||
qdict_put_str(dict, "driver", audio_prio_list[i]);
|
||||
@ -1721,10 +1704,7 @@ static void audio_create_default_audiodevs(void)
|
||||
visit_type_Audiodev(v, NULL, &dev, &error_fatal);
|
||||
visit_free(v);
|
||||
|
||||
audio_validate_opts(dev, &error_abort);
|
||||
e = g_new0(AudiodevListEntry, 1);
|
||||
e->dev = dev;
|
||||
QSIMPLEQ_INSERT_TAIL(&default_audiodevs, e, next);
|
||||
audio_define_default(dev, &error_abort);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1770,6 +1750,7 @@ static AudioState *audio_init(Audiodev *dev, Error **errp)
|
||||
goto out;
|
||||
}
|
||||
} else {
|
||||
assert(!default_audio_state);
|
||||
for (;;) {
|
||||
AudiodevListEntry *e = QSIMPLEQ_FIRST(&default_audiodevs);
|
||||
if (!e) {
|
||||
@ -1808,36 +1789,27 @@ out:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
AudioState *audio_get_default_audio_state(Error **errp)
|
||||
{
|
||||
if (!default_audio_state) {
|
||||
default_audio_state = audio_init(NULL, errp);
|
||||
if (!default_audio_state) {
|
||||
if (!QSIMPLEQ_EMPTY(&audiodevs)) {
|
||||
error_append_hint(errp, "Perhaps you wanted to use -audio or set audiodev=%s?\n",
|
||||
QSIMPLEQ_FIRST(&audiodevs)->dev->id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return default_audio_state;
|
||||
}
|
||||
|
||||
bool AUD_register_card (const char *name, QEMUSoundCard *card, Error **errp)
|
||||
{
|
||||
if (!card->state) {
|
||||
if (!QTAILQ_EMPTY(&audio_states)) {
|
||||
/*
|
||||
* FIXME: once it is possible to create an arbitrary
|
||||
* default device via -audio DRIVER,OPT=VALUE (no "model"),
|
||||
* replace this special case with the default AudioState*,
|
||||
* storing it in a separate global. For now, keep the
|
||||
* warning to encourage moving off magic use of the first
|
||||
* -audiodev.
|
||||
*/
|
||||
if (QSIMPLEQ_EMPTY(&default_audiodevs)) {
|
||||
dolog("Device %s: audiodev default parameter is deprecated, please "
|
||||
"specify audiodev=%s\n", name,
|
||||
QTAILQ_FIRST(&audio_states)->dev->id);
|
||||
}
|
||||
card->state = QTAILQ_FIRST(&audio_states);
|
||||
} else {
|
||||
if (QSIMPLEQ_EMPTY(&default_audiodevs)) {
|
||||
audio_create_default_audiodevs();
|
||||
}
|
||||
card->state = audio_init(NULL, errp);
|
||||
if (!card->state) {
|
||||
if (!QSIMPLEQ_EMPTY(&audiodevs)) {
|
||||
error_append_hint(errp, "Perhaps you wanted to set audiodev=%s?",
|
||||
QSIMPLEQ_FIRST(&audiodevs)->dev->id);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
card->state = audio_get_default_audio_state(errp);
|
||||
if (!card->state) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2172,6 +2144,17 @@ void audio_define(Audiodev *dev)
|
||||
QSIMPLEQ_INSERT_TAIL(&audiodevs, e, next);
|
||||
}
|
||||
|
||||
void audio_define_default(Audiodev *dev, Error **errp)
|
||||
{
|
||||
AudiodevListEntry *e;
|
||||
|
||||
audio_validate_opts(dev, errp);
|
||||
|
||||
e = g_new0(AudiodevListEntry, 1);
|
||||
e->dev = dev;
|
||||
QSIMPLEQ_INSERT_TAIL(&default_audiodevs, e, next);
|
||||
}
|
||||
|
||||
void audio_init_audiodevs(void)
|
||||
{
|
||||
AudiodevListEntry *e;
|
||||
|
@ -169,11 +169,14 @@ void audio_sample_from_uint64(void *samples, int pos,
|
||||
uint64_t left, uint64_t right);
|
||||
|
||||
void audio_define(Audiodev *audio);
|
||||
void audio_define_default(Audiodev *dev, Error **errp);
|
||||
void audio_parse_option(const char *opt);
|
||||
void audio_create_default_audiodevs(void);
|
||||
void audio_init_audiodevs(void);
|
||||
void audio_help(void);
|
||||
|
||||
AudioState *audio_state_by_name(const char *name, Error **errp);
|
||||
AudioState *audio_get_default_audio_state(Error **errp);
|
||||
const char *audio_get_id(QEMUSoundCard *card);
|
||||
|
||||
#define DEFINE_AUDIO_PROPERTIES(_s, _f) \
|
||||
|
10
configure
vendored
10
configure
vendored
@ -252,7 +252,7 @@ docs="auto"
|
||||
EXESUF=""
|
||||
prefix="/usr/local"
|
||||
qemu_suffix="qemu"
|
||||
softmmu="yes"
|
||||
system="yes"
|
||||
linux_user=""
|
||||
bsd_user=""
|
||||
plugins="$default_feature"
|
||||
@ -740,9 +740,9 @@ for opt do
|
||||
;;
|
||||
--enable-tcg) tcg="enabled"
|
||||
;;
|
||||
--disable-system) softmmu="no"
|
||||
--disable-system) system="no"
|
||||
;;
|
||||
--enable-system) softmmu="yes"
|
||||
--enable-system) system="yes"
|
||||
;;
|
||||
--disable-user)
|
||||
linux_user="no" ;
|
||||
@ -864,7 +864,7 @@ else
|
||||
error_exit "user mode emulation not supported on this architecture"
|
||||
fi
|
||||
fi
|
||||
if [ "$softmmu" = "yes" ]; then
|
||||
if [ "$system" = "yes" ]; then
|
||||
mak_wilds="${mak_wilds} $source_path/configs/targets/*-softmmu.mak"
|
||||
fi
|
||||
|
||||
@ -1756,7 +1756,7 @@ for target in $target_list; do
|
||||
|
||||
case $target in
|
||||
xtensa*-linux-user)
|
||||
# the toolchain is not complete with headers, only build softmmu tests
|
||||
# the toolchain is not complete with headers, only build system tests
|
||||
continue
|
||||
;;
|
||||
*-softmmu)
|
||||
|
@ -202,7 +202,7 @@ static Property cpu_common_props[] = {
|
||||
prctl_unalign_sigbus, false),
|
||||
#else
|
||||
/*
|
||||
* Create a memory property for softmmu CPU object, so users can
|
||||
* Create a memory property for system CPU object, so users can
|
||||
* wire up its memory. The default if no link is set up is to use
|
||||
* the system address space.
|
||||
*/
|
||||
|
@ -23,12 +23,6 @@ deprecated.
|
||||
System emulator command line arguments
|
||||
--------------------------------------
|
||||
|
||||
Creating sound card devices without ``audiodev=`` property (since 4.2)
|
||||
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
When not using the deprecated legacy audio config, each sound card
|
||||
should specify an ``audiodev=`` property.
|
||||
|
||||
Short-form boolean options (since 6.0)
|
||||
''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
|
@ -442,11 +442,23 @@ line using a ``secret`` object instance.
|
||||
The ``-audiodev`` and ``-audio`` command line options are now the only
|
||||
way to specify audio backend settings.
|
||||
|
||||
Creating vnc without ``audiodev=`` property (removed in 8.2)
|
||||
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
||||
Using ``-audiodev`` to define the default audio backend (removed in 8.2)
|
||||
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
When using vnc, you should specify an ``audiodev=`` property if
|
||||
you plan to transmit audio through the VNC protocol.
|
||||
If no audiodev property is specified, previous versions would use the
|
||||
first ``-audiodev`` command line option as a fallback. Starting with
|
||||
version 8.2, audio backends created with ``-audiodev`` will only be
|
||||
used by clients (sound cards, machines with embedded sound hardware, VNC)
|
||||
that refer to it in an ``audiodev=`` property.
|
||||
|
||||
In order to configure a default audio backend, use the ``-audio``
|
||||
command line option without specifying a ``model``; while previous
|
||||
versions of QEMU required a model, starting with version 8.2
|
||||
QEMU does not require a model and will not create any sound card
|
||||
in this case.
|
||||
|
||||
Note that the default audio backend must be configured on the command
|
||||
line if the ``-nodefaults`` options is used.
|
||||
|
||||
QEMU Machine Protocol (QMP) commands
|
||||
------------------------------------
|
||||
|
@ -225,14 +225,14 @@ Target-dependent emulator sourcesets:
|
||||
The sourceset is only used for system emulators.
|
||||
|
||||
Each subdirectory in ``target/`` instead should add one sourceset to each
|
||||
of the ``target_arch`` and ``target_softmmu_arch``, which are used respectively
|
||||
of the ``target_arch`` and ``target_system_arch``, which are used respectively
|
||||
for all emulators and for system emulators only. For example::
|
||||
|
||||
arm_ss = ss.source_set()
|
||||
arm_system_ss = ss.source_set()
|
||||
...
|
||||
target_arch += {'arm': arm_ss}
|
||||
target_softmmu_arch += {'arm': arm_system_ss}
|
||||
target_system_arch += {'arm': arm_system_ss}
|
||||
|
||||
Module sourcesets:
|
||||
There are two dictionaries for modules: ``modules`` is used for
|
||||
|
@ -81,7 +81,7 @@ which you can run manually.
|
||||
QTest Protocol
|
||||
--------------
|
||||
|
||||
.. kernel-doc:: softmmu/qtest.c
|
||||
.. kernel-doc:: system/qtest.c
|
||||
:doc: QTest Protocol
|
||||
|
||||
|
||||
|
@ -1458,7 +1458,7 @@ TCG test dependencies
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The TCG tests are deliberately very light on dependencies and are
|
||||
either totally bare with minimal gcc lib support (for softmmu tests)
|
||||
either totally bare with minimal gcc lib support (for system-mode tests)
|
||||
or just glibc (for linux-user tests). This is because getting a cross
|
||||
compiler to work with additional libraries can be challenging.
|
||||
|
||||
|
@ -103,7 +103,7 @@ static inline int tohex(int v)
|
||||
}
|
||||
|
||||
/*
|
||||
* Connection helpers for both softmmu and user backends
|
||||
* Connection helpers for both system and user backends
|
||||
*/
|
||||
|
||||
void gdb_put_strbuf(void);
|
||||
@ -229,7 +229,7 @@ void gdb_breakpoint_remove_all(CPUState *cs);
|
||||
* @is_write: is it a write operation
|
||||
*
|
||||
* This function is specialised depending on the mode we are running
|
||||
* in. For softmmu guests we can switch the interpretation of the
|
||||
* in. For system guests we can switch the interpretation of the
|
||||
* address to a physical address.
|
||||
*/
|
||||
int gdb_target_memory_rw_debug(CPUState *cs, hwaddr addr,
|
||||
|
@ -1,6 +1,6 @@
|
||||
#
|
||||
# The main gdbstub still relies on per-build definitions of various
|
||||
# types. The bits pushed to softmmu/user.c try to use guest agnostic
|
||||
# types. The bits pushed to system/user.c try to use guest agnostic
|
||||
# types such as hwaddr.
|
||||
#
|
||||
|
||||
@ -12,7 +12,7 @@ gdb_system_ss = ss.source_set()
|
||||
|
||||
# We build two versions of gdbstub, one for each mode
|
||||
gdb_user_ss.add(files('gdbstub.c', 'user.c'))
|
||||
gdb_system_ss.add(files('gdbstub.c', 'softmmu.c'))
|
||||
gdb_system_ss.add(files('gdbstub.c', 'system.c'))
|
||||
|
||||
gdb_user_ss = gdb_user_ss.apply(config_targetos, strict: false)
|
||||
gdb_system_ss = gdb_system_ss.apply(config_targetos, strict: false)
|
||||
@ -23,15 +23,15 @@ libgdb_user = static_library('gdb_user',
|
||||
c_args: '-DCONFIG_USER_ONLY',
|
||||
build_by_default: false)
|
||||
|
||||
libgdb_softmmu = static_library('gdb_softmmu',
|
||||
libgdb_system = static_library('gdb_system',
|
||||
gdb_system_ss.sources() + genh,
|
||||
name_suffix: 'fa',
|
||||
build_by_default: false)
|
||||
|
||||
gdb_user = declare_dependency(link_whole: libgdb_user)
|
||||
user_ss.add(gdb_user)
|
||||
gdb_softmmu = declare_dependency(link_whole: libgdb_softmmu)
|
||||
system_ss.add(gdb_softmmu)
|
||||
gdb_system = declare_dependency(link_whole: libgdb_system)
|
||||
system_ss.add(gdb_system)
|
||||
|
||||
common_ss.add(files('syscalls.c'))
|
||||
|
||||
|
@ -104,7 +104,7 @@ static void gdb_chr_event(void *opaque, QEMUChrEvent event)
|
||||
}
|
||||
|
||||
/*
|
||||
* In softmmu mode we stop the VM and wait to send the syscall packet
|
||||
* In system-mode we stop the VM and wait to send the syscall packet
|
||||
* until notification that the CPU has stopped. This must be done
|
||||
* because if the packet is sent now the reply from the syscall
|
||||
* request could be received while the CPU is still in the running
|
@ -28,5 +28,5 @@ gdbstub_err_checksum_invalid(uint8_t ch) "got invalid command checksum digit: 0x
|
||||
gdbstub_err_checksum_incorrect(uint8_t expected, uint8_t got) "got command packet with incorrect checksum, expected=0x%02x, received=0x%02x"
|
||||
gdbstub_err_unexpected_runpkt(uint8_t ch) "unexpected packet (0x%02x) while target running"
|
||||
|
||||
# softmmu.c
|
||||
# system.c
|
||||
gdbstub_hit_watchpoint(const char *type, int cpu_gdb_index, uint64_t vaddr) "Watchpoint hit, type=\"%s\" cpu=%d, vaddr=0x%" PRIx64 ""
|
||||
|
@ -228,8 +228,8 @@ static void cpu_common_initfn(Object *obj)
|
||||
cpu->cpu_index = UNASSIGNED_CPU_INDEX;
|
||||
cpu->cluster_index = UNASSIGNED_CLUSTER_INDEX;
|
||||
cpu->gdb_num_regs = cpu->gdb_num_g_regs = cc->gdb_num_core_regs;
|
||||
/* *-user doesn't have configurable SMP topology */
|
||||
/* the default value is changed by qemu_init_vcpu() for softmmu */
|
||||
/* user-mode doesn't have configurable SMP topology */
|
||||
/* the default value is changed by qemu_init_vcpu() for system-mode */
|
||||
cpu->nr_cores = 1;
|
||||
cpu->nr_threads = 1;
|
||||
cpu->cflags_next_tb = -1;
|
||||
|
@ -43,8 +43,8 @@
|
||||
* See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80878
|
||||
*
|
||||
* This interpretation is not especially helpful for QEMU.
|
||||
* For softmmu, all RAM is always read/write from the hypervisor.
|
||||
* For user-only, if the guest doesn't implement such an __atomic_read
|
||||
* For system-mode, all RAM is always read/write from the hypervisor.
|
||||
* For user-mode, if the guest doesn't implement such an __atomic_read
|
||||
* then the host need not worry about it either.
|
||||
*
|
||||
* Moreover, using libatomic is not an option, because its interface is
|
||||
|
@ -7,8 +7,12 @@
|
||||
* This code is licensed under the GPL
|
||||
*/
|
||||
|
||||
#ifndef SEMIHOSTING_SOFTMMU_UACCESS_H
|
||||
#define SEMIHOSTING_SOFTMMU_UACCESS_H
|
||||
#ifndef SEMIHOSTING_UACCESS_H
|
||||
#define SEMIHOSTING_UACCESS_H
|
||||
|
||||
#ifdef CONFIG_USER_ONLY
|
||||
#error Cannot include semihosting/uaccess.h from user emulation
|
||||
#endif
|
||||
|
||||
#include "cpu.h"
|
||||
|
||||
@ -42,18 +46,18 @@
|
||||
|
||||
#define put_user_ual(arg, p) put_user_u32(arg, p)
|
||||
|
||||
void *softmmu_lock_user(CPUArchState *env, target_ulong addr,
|
||||
void *uaccess_lock_user(CPUArchState *env, target_ulong addr,
|
||||
target_ulong len, bool copy);
|
||||
#define lock_user(type, p, len, copy) softmmu_lock_user(env, p, len, copy)
|
||||
#define lock_user(type, p, len, copy) uaccess_lock_user(env, p, len, copy)
|
||||
|
||||
char *softmmu_lock_user_string(CPUArchState *env, target_ulong addr);
|
||||
#define lock_user_string(p) softmmu_lock_user_string(env, p)
|
||||
char *uaccess_lock_user_string(CPUArchState *env, target_ulong addr);
|
||||
#define lock_user_string(p) uaccess_lock_user_string(env, p)
|
||||
|
||||
void softmmu_unlock_user(CPUArchState *env, void *p,
|
||||
void uaccess_unlock_user(CPUArchState *env, void *p,
|
||||
target_ulong addr, target_ulong len);
|
||||
#define unlock_user(s, args, len) softmmu_unlock_user(env, s, args, len)
|
||||
#define unlock_user(s, args, len) uaccess_unlock_user(env, s, args, len)
|
||||
|
||||
ssize_t softmmu_strlen_user(CPUArchState *env, target_ulong addr);
|
||||
#define target_strlen(p) softmmu_strlen_user(env, p)
|
||||
ssize_t uaccess_strlen_user(CPUArchState *env, target_ulong addr);
|
||||
#define target_strlen(p) uaccess_strlen_user(env, p)
|
||||
|
||||
#endif /* SEMIHOSTING_SOFTMMU_UACCESS_H */
|
@ -20,13 +20,10 @@
|
||||
#include "cpu.h"
|
||||
|
||||
#ifdef CONFIG_HVF
|
||||
uint32_t hvf_get_supported_cpuid(uint32_t func, uint32_t idx,
|
||||
int reg);
|
||||
extern bool hvf_allowed;
|
||||
#define hvf_enabled() (hvf_allowed)
|
||||
#else /* !CONFIG_HVF */
|
||||
#define hvf_enabled() 0
|
||||
#define hvf_get_supported_cpuid(func, idx, reg) 0
|
||||
#endif /* !CONFIG_HVF */
|
||||
|
||||
#endif /* NEED_CPU_H */
|
||||
|
@ -11,7 +11,7 @@
|
||||
|
||||
#include "qapi/qapi-commands-run-state.h"
|
||||
|
||||
/* in softmmu/runstate-action.c */
|
||||
/* in system/runstate-action.c */
|
||||
extern RebootAction reboot_action;
|
||||
extern ShutdownAction shutdown_action;
|
||||
extern PanicAction panic_action;
|
||||
|
@ -265,7 +265,7 @@ void tcg_gen_exit_tb(const TranslationBlock *tb, unsigned idx);
|
||||
*
|
||||
* See tcg/README for more info about this TCG operation.
|
||||
*
|
||||
* NOTE: In softmmu emulation, direct jumps with goto_tb are only safe within
|
||||
* NOTE: In system emulation, direct jumps with goto_tb are only safe within
|
||||
* the pages this TB resides in because we don't take care of direct jumps when
|
||||
* address mapping changes, e.g. in tlb_flush(). In user mode, there's only a
|
||||
* static address translation, so the destination address is always valid, TBs
|
||||
|
22
meson.build
22
meson.build
@ -3198,7 +3198,7 @@ modules = {}
|
||||
target_modules = {}
|
||||
hw_arch = {}
|
||||
target_arch = {}
|
||||
target_softmmu_arch = {}
|
||||
target_system_arch = {}
|
||||
target_user_arch = {}
|
||||
|
||||
###############
|
||||
@ -3291,7 +3291,7 @@ if have_system
|
||||
'hw/gpio',
|
||||
'migration',
|
||||
'net',
|
||||
'softmmu',
|
||||
'system',
|
||||
'ui',
|
||||
'hw/remote',
|
||||
]
|
||||
@ -3418,7 +3418,7 @@ endif
|
||||
common_ss.add(files('cpu-common.c'))
|
||||
specific_ss.add(files('cpu-target.c'))
|
||||
|
||||
subdir('softmmu')
|
||||
subdir('system')
|
||||
|
||||
# Work around a gcc bug/misfeature wherein constant propagation looks
|
||||
# through an alias:
|
||||
@ -3480,7 +3480,7 @@ modinfo_generate = find_program('scripts/modinfo-generate.py')
|
||||
modinfo_files = []
|
||||
|
||||
block_mods = []
|
||||
softmmu_mods = []
|
||||
system_mods = []
|
||||
foreach d, list : modules
|
||||
if not (d == 'block' ? have_block : have_system)
|
||||
continue
|
||||
@ -3494,7 +3494,7 @@ foreach d, list : modules
|
||||
if d == 'block'
|
||||
block_mods += sl
|
||||
else
|
||||
softmmu_mods += sl
|
||||
system_mods += sl
|
||||
endif
|
||||
if module_ss.sources() != []
|
||||
# FIXME: Should use sl.extract_all_objects(recursive: true) as
|
||||
@ -3538,7 +3538,7 @@ foreach d, list : target_modules
|
||||
include_directories: target_inc,
|
||||
c_args: c_args,
|
||||
pic: true)
|
||||
softmmu_mods += sl
|
||||
system_mods += sl
|
||||
# FIXME: Should use sl.extract_all_objects(recursive: true) too.
|
||||
modinfo_files += custom_target(module_name + '.modinfo',
|
||||
output: module_name + '.modinfo',
|
||||
@ -3581,7 +3581,7 @@ block_syms = custom_target('block.syms', output: 'block.syms',
|
||||
capture: true,
|
||||
command: [undefsym, nm, '@INPUT@'])
|
||||
qemu_syms = custom_target('qemu.syms', output: 'qemu.syms',
|
||||
input: [libqemuutil, softmmu_mods],
|
||||
input: [libqemuutil, system_mods],
|
||||
capture: true,
|
||||
command: [undefsym, nm, '@INPUT@'])
|
||||
|
||||
@ -3666,7 +3666,7 @@ common_ss.add(hwcore)
|
||||
###########
|
||||
|
||||
emulator_modules = []
|
||||
foreach m : block_mods + softmmu_mods
|
||||
foreach m : block_mods + system_mods
|
||||
emulator_modules += shared_module(m.name(),
|
||||
build_by_default: true,
|
||||
name_prefix: '',
|
||||
@ -3718,7 +3718,7 @@ foreach target : target_dirs
|
||||
endif
|
||||
if target.endswith('-softmmu')
|
||||
target_type='system'
|
||||
t = target_softmmu_arch[target_base_arch].apply(config_target, strict: false)
|
||||
t = target_system_arch[target_base_arch].apply(config_target, strict: false)
|
||||
arch_srcs += t.sources()
|
||||
arch_deps += t.dependencies()
|
||||
|
||||
@ -3797,14 +3797,14 @@ foreach target : target_dirs
|
||||
execs = [{
|
||||
'name': 'qemu-system-' + target_name,
|
||||
'win_subsystem': 'console',
|
||||
'sources': files('softmmu/main.c'),
|
||||
'sources': files('system/main.c'),
|
||||
'dependencies': []
|
||||
}]
|
||||
if targetos == 'windows' and (sdl.found() or gtk.found())
|
||||
execs += [{
|
||||
'name': 'qemu-system-' + target_name + 'w',
|
||||
'win_subsystem': 'windows',
|
||||
'sources': files('softmmu/main.c'),
|
||||
'sources': files('system/main.c'),
|
||||
'dependencies': []
|
||||
}]
|
||||
endif
|
||||
|
@ -728,20 +728,22 @@ ERST
|
||||
|
||||
|
||||
DEF("audio", HAS_ARG, QEMU_OPTION_audio,
|
||||
"-audio [driver=]driver[,prop[=value][,...]]\n"
|
||||
" specifies default audio backend when `audiodev` is not\n"
|
||||
" used to create a machine or sound device;"
|
||||
" options are the same as for -audiodev\n"
|
||||
"-audio [driver=]driver,model=value[,prop[=value][,...]]\n"
|
||||
" specifies the audio backend and device to use;\n"
|
||||
" apart from 'model', options are the same as for -audiodev.\n"
|
||||
" use '-audio model=help' to show possible devices.\n",
|
||||
QEMU_ARCH_ALL)
|
||||
SRST
|
||||
``-audio [driver=]driver,model=value[,prop[=value][,...]]``
|
||||
This option is a shortcut for configuring both the guest audio
|
||||
hardware and the host audio backend in one go.
|
||||
The driver option is the same as with the corresponding ``-audiodev`` option below.
|
||||
The guest hardware model can be set with ``model=modelname``.
|
||||
|
||||
Use ``driver=help`` to list the available drivers,
|
||||
and ``model=help`` to list the available device types.
|
||||
``-audio [driver=]driver[,model=value][,prop[=value][,...]]``
|
||||
If the ``model`` option is specified, ``-audio`` is a shortcut
|
||||
for configuring both the guest audio hardware and the host audio
|
||||
backend in one go. The guest hardware model can be set with
|
||||
``model=modelname``. Use ``model=help`` to list the available
|
||||
device types.
|
||||
|
||||
The following two example do exactly the same, to show how ``-audio``
|
||||
can be used to shorten the command line length:
|
||||
@ -750,6 +752,17 @@ SRST
|
||||
|
||||
|qemu_system| -audiodev pa,id=pa -device sb16,audiodev=pa
|
||||
|qemu_system| -audio pa,model=sb16
|
||||
|
||||
If the ``model`` option is not specified, ``-audio`` is used to
|
||||
configure a default audio backend that will be used whenever the
|
||||
``audiodev`` property is not set on a device or machine. In
|
||||
particular, ``-audio none`` ensures that no audio is produced even
|
||||
for machines that have embedded sound hardware.
|
||||
|
||||
In both cases, the driver option is the same as with the corresponding
|
||||
``-audiodev`` option below. Use ``driver=help`` to list the available
|
||||
drivers.
|
||||
|
||||
ERST
|
||||
|
||||
DEF("audiodev", HAS_ARG, QEMU_OPTION_audiodev,
|
||||
|
@ -466,7 +466,7 @@ sub top_of_kernel_tree {
|
||||
my @tree_check = (
|
||||
"COPYING", "MAINTAINERS", "Makefile",
|
||||
"README.rst", "docs", "VERSION",
|
||||
"linux-user", "softmmu"
|
||||
"linux-user", "system"
|
||||
);
|
||||
|
||||
foreach my $check (@tree_check) {
|
||||
|
@ -148,7 +148,7 @@ tcg
|
||||
~ (/qemu)?(/accel/tcg|/replay|/tcg)/.*
|
||||
|
||||
sysemu
|
||||
~ (/qemu)?(/softmmu/.*|/accel/.*)
|
||||
~ (/qemu)?(/system/.*|/accel/.*)
|
||||
|
||||
(headers)
|
||||
~ (/qemu)?(/include/.*)
|
||||
|
@ -796,7 +796,7 @@ sub top_of_tree {
|
||||
&& (-d "${lk_path}docs")
|
||||
&& (-f "${lk_path}VERSION")
|
||||
&& (-d "${lk_path}linux-user/")
|
||||
&& (-d "${lk_path}softmmu/")) {
|
||||
&& (-d "${lk_path}system/")) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
|
@ -43,10 +43,10 @@ EXTRA_CFLAGS="$CFLAGS -U __OPTIMIZE__"
|
||||
if ! { [ -e "./COPYING" ] &&
|
||||
[ -e "./MAINTAINERS" ] &&
|
||||
[ -e "./Makefile" ] &&
|
||||
[ -e "./docs" ] &&
|
||||
[ -d "./docs" ] &&
|
||||
[ -e "./VERSION" ] &&
|
||||
[ -e "./linux-user" ] &&
|
||||
[ -e "./softmmu" ];} ; then
|
||||
[ -d "./linux-user" ] &&
|
||||
[ -d "./system" ];} ; then
|
||||
fatal "Please run the script from the top of the QEMU tree"
|
||||
fi
|
||||
|
||||
|
@ -202,13 +202,13 @@ static LayoutInfo common_semi_find_bases(CPUState *cs)
|
||||
* The semihosting API has no concept of its errno being thread-safe,
|
||||
* as the API design predates SMP CPUs and was intended as a simple
|
||||
* real-hardware set of debug functionality. For QEMU, we make the
|
||||
* errno be per-thread in linux-user mode; in softmmu it is a simple
|
||||
* errno be per-thread in linux-user mode; in system-mode it is a simple
|
||||
* global, and we assume that the guest takes care of avoiding any races.
|
||||
*/
|
||||
#ifndef CONFIG_USER_ONLY
|
||||
static target_ulong syscall_err;
|
||||
|
||||
#include "semihosting/softmmu-uaccess.h"
|
||||
#include "semihosting/uaccess.h"
|
||||
#endif
|
||||
|
||||
static inline uint32_t get_swi_errno(CPUState *cs)
|
||||
|
@ -12,7 +12,7 @@
|
||||
* linux-user targets. However in that use case no configuration of
|
||||
* the outputs and command lines is supported.
|
||||
*
|
||||
* The config module is common to all softmmu targets however as vl.c
|
||||
* The config module is common to all system targets however as vl.c
|
||||
* needs to link against the helpers.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
@ -15,7 +15,7 @@
|
||||
#ifdef CONFIG_USER_ONLY
|
||||
#include "qemu.h"
|
||||
#else
|
||||
#include "semihosting/softmmu-uaccess.h"
|
||||
#include "semihosting/uaccess.h"
|
||||
#include CONFIG_DEVICES
|
||||
#endif
|
||||
|
||||
|
@ -15,7 +15,7 @@
|
||||
#ifdef CONFIG_USER_ONLY
|
||||
#include "qemu.h"
|
||||
#else
|
||||
#include "semihosting/softmmu-uaccess.h"
|
||||
#include "semihosting/uaccess.h"
|
||||
#endif
|
||||
|
||||
|
||||
|
@ -9,9 +9,9 @@
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "exec/exec-all.h"
|
||||
#include "semihosting/softmmu-uaccess.h"
|
||||
#include "semihosting/uaccess.h"
|
||||
|
||||
void *softmmu_lock_user(CPUArchState *env, target_ulong addr,
|
||||
void *uaccess_lock_user(CPUArchState *env, target_ulong addr,
|
||||
target_ulong len, bool copy)
|
||||
{
|
||||
void *p = malloc(len);
|
||||
@ -24,7 +24,7 @@ void *softmmu_lock_user(CPUArchState *env, target_ulong addr,
|
||||
return p;
|
||||
}
|
||||
|
||||
ssize_t softmmu_strlen_user(CPUArchState *env, target_ulong addr)
|
||||
ssize_t uaccess_strlen_user(CPUArchState *env, target_ulong addr)
|
||||
{
|
||||
int mmu_idx = cpu_mmu_index(env, false);
|
||||
size_t len = 0;
|
||||
@ -72,16 +72,16 @@ ssize_t softmmu_strlen_user(CPUArchState *env, target_ulong addr)
|
||||
}
|
||||
}
|
||||
|
||||
char *softmmu_lock_user_string(CPUArchState *env, target_ulong addr)
|
||||
char *uaccess_lock_user_string(CPUArchState *env, target_ulong addr)
|
||||
{
|
||||
ssize_t len = softmmu_strlen_user(env, addr);
|
||||
ssize_t len = uaccess_strlen_user(env, addr);
|
||||
if (len < 0) {
|
||||
return NULL;
|
||||
}
|
||||
return softmmu_lock_user(env, addr, len + 1, true);
|
||||
return uaccess_lock_user(env, addr, len + 1, true);
|
||||
}
|
||||
|
||||
void softmmu_unlock_user(CPUArchState *env, void *p,
|
||||
void uaccess_unlock_user(CPUArchState *env, void *p,
|
||||
target_ulong addr, target_ulong len)
|
||||
{
|
||||
if (len) {
|
||||
|
@ -1 +0,0 @@
|
||||
#include "trace/trace-softmmu.h"
|
@ -1,9 +1,9 @@
|
||||
/*
|
||||
* Semihosting Stubs for SoftMMU
|
||||
* Semihosting Stubs for system emulation
|
||||
*
|
||||
* Copyright (c) 2019 Linaro Ltd
|
||||
*
|
||||
* Stubs for SoftMMU targets that don't actually do semihosting.
|
||||
* Stubs for system targets that don't actually do semihosting.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
|
@ -36,7 +36,7 @@
|
||||
#include "hw/core/cpu.h"
|
||||
#include "sysemu/cpu-timers.h"
|
||||
#include "sysemu/cpu-throttle.h"
|
||||
#include "timers-state.h"
|
||||
#include "sysemu/cpu-timers-internal.h"
|
||||
|
||||
/* clock and ticks */
|
||||
|
@ -3638,7 +3638,7 @@ void memory_region_init_rom_device(MemoryRegion *mr,
|
||||
}
|
||||
|
||||
/*
|
||||
* Support softmmu builds with CONFIG_FUZZ using a weak symbol and a stub for
|
||||
* Support system builds with CONFIG_FUZZ using a weak symbol and a stub for
|
||||
* the fuzz_dma_read_cb callback
|
||||
*/
|
||||
#ifdef CONFIG_FUZZ
|
@ -2301,8 +2301,10 @@ RAMBlock *qemu_ram_block_by_name(const char *name)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Some of the softmmu routines need to translate from a host pointer
|
||||
(typically a TLB entry) back to a ram offset. */
|
||||
/*
|
||||
* Some of the system routines need to translate from a host pointer
|
||||
* (typically a TLB entry) back to a ram offset.
|
||||
*/
|
||||
ram_addr_t qemu_ram_addr_from_host(void *ptr)
|
||||
{
|
||||
RAMBlock *block;
|
@ -21,7 +21,7 @@ flatview_destroy(void *view, void *root) "%p (root %p)"
|
||||
flatview_destroy_rcu(void *view, void *root) "%p (root %p)"
|
||||
global_dirty_changed(unsigned int bitmask) "bitmask 0x%"PRIx32
|
||||
|
||||
# softmmu.c
|
||||
# cpus.c
|
||||
vm_stop_flush_all(int ret) "ret %d"
|
||||
|
||||
# vl.c
|
1
system/trace.h
Normal file
1
system/trace.h
Normal file
@ -0,0 +1 @@
|
||||
#include "trace/trace-system.h"
|
@ -184,6 +184,7 @@ static const char *qtest_log;
|
||||
static bool opt_one_insn_per_tb;
|
||||
|
||||
static int has_defaults = 1;
|
||||
static int default_audio = 1;
|
||||
static int default_serial = 1;
|
||||
static int default_parallel = 1;
|
||||
static int default_monitor = 1;
|
||||
@ -1327,6 +1328,7 @@ static void qemu_disable_default_devices(void)
|
||||
default_sdcard = 0;
|
||||
}
|
||||
if (!has_defaults) {
|
||||
default_audio = 0;
|
||||
default_monitor = 0;
|
||||
default_net = 0;
|
||||
default_vga = 0;
|
||||
@ -1963,6 +1965,9 @@ static void qemu_create_early_backends(void)
|
||||
*/
|
||||
configure_blockdev(&bdo_queue, machine_class, snapshot);
|
||||
audio_init_audiodevs();
|
||||
if (default_audio) {
|
||||
audio_create_default_audiodevs();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -2925,14 +2930,16 @@ void qemu_init(int argc, char **argv)
|
||||
break;
|
||||
#endif
|
||||
case QEMU_OPTION_audiodev:
|
||||
default_audio = 0;
|
||||
audio_parse_option(optarg);
|
||||
break;
|
||||
case QEMU_OPTION_audio: {
|
||||
bool help;
|
||||
char *model;
|
||||
char *model = NULL;
|
||||
Audiodev *dev = NULL;
|
||||
Visitor *v;
|
||||
QDict *dict = keyval_parse(optarg, "driver", &help, &error_fatal);
|
||||
default_audio = 0;
|
||||
if (help || (qdict_haskey(dict, "driver") &&
|
||||
is_help_option(qdict_get_str(dict, "driver")))) {
|
||||
audio_help();
|
||||
@ -2941,22 +2948,25 @@ void qemu_init(int argc, char **argv)
|
||||
if (!qdict_haskey(dict, "id")) {
|
||||
qdict_put_str(dict, "id", "audiodev0");
|
||||
}
|
||||
if (!qdict_haskey(dict, "model")) {
|
||||
error_setg(&error_fatal, "Parameter 'model' is missing");
|
||||
}
|
||||
model = g_strdup(qdict_get_str(dict, "model"));
|
||||
qdict_del(dict, "model");
|
||||
if (is_help_option(model)) {
|
||||
show_valid_soundhw();
|
||||
exit(0);
|
||||
if (qdict_haskey(dict, "model")) {
|
||||
model = g_strdup(qdict_get_str(dict, "model"));
|
||||
qdict_del(dict, "model");
|
||||
if (is_help_option(model)) {
|
||||
show_valid_soundhw();
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
v = qobject_input_visitor_new_keyval(QOBJECT(dict));
|
||||
qobject_unref(dict);
|
||||
visit_type_Audiodev(v, NULL, &dev, &error_fatal);
|
||||
visit_free(v);
|
||||
audio_define(dev);
|
||||
select_soundhw(model, dev->id);
|
||||
g_free(model);
|
||||
if (model) {
|
||||
audio_define(dev);
|
||||
select_soundhw(model, dev->id);
|
||||
g_free(model);
|
||||
} else {
|
||||
audio_define_default(dev, &error_fatal);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case QEMU_OPTION_h:
|
@ -15,4 +15,4 @@ alpha_system_ss = ss.source_set()
|
||||
alpha_system_ss.add(files('machine.c'))
|
||||
|
||||
target_arch += {'alpha': alpha_ss}
|
||||
target_softmmu_arch += {'alpha': alpha_system_ss}
|
||||
target_system_arch += {'alpha': alpha_system_ss}
|
||||
|
@ -35,4 +35,4 @@ else
|
||||
endif
|
||||
|
||||
target_arch += {'arm': arm_ss}
|
||||
target_softmmu_arch += {'arm': arm_system_ss}
|
||||
target_system_arch += {'arm': arm_system_ss}
|
||||
|
@ -17,4 +17,4 @@ avr_ss.add(files(
|
||||
avr_system_ss.add(files('machine.c'))
|
||||
|
||||
target_arch += {'avr': avr_ss}
|
||||
target_softmmu_arch += {'avr': avr_system_ss}
|
||||
target_system_arch += {'avr': avr_system_ss}
|
||||
|
@ -14,4 +14,4 @@ cris_system_ss.add(files(
|
||||
))
|
||||
|
||||
target_arch += {'cris': cris_ss}
|
||||
target_softmmu_arch += {'cris': cris_system_ss}
|
||||
target_system_arch += {'cris': cris_system_ss}
|
||||
|
@ -20,4 +20,4 @@ hppa_system_ss.add(files(
|
||||
))
|
||||
|
||||
target_arch += {'hppa': hppa_ss}
|
||||
target_softmmu_arch += {'hppa': hppa_system_ss}
|
||||
target_system_arch += {'hppa': hppa_system_ss}
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include "tcg/helper-tcg.h"
|
||||
#include "sysemu/reset.h"
|
||||
#include "sysemu/hvf.h"
|
||||
#include "hvf/hvf-i386.h"
|
||||
#include "kvm/kvm_i386.h"
|
||||
#include "sev.h"
|
||||
#include "qapi/error.h"
|
||||
@ -718,7 +719,7 @@ void x86_cpu_vendor_words2str(char *dst, uint32_t vendor1,
|
||||
CPUID_7_0_EBX_HLE
|
||||
CPUID_7_0_EBX_INVPCID, CPUID_7_0_EBX_RTM */
|
||||
|
||||
#if defined CONFIG_SOFTMMU || defined CONFIG_LINUX
|
||||
#if !defined CONFIG_USER_ONLY || defined CONFIG_LINUX
|
||||
#define TCG_7_0_ECX_RDPID CPUID_7_0_ECX_RDPID
|
||||
#else
|
||||
#define TCG_7_0_ECX_RDPID 0
|
||||
|
@ -15,6 +15,7 @@
|
||||
#include "hw/boards.h"
|
||||
#include "sysemu/hvf.h"
|
||||
#include "hw/core/accel-cpu.h"
|
||||
#include "hvf-i386.h"
|
||||
|
||||
static void hvf_cpu_max_instance_init(X86CPU *cpu)
|
||||
{
|
||||
|
@ -16,11 +16,7 @@
|
||||
#ifndef HVF_I386_H
|
||||
#define HVF_I386_H
|
||||
|
||||
#include "qemu/accel.h"
|
||||
#include "sysemu/hvf.h"
|
||||
#include "sysemu/hvf_int.h"
|
||||
#include "cpu.h"
|
||||
#include "x86.h"
|
||||
uint32_t hvf_get_supported_cpuid(uint32_t func, uint32_t idx, int reg);
|
||||
|
||||
void hvf_handle_io(CPUArchState *, uint16_t, void *, int, int, int);
|
||||
|
||||
|
@ -25,6 +25,7 @@
|
||||
#include "x86.h"
|
||||
#include "vmx.h"
|
||||
#include "sysemu/hvf.h"
|
||||
#include "hvf-i386.h"
|
||||
|
||||
static bool xgetbv(uint32_t cpuid_ecx, uint32_t idx, uint64_t *xcr)
|
||||
{
|
||||
|
@ -1,14 +1,14 @@
|
||||
i386_softmmu_kvm_ss = ss.source_set()
|
||||
i386_kvm_ss = ss.source_set()
|
||||
|
||||
i386_softmmu_kvm_ss.add(files(
|
||||
i386_kvm_ss.add(files(
|
||||
'kvm.c',
|
||||
'kvm-cpu.c',
|
||||
))
|
||||
|
||||
i386_softmmu_kvm_ss.add(when: 'CONFIG_XEN_EMU', if_true: files('xen-emu.c'))
|
||||
i386_kvm_ss.add(when: 'CONFIG_XEN_EMU', if_true: files('xen-emu.c'))
|
||||
|
||||
i386_softmmu_kvm_ss.add(when: 'CONFIG_SEV', if_false: files('sev-stub.c'))
|
||||
i386_kvm_ss.add(when: 'CONFIG_SEV', if_false: files('sev-stub.c'))
|
||||
|
||||
i386_system_ss.add(when: 'CONFIG_HYPERV', if_true: files('hyperv.c'), if_false: files('hyperv-stub.c'))
|
||||
|
||||
i386_system_ss.add_all(when: 'CONFIG_KVM', if_true: i386_softmmu_kvm_ss)
|
||||
i386_system_ss.add_all(when: 'CONFIG_KVM', if_true: i386_kvm_ss)
|
||||
|
@ -31,5 +31,5 @@ subdir('hvf')
|
||||
subdir('tcg')
|
||||
|
||||
target_arch += {'i386': i386_ss}
|
||||
target_softmmu_arch += {'i386': i386_system_ss}
|
||||
target_system_arch += {'i386': i386_system_ss}
|
||||
target_user_arch += {'i386': i386_user_ss}
|
||||
|
@ -134,7 +134,7 @@ void helper_wrpkru(CPUX86State *env, uint32_t ecx, uint64_t val)
|
||||
|
||||
target_ulong HELPER(rdpid)(CPUX86State *env)
|
||||
{
|
||||
#if defined CONFIG_SOFTMMU
|
||||
#if !defined CONFIG_USER_ONLY
|
||||
return env->tsc_aux;
|
||||
#elif defined CONFIG_LINUX && defined CONFIG_GETCPU
|
||||
unsigned cpu, node;
|
||||
|
@ -178,10 +178,10 @@ typedef struct DisasContext {
|
||||
#else
|
||||
#define CODE64(S) (((S)->flags & HF_CS64_MASK) != 0)
|
||||
#endif
|
||||
#if defined(CONFIG_SOFTMMU) && !defined(TARGET_X86_64)
|
||||
#define LMA(S) false
|
||||
#else
|
||||
#if defined(CONFIG_USER_ONLY) || defined(TARGET_X86_64)
|
||||
#define LMA(S) (((S)->flags & HF_LMA_MASK) != 0)
|
||||
#else
|
||||
#define LMA(S) false
|
||||
#endif
|
||||
|
||||
#ifdef TARGET_X86_64
|
||||
|
@ -30,4 +30,4 @@ common_ss.add(when: 'CONFIG_LOONGARCH_DIS', if_true: [files('disas.c'), gen])
|
||||
loongarch_ss.add_all(when: 'CONFIG_TCG', if_true: [loongarch_tcg_ss])
|
||||
|
||||
target_arch += {'loongarch': loongarch_ss}
|
||||
target_softmmu_arch += {'loongarch': loongarch_system_ss}
|
||||
target_system_arch += {'loongarch': loongarch_system_ss}
|
||||
|
@ -27,7 +27,7 @@
|
||||
#include "gdbstub/syscalls.h"
|
||||
#include "gdbstub/helpers.h"
|
||||
#include "semihosting/syscalls.h"
|
||||
#include "semihosting/softmmu-uaccess.h"
|
||||
#include "semihosting/uaccess.h"
|
||||
#include "hw/boards.h"
|
||||
#include "qemu/log.h"
|
||||
|
||||
|
@ -16,4 +16,4 @@ m68k_system_ss.add(files(
|
||||
))
|
||||
|
||||
target_arch += {'m68k': m68k_ss}
|
||||
target_softmmu_arch += {'m68k': m68k_system_ss}
|
||||
target_system_arch += {'m68k': m68k_system_ss}
|
||||
|
@ -17,4 +17,4 @@ microblaze_system_ss.add(files(
|
||||
))
|
||||
|
||||
target_arch += {'microblaze': microblaze_ss}
|
||||
target_softmmu_arch += {'microblaze': microblaze_system_ss}
|
||||
target_system_arch += {'microblaze': microblaze_system_ss}
|
||||
|
@ -19,5 +19,5 @@ endif
|
||||
mips_ss.add(when: 'CONFIG_KVM', if_true: files('kvm.c'))
|
||||
|
||||
target_arch += {'mips': mips_ss}
|
||||
target_softmmu_arch += {'mips': mips_system_ss}
|
||||
target_system_arch += {'mips': mips_system_ss}
|
||||
target_user_arch += {'mips': mips_user_ss}
|
||||
|
@ -22,7 +22,7 @@
|
||||
#include "qemu/log.h"
|
||||
#include "gdbstub/syscalls.h"
|
||||
#include "gdbstub/helpers.h"
|
||||
#include "semihosting/softmmu-uaccess.h"
|
||||
#include "semihosting/uaccess.h"
|
||||
#include "semihosting/semihost.h"
|
||||
#include "semihosting/console.h"
|
||||
#include "semihosting/syscalls.h"
|
||||
|
@ -14,4 +14,4 @@ nios2_system_ss.add(files(
|
||||
))
|
||||
|
||||
target_arch += {'nios2': nios2_ss}
|
||||
target_softmmu_arch += {'nios2': nios2_system_ss}
|
||||
target_system_arch += {'nios2': nios2_system_ss}
|
||||
|
@ -26,7 +26,7 @@
|
||||
#include "gdbstub/syscalls.h"
|
||||
#include "gdbstub/helpers.h"
|
||||
#include "semihosting/syscalls.h"
|
||||
#include "semihosting/softmmu-uaccess.h"
|
||||
#include "semihosting/uaccess.h"
|
||||
#include "qemu/log.h"
|
||||
|
||||
#define HOSTED_EXIT 0
|
||||
|
@ -22,4 +22,4 @@ openrisc_system_ss.add(files(
|
||||
))
|
||||
|
||||
target_arch += {'openrisc': openrisc_ss}
|
||||
target_softmmu_arch += {'openrisc': openrisc_system_ss}
|
||||
target_system_arch += {'openrisc': openrisc_system_ss}
|
||||
|
@ -55,4 +55,4 @@ ppc_system_ss.add(when: 'TARGET_PPC64', if_true: files(
|
||||
))
|
||||
|
||||
target_arch += {'ppc': ppc_ss}
|
||||
target_softmmu_arch += {'ppc': ppc_system_ss}
|
||||
target_system_arch += {'ppc': ppc_system_ss}
|
||||
|
@ -39,4 +39,4 @@ riscv_system_ss.add(files(
|
||||
))
|
||||
|
||||
target_arch += {'riscv': riscv_ss}
|
||||
target_softmmu_arch += {'riscv': riscv_system_ss}
|
||||
target_system_arch += {'riscv': riscv_system_ss}
|
||||
|
@ -100,7 +100,7 @@ static inline target_ulong adjust_addr(CPURISCVState *env, target_ulong addr)
|
||||
/*
|
||||
* This function checks watchpoint before real load operation.
|
||||
*
|
||||
* In softmmu mode, the TLB API probe_access is enough for watchpoint check.
|
||||
* In system mode, the TLB API probe_access is enough for watchpoint check.
|
||||
* In user mode, there is no watchpoint support now.
|
||||
*
|
||||
* It will trigger an exception if there is no mapping in TLB
|
||||
|
@ -13,4 +13,4 @@ rx_ss.add(files(
|
||||
'disas.c'))
|
||||
|
||||
target_arch += {'rx': rx_ss}
|
||||
target_softmmu_arch += {'rx': ss.source_set()}
|
||||
target_system_arch += {'rx': ss.source_set()}
|
||||
|
@ -40,5 +40,5 @@ subdir('tcg')
|
||||
subdir('kvm')
|
||||
|
||||
target_arch += {'s390x': s390x_ss}
|
||||
target_softmmu_arch += {'s390x': s390x_system_ss}
|
||||
target_system_arch += {'s390x': s390x_system_ss}
|
||||
target_user_arch += {'s390x': s390x_user_ss}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user