aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--.gitlab-ci.d/buildtest-template.yml4
-rw-r--r--.gitlab-ci.d/buildtest.yml6
-rw-r--r--.gitmodules15
-rw-r--r--Makefile12
-rw-r--r--accel/tcg/cpu-exec.c2
-rw-r--r--accel/tcg/tcg-accel-ops-mttcg.c2
-rw-r--r--accel/tcg/tcg-accel-ops-rr.c4
-rwxr-xr-xconfigure169
-rw-r--r--docs/devel/acpi-bits.rst6
-rw-r--r--docs/devel/atomics.rst27
-rw-r--r--docs/devel/testing.rst14
-rw-r--r--include/qemu/atomic.h17
-rw-r--r--meson.build134
-rw-r--r--monitor/qmp.c2
-rw-r--r--pc-bios/s390-ccw/Makefile16
-rw-r--r--python/scripts/mkvenv.py76
-rwxr-xr-xscripts/archive-source.sh27
-rwxr-xr-xscripts/ci/org.centos/stream/8/x86_64/configure3
-rwxr-xr-xscripts/ci/org.centos/stream/8/x86_64/test-avocado4
-rwxr-xr-xscripts/device-crash-test2
-rwxr-xr-xscripts/git-submodule.sh69
-rwxr-xr-xscripts/make-release5
-rw-r--r--scripts/test-driver.py35
-rw-r--r--scsi/qemu-pr-helper.c4
-rw-r--r--softmmu/cpus.c2
-rw-r--r--softmmu/physmem.c2
-rw-r--r--subprojects/.gitignore8
-rw-r--r--subprojects/berkeley-softfloat-3.wrap5
-rw-r--r--subprojects/berkeley-testfloat-3.wrap5
m---------subprojects/dtc0
-rw-r--r--subprojects/dtc.wrap4
m---------subprojects/keycodemapdb0
-rw-r--r--subprojects/keycodemapdb.wrap4
m---------subprojects/libvfio-user0
-rw-r--r--subprojects/libvfio-user.wrap4
-rw-r--r--subprojects/packagefiles/berkeley-softfloat-3/meson.build339
-rw-r--r--subprojects/packagefiles/berkeley-softfloat-3/meson_options.txt1
-rw-r--r--subprojects/packagefiles/berkeley-testfloat-3/meson.build220
-rw-r--r--subprojects/packagefiles/berkeley-testfloat-3/meson_options.txt1
-rw-r--r--target/arm/hvf/hvf.c2
-rw-r--r--tests/Makefile.include32
-rw-r--r--tests/fp/meson.build541
-rw-r--r--tests/requirements.txt9
-rw-r--r--tests/unit/test-aio-multithread.c2
-rw-r--r--tests/vm/Makefile.include2
-rw-r--r--util/qemu-coroutine-lock.c4
47 files changed, 900 insertions, 944 deletions
diff --git a/.gitignore b/.gitignore
index 1ea59f4..61fa399 100644
--- a/.gitignore
+++ b/.gitignore
@@ -20,5 +20,3 @@ GTAGS
*.swp
*.patch
*.gcov
-
-/subprojects/slirp
diff --git a/.gitlab-ci.d/buildtest-template.yml b/.gitlab-ci.d/buildtest-template.yml
index c9f2e73..76ff1df 100644
--- a/.gitlab-ci.d/buildtest-template.yml
+++ b/.gitlab-ci.d/buildtest-template.yml
@@ -42,8 +42,8 @@
stage: test
image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest
script:
- - scripts/git-submodule.sh update
- $(sed -n '/GIT_SUBMODULES=/ s/.*=// p' build/config-host.mak)
+ - scripts/git-submodule.sh update roms/SLOF
+ - meson subprojects download $(cd build/subprojects && echo *)
- cd build
- find . -type f -exec touch {} +
# Avoid recompiling by hiding ninja with NINJA=":"
diff --git a/.gitlab-ci.d/buildtest.yml b/.gitlab-ci.d/buildtest.yml
index 0f1be14..1922caf 100644
--- a/.gitlab-ci.d/buildtest.yml
+++ b/.gitlab-ci.d/buildtest.yml
@@ -103,7 +103,7 @@ crash-test-debian:
script:
- cd build
- make NINJA=":" check-venv
- - pyvenv/bin/python3 scripts/device-crash-test -q --tcg-only ./qemu-system-i386
+ - tests/venv/bin/python3 scripts/device-crash-test -q --tcg-only ./qemu-system-i386
build-system-fedora:
extends:
@@ -146,8 +146,8 @@ crash-test-fedora:
script:
- cd build
- make NINJA=":" check-venv
- - pyvenv/bin/python3 scripts/device-crash-test -q ./qemu-system-ppc
- - pyvenv/bin/python3 scripts/device-crash-test -q ./qemu-system-riscv32
+ - tests/venv/bin/python3 scripts/device-crash-test -q ./qemu-system-ppc
+ - tests/venv/bin/python3 scripts/device-crash-test -q ./qemu-system-riscv32
build-system-centos:
extends:
diff --git a/.gitmodules b/.gitmodules
index f8b2ddf..73cae4c 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -13,9 +13,6 @@
[submodule "roms/qemu-palcode"]
path = roms/qemu-palcode
url = https://gitlab.com/qemu-project/qemu-palcode.git
-[submodule "subprojects/dtc"]
- path = subprojects/dtc
- url = https://gitlab.com/qemu-project/dtc.git
[submodule "roms/u-boot"]
path = roms/u-boot
url = https://gitlab.com/qemu-project/u-boot.git
@@ -25,21 +22,12 @@
[submodule "roms/QemuMacDrivers"]
path = roms/QemuMacDrivers
url = https://gitlab.com/qemu-project/QemuMacDrivers.git
-[submodule "subprojects/keycodemapdb"]
- path = subprojects/keycodemapdb
- url = https://gitlab.com/qemu-project/keycodemapdb.git
[submodule "roms/seabios-hppa"]
path = roms/seabios-hppa
url = https://gitlab.com/qemu-project/seabios-hppa.git
[submodule "roms/u-boot-sam460ex"]
path = roms/u-boot-sam460ex
url = https://gitlab.com/qemu-project/u-boot-sam460ex.git
-[submodule "tests/fp/berkeley-testfloat-3"]
- path = tests/fp/berkeley-testfloat-3
- url = https://gitlab.com/qemu-project/berkeley-testfloat-3.git
-[submodule "tests/fp/berkeley-softfloat-3"]
- path = tests/fp/berkeley-softfloat-3
- url = https://gitlab.com/qemu-project/berkeley-softfloat-3.git
[submodule "roms/edk2"]
path = roms/edk2
url = https://gitlab.com/qemu-project/edk2.git
@@ -55,6 +43,3 @@
[submodule "tests/lcitool/libvirt-ci"]
path = tests/lcitool/libvirt-ci
url = https://gitlab.com/libvirt/libvirt-ci.git
-[submodule "subprojects/libvfio-user"]
- path = subprojects/libvfio-user
- url = https://gitlab.com/qemu-project/libvfio-user.git
diff --git a/Makefile b/Makefile
index 08fb6a3..b22bf6f 100644
--- a/Makefile
+++ b/Makefile
@@ -45,18 +45,6 @@ include config-host.mak
include Makefile.prereqs
Makefile.prereqs: config-host.mak
-git-submodule-update:
-.git-submodule-status: git-submodule-update config-host.mak
-Makefile: .git-submodule-status
-
-.PHONY: git-submodule-update
-git-submodule-update:
-ifneq ($(GIT_SUBMODULES_ACTION),ignore)
- $(call quiet-command, \
- (GIT="$(GIT)" "$(SRC_PATH)/scripts/git-submodule.sh" $(GIT_SUBMODULES_ACTION) $(GIT_SUBMODULES)), \
- "GIT","$(GIT_SUBMODULES)")
-endif
-
# 0. ensure the build tree is okay
# Check that we're not trying to do an out-of-tree build from
diff --git a/accel/tcg/cpu-exec.c b/accel/tcg/cpu-exec.c
index 1cf4f1f..4208652 100644
--- a/accel/tcg/cpu-exec.c
+++ b/accel/tcg/cpu-exec.c
@@ -774,7 +774,7 @@ static inline bool cpu_handle_interrupt(CPUState *cpu,
* Ensure zeroing happens before reading cpu->exit_request or
* cpu->interrupt_request (see also smp_wmb in cpu_exit())
*/
- qatomic_mb_set(&cpu_neg(cpu)->icount_decr.u16.high, 0);
+ qatomic_set_mb(&cpu_neg(cpu)->icount_decr.u16.high, 0);
if (unlikely(qatomic_read(&cpu->interrupt_request))) {
int interrupt_request;
diff --git a/accel/tcg/tcg-accel-ops-mttcg.c b/accel/tcg/tcg-accel-ops-mttcg.c
index 5d72c9b..b320ff0 100644
--- a/accel/tcg/tcg-accel-ops-mttcg.c
+++ b/accel/tcg/tcg-accel-ops-mttcg.c
@@ -119,7 +119,7 @@ static void *mttcg_cpu_thread_fn(void *arg)
}
}
- qatomic_mb_set(&cpu->exit_request, 0);
+ qatomic_set_mb(&cpu->exit_request, 0);
qemu_wait_io_event(cpu);
} while (!cpu->unplug || cpu_can_run(cpu));
diff --git a/accel/tcg/tcg-accel-ops-rr.c b/accel/tcg/tcg-accel-ops-rr.c
index 70b9b89..23e4d0f 100644
--- a/accel/tcg/tcg-accel-ops-rr.c
+++ b/accel/tcg/tcg-accel-ops-rr.c
@@ -244,7 +244,7 @@ static void *rr_cpu_thread_fn(void *arg)
while (cpu && cpu_work_list_empty(cpu) && !cpu->exit_request) {
/* Store rr_current_cpu before evaluating cpu_can_run(). */
- qatomic_mb_set(&rr_current_cpu, cpu);
+ qatomic_set_mb(&rr_current_cpu, cpu);
current_cpu = cpu;
@@ -287,7 +287,7 @@ static void *rr_cpu_thread_fn(void *arg)
qatomic_set(&rr_current_cpu, NULL);
if (cpu && cpu->exit_request) {
- qatomic_mb_set(&cpu->exit_request, 0);
+ qatomic_set_mb(&cpu->exit_request, 0);
}
if (icount_enabled() && all_cpu_threads_idle()) {
diff --git a/configure b/configure
index d674a96..8765b88 100755
--- a/configure
+++ b/configure
@@ -246,14 +246,7 @@ for opt do
done
-if test -e "$source_path/.git"
-then
- git_submodules_action="update"
-else
- git_submodules_action="ignore"
-fi
-
-git_submodules="subprojects/keycodemapdb"
+git_submodules_action="update"
git="git"
debug_tcg="no"
docs="auto"
@@ -266,10 +259,9 @@ bsd_user=""
plugins="$default_feature"
ninja=""
python=
-pypi="enabled"
+download="enabled"
bindir="bin"
skip_meson=no
-vfio_user_server="disabled"
use_containers="yes"
gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
gdb_arches=""
@@ -281,16 +273,13 @@ unset target_list_exclude
# The following Meson options are handled manually (still they
# are included in the automatically generated help message)
-
-# 1. Track which submodules are needed
-fdt="auto"
-
-# 2. Automatically enable/disable other options
+# because they automatically enable/disable other options
tcg="auto"
cfi="false"
-# 3. Need to check for -static-pie before Meson runs. Also,
-# Meson has PIE as a boolean rather than enabled/disabled/auto.
+# Meson has PIE as a boolean rather than enabled/disabled/auto,
+# and we also need to check for -static-pie before Meson runs
+# which requires knowing whether --static is enabled.
pie=""
static="no"
@@ -743,22 +732,9 @@ for opt do
;;
--disable-cfi) cfi="false"
;;
- --disable-fdt) fdt="disabled"
+ --disable-download) download="disabled"; git_submodules_action=validate;
;;
- --enable-fdt) fdt="enabled"
- ;;
- --enable-fdt=git) fdt="internal"
- ;;
- --enable-fdt=*) fdt="$optarg"
- ;;
- --with-git=*) git="$optarg"
- ;;
- --with-git-submodules=*)
- git_submodules_action="$optarg"
- ;;
- --disable-pypi) pypi="disabled"
- ;;
- --enable-pypi) pypi="enabled"
+ --enable-download) download="enabled"; git_submodules_action=update;
;;
--enable-plugins) if test "$mingw32" = "yes"; then
error_exit "TCG plugins not currently supported on Windows platforms"
@@ -774,57 +750,47 @@ for opt do
;;
--gdb=*) gdb_bin="$optarg"
;;
- --enable-vfio-user-server) vfio_user_server="enabled"
- ;;
- --disable-vfio-user-server) vfio_user_server="disabled"
- ;;
# everything else has the same name in configure and meson
--*) meson_option_parse "$opt" "$optarg"
;;
esac
done
+if ! test -e "$source_path/.git"
+then
+ git_submodules_action="ignore"
+fi
+
# test for any invalid configuration combinations
if test "$plugins" = "yes" -a "$tcg" = "disabled"; then
error_exit "Can't enable plugins on non-TCG builds"
fi
-case $git_submodules_action in
- update|validate)
- if test ! -e "$source_path/.git"; then
- echo "ERROR: cannot $git_submodules_action git submodules without .git"
- exit 1
- fi
- ;;
- ignore)
- if ! test -f "$source_path/subprojects/keycodemapdb/README"
- then
- echo
- echo "ERROR: missing GIT submodules"
- echo
- if test -e "$source_path/.git"; then
- echo "--with-git-submodules=ignore specified but submodules were not"
- echo "checked out. Please initialize and update submodules."
- else
- echo "This is not a GIT checkout but module content appears to"
- echo "be missing. Do not use 'git archive' or GitHub download links"
- echo "to acquire QEMU source archives. Non-GIT builds are only"
- echo "supported with source archives linked from:"
- echo
- echo " https://www.qemu.org/download/#source"
- echo
- echo "Developers working with GIT can use scripts/archive-source.sh"
- echo "if they need to create valid source archives."
- fi
- echo
- exit 1
- fi
- ;;
- *)
- echo "ERROR: invalid --with-git-submodules= value '$git_submodules_action'"
- exit 1
- ;;
-esac
+if ! test -f "$source_path/subprojects/keycodemapdb/README" \
+ && test -f "$download" = disabled
+then
+ echo
+ echo "ERROR: missing subprojects"
+ echo
+ if test -e "$source_path/.git"; then
+ echo "--disable-download specified but subprojects were not"
+ echo 'checked out. Please invoke "meson subprojects download"'
+ echo "before configuring QEMU, or remove --disable-download"
+ echo "from the command line."
+ else
+ echo "This is not a GIT checkout but subproject content appears to"
+ echo "be missing. Do not use 'git archive' or GitHub download links"
+ echo "to acquire QEMU source archives. Non-GIT builds are only"
+ echo "supported with source archives linked from:"
+ echo
+ echo " https://www.qemu.org/download/#source"
+ echo
+ echo "Developers working with GIT can use scripts/archive-source.sh"
+ echo "if they need to create valid source archives."
+ fi
+ echo
+ exit 1
+fi
default_target_list=""
mak_wilds=""
@@ -892,10 +858,6 @@ Advanced options (experts only):
--python=PYTHON use specified python [$python]
--ninja=NINJA use specified ninja [$ninja]
--smbd=SMBD use specified smbd [$smbd]
- --with-git=GIT use specified git [$git]
- --with-git-submodules=update update git submodules (default if .git dir exists)
- --with-git-submodules=validate fail if git submodules are not up to date
- --with-git-submodules=ignore do not update or check git submodules (default if no .git dir)
--static enable static build [$static]
--bindir=PATH install binaries in PATH
--with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
@@ -963,7 +925,7 @@ python="$(command -v "$python")"
# - venv is allowed to use system packages;
# - all setup can be performed offline;
# - missing packages may be fetched from PyPI,
-# unless --disable-pypi is passed.
+# unless --disable-download is passed.
# - pip is not installed into the venv when possible,
# but ensurepip is called as a fallback when necessary.
@@ -980,7 +942,7 @@ python="$python -B"
mkvenv="$python ${source_path}/python/scripts/mkvenv.py"
mkvenv_flags=""
-if test "$pypi" = "enabled" ; then
+if test "$download" = "enabled" ; then
mkvenv_flags="--online"
fi
@@ -1003,7 +965,7 @@ meson="$(cd pyvenv/bin; pwd)/meson"
# Conditionally ensure Sphinx is installed.
mkvenv_flags=""
-if test "$pypi" = "enabled" -a "$docs" = "enabled" ; then
+if test "$download" = "enabled" -a "$docs" = "enabled" ; then
mkvenv_flags="--online"
fi
@@ -1040,7 +1002,7 @@ fi
# Consult white-list to determine whether to enable werror
# by default. Only enable by default for git builds
if test -z "$werror" ; then
- if test "$git_submodules_action" != "ignore" && \
+ if test -e "$source_path/.git" && \
{ test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
werror="yes"
else
@@ -1135,11 +1097,6 @@ if test "$tcg" = "auto"; then
fi
fi
-if test "$tcg" = "enabled"; then
- git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
- git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
-fi
-
##########################################
# big/little endian test
cat > $TMPC << EOF
@@ -1167,16 +1124,6 @@ EOF
fi
fi
-##########################################
-# fdt probe
-
-case "$fdt" in
- auto | enabled | internal)
- # Simpler to always update submodule, even if not needed.
- git_submodules="${git_submodules} subprojects/dtc"
- ;;
-esac
-
########################################
# check if ccache is interfering with
# semantic analysis of macros
@@ -1612,17 +1559,6 @@ write_target_makefile() {
fi
}
-##########################################
-# check for vfio_user_server
-
-case "$vfio_user_server" in
- enabled )
- if test "$git_submodules_action" != "ignore"; then
- git_submodules="${git_submodules} subprojects/libvfio-user"
- fi
- ;;
-esac
-
#######################################
# cross-compiled firmware targets
@@ -1676,7 +1612,8 @@ fi
# Only build s390-ccw bios if the compiler has -march=z900 or -march=z10
# (which is the lowest architecture level that Clang supports)
-if have_target s390x-softmmu && probe_target_compiler s390x-softmmu; then
+if have_target s390x-softmmu && probe_target_compiler s390x-softmmu && \
+ GIT=git "$source_path/scripts/git-submodule.sh" "$git_submodules_action" roms/SLOF >> config.log 2>&1; then
write_c_skeleton
do_compiler "$target_cc" $target_cc_cflags -march=z900 -o $TMPO -c $TMPC
has_z900=$?
@@ -1689,29 +1626,20 @@ if have_target s390x-softmmu && probe_target_compiler s390x-softmmu; then
config_mak=pc-bios/s390-ccw/config-host.mak
echo "# Automatically generated by configure - do not modify" > $config_mak
echo "SRC_PATH=$source_path/pc-bios/s390-ccw" >> $config_mak
+ echo "GIT_SUBMODULES_ACTION=$git_submodules_action" >> $config_mak
write_target_makefile >> $config_mak
- # SLOF is required for building the s390-ccw firmware on s390x,
- # since it is using the libnet code from SLOF for network booting.
- git_submodules="${git_submodules} roms/SLOF"
fi
fi
#######################################
# generate config-host.mak
-if ! (GIT="$git" "$source_path/scripts/git-submodule.sh" "$git_submodules_action" "$git_submodules"); then
- exit 1
-fi
-
config_host_mak="config-host.mak"
echo "# Automatically generated by configure - do not modify" > $config_host_mak
echo >> $config_host_mak
echo all: >> $config_host_mak
-echo "GIT=$git" >> $config_host_mak
-echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
-echo "GIT_SUBMODULES_ACTION=$git_submodules_action" >> $config_host_mak
if test "$debug_tcg" = "yes" ; then
echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
@@ -1944,11 +1872,8 @@ if test "$skip_meson" = no; then
rm -rf meson-private meson-info meson-logs
- # Prevent meson from automatically downloading wrapped subprojects when missing.
- # You can use 'meson subprojects download' before running configure.
- meson_option_add "--wrap-mode=nodownload"
-
# Built-in options
+ test "$download" = "disabled" && meson_option_add "--wrap-mode=nodownload"
test "$bindir" != "bin" && meson_option_add "-Dbindir=$bindir"
test "$default_feature" = no && meson_option_add -Dauto_features=disabled
test "$static" = yes && meson_option_add -Dprefer_static=true
@@ -1958,12 +1883,10 @@ if test "$skip_meson" = no; then
# QEMU options
test "$cfi" != false && meson_option_add "-Dcfi=$cfi"
test "$docs" != auto && meson_option_add "-Ddocs=$docs"
- test "$fdt" != auto && meson_option_add "-Dfdt=$fdt"
test -n "${LIB_FUZZING_ENGINE+xxx}" && meson_option_add "-Dfuzzing_engine=$LIB_FUZZING_ENGINE"
test "$qemu_suffix" != qemu && meson_option_add "-Dqemu_suffix=$qemu_suffix"
test "$smbd" != '' && meson_option_add "-Dsmbd=$smbd"
test "$tcg" != enabled && meson_option_add "-Dtcg=$tcg"
- test "$vfio_user_server" != auto && meson_option_add "-Dvfio_user_server=$vfio_user_server"
run_meson() {
NINJA=$ninja $meson setup --prefix "$prefix" "$@" $cross_arg "$PWD" "$source_path"
}
diff --git a/docs/devel/acpi-bits.rst b/docs/devel/acpi-bits.rst
index 9677b00..22e2580 100644
--- a/docs/devel/acpi-bits.rst
+++ b/docs/devel/acpi-bits.rst
@@ -61,19 +61,19 @@ Under ``tests/avocado/`` as the root we have:
::
$ make check-venv (needed only the first time to create the venv)
- $ ./pyvenv/bin/avocado run -t acpi tests/avocado
+ $ ./tests/venv/bin/avocado run -t acpi tests/avocado
The above will run all acpi avocado tests including this one.
In order to run the individual tests, perform the following:
::
- $ ./pyvenv/bin/avocado run tests/avocado/acpi-bits.py --tap -
+ $ ./tests/venv/bin/avocado run tests/avocado/acpi-bits.py --tap -
The above will produce output in tap format. You can omit "--tap -" in the
end and it will produce output like the following:
::
- $ ./pyvenv/bin/avocado run tests/avocado/acpi-bits.py
+ $ ./tests/venv/bin/avocado run tests/avocado/acpi-bits.py
Fetching asset from tests/avocado/acpi-bits.py:AcpiBitsTest.test_acpi_smbios_bits
JOB ID : eab225724da7b64c012c65705dc2fa14ab1defef
JOB LOG : /home/anisinha/avocado/job-results/job-2022-10-10T17.58-eab2257/job.log
diff --git a/docs/devel/atomics.rst b/docs/devel/atomics.rst
index 2480763..ff9b5ee 100644
--- a/docs/devel/atomics.rst
+++ b/docs/devel/atomics.rst
@@ -102,28 +102,10 @@ Similar operations return the new value of ``*ptr``::
typeof(*ptr) qatomic_or_fetch(ptr, val)
typeof(*ptr) qatomic_xor_fetch(ptr, val)
-``qemu/atomic.h`` also provides loads and stores that cannot be reordered
-with each other::
+``qemu/atomic.h`` also provides an optimized shortcut for
+``qatomic_set`` followed by ``smp_mb``::
- typeof(*ptr) qatomic_mb_read(ptr)
- void qatomic_mb_set(ptr, val)
-
-However these do not provide sequential consistency and, in particular,
-they do not participate in the total ordering enforced by
-sequentially-consistent operations. For this reason they are deprecated.
-They should instead be replaced with any of the following (ordered from
-easiest to hardest):
-
-- accesses inside a mutex or spinlock
-
-- lightweight synchronization primitives such as ``QemuEvent``
-
-- RCU operations (``qatomic_rcu_read``, ``qatomic_rcu_set``) when publishing
- or accessing a new version of a data structure
-
-- other atomic accesses: ``qatomic_read`` and ``qatomic_load_acquire`` for
- loads, ``qatomic_set`` and ``qatomic_store_release`` for stores, ``smp_mb``
- to forbid reordering subsequent loads before a store.
+ void qatomic_set_mb(ptr, val)
Weak atomic access and manual memory barriers
@@ -523,8 +505,7 @@ and memory barriers, and the equivalents in QEMU:
| :: |
| |
| a = qatomic_read(&x); |
- | qatomic_set(&x, a + 2); |
- | smp_mb(); |
+ | qatomic_set_mb(&x, a + 2); |
| b = qatomic_read(&y); |
+--------------------------------+
diff --git a/docs/devel/testing.rst b/docs/devel/testing.rst
index 2cafec4..203facb 100644
--- a/docs/devel/testing.rst
+++ b/docs/devel/testing.rst
@@ -888,9 +888,9 @@ You can run the avocado tests simply by executing:
make check-avocado
-This involves the automatic installation, from PyPI, of all the
-necessary avocado-framework dependencies into the QEMU venv within the
-build tree (at ``./pyvenv``). Test results are also saved within the
+This involves the automatic creation of Python virtual environment
+within the build tree (at ``tests/venv``) which will have all the
+right dependencies, and will save tests results also within the
build tree (at ``tests/results``).
Note: the build environment must be using a Python 3 stack, and have
@@ -947,7 +947,7 @@ may be invoked by running:
.. code::
- pyvenv/bin/avocado run $OPTION1 $OPTION2 tests/avocado/
+ tests/venv/bin/avocado run $OPTION1 $OPTION2 tests/avocado/
Note that if ``make check-avocado`` was not executed before, it is
possible to create the Python virtual environment with the dependencies
@@ -962,20 +962,20 @@ a test file. To run tests from a single file within the build tree, use:
.. code::
- pyvenv/bin/avocado run tests/avocado/$TESTFILE
+ tests/venv/bin/avocado run tests/avocado/$TESTFILE
To run a single test within a test file, use:
.. code::
- pyvenv/bin/avocado run tests/avocado/$TESTFILE:$TESTCLASS.$TESTNAME
+ tests/venv/bin/avocado run tests/avocado/$TESTFILE:$TESTCLASS.$TESTNAME
Valid test names are visible in the output from any previous execution
of Avocado or ``make check-avocado``, and can also be queried using:
.. code::
- pyvenv/bin/avocado list tests/avocado
+ tests/venv/bin/avocado list tests/avocado
Manual Installation
~~~~~~~~~~~~~~~~~~~
diff --git a/include/qemu/atomic.h b/include/qemu/atomic.h
index f85834e..d95612f 100644
--- a/include/qemu/atomic.h
+++ b/include/qemu/atomic.h
@@ -259,24 +259,17 @@
# define smp_mb__after_rmw() smp_mb()
#endif
-/* qatomic_mb_read/set semantics map Java volatile variables. They are
- * less expensive on some platforms (notably POWER) than fully
- * sequentially consistent operations.
- *
- * As long as they are used as paired operations they are safe to
- * use. See docs/devel/atomics.rst for more discussion.
+/*
+ * On some architectures, qatomic_set_mb is more efficient than a store
+ * plus a fence.
*/
-#define qatomic_mb_read(ptr) \
- qatomic_load_acquire(ptr)
-
#if !defined(QEMU_SANITIZE_THREAD) && \
(defined(__i386__) || defined(__x86_64__) || defined(__s390x__))
-/* This is more efficient than a store plus a fence. */
-# define qatomic_mb_set(ptr, i) \
+# define qatomic_set_mb(ptr, i) \
({ (void)qatomic_xchg(ptr, i); smp_mb__after_rmw(); })
#else
-# define qatomic_mb_set(ptr, i) \
+# define qatomic_set_mb(ptr, i) \
({ qatomic_store_release(ptr, i); smp_mb(); })
#endif
diff --git a/meson.build b/meson.build
index 576bc2f..553c8e0 100644
--- a/meson.build
+++ b/meson.build
@@ -1092,9 +1092,8 @@ endif
mpathlibs = [libudev]
mpathpersist = not_found
-mpathpersist_new_api = false
if targetos == 'linux' and have_tools and get_option('mpath').allowed()
- mpath_test_source_new = '''
+ mpath_test_source = '''
#include <libudev.h>
#include <mpath_persist.h>
unsigned mpath_mx_alloc_len = 1024;
@@ -1111,16 +1110,6 @@ if targetos == 'linux' and have_tools and get_option('mpath').allowed()
multipath_conf = mpath_lib_init();
return 0;
}'''
- mpath_test_source_old = '''
- #include <libudev.h>
- #include <mpath_persist.h>
- unsigned mpath_mx_alloc_len = 1024;
- int logsink;
- int main(void) {
- struct udev *udev = udev_new();
- mpath_lib_init(udev);
- return 0;
- }'''
libmpathpersist = cc.find_library('mpathpersist',
required: get_option('mpath'))
if libmpathpersist.found()
@@ -1139,10 +1128,7 @@ if targetos == 'linux' and have_tools and get_option('mpath').allowed()
endforeach
if mpathlibs.length() == 0
msg = 'Dependencies missing for libmpathpersist'
- elif cc.links(mpath_test_source_new, dependencies: mpathlibs)
- mpathpersist = declare_dependency(dependencies: mpathlibs)
- mpathpersist_new_api = true
- elif cc.links(mpath_test_source_old, dependencies: mpathlibs)
+ elif cc.links(mpath_test_source, dependencies: mpathlibs)
mpathpersist = declare_dependency(dependencies: mpathlibs)
else
msg = 'Cannot detect libmpathpersist API'
@@ -1273,10 +1259,16 @@ if not get_option('sdl').auto() or have_system
sdl_image = not_found
endif
if sdl.found()
- # work around 2.0.8 bug
- sdl = declare_dependency(compile_args: '-Wno-undef',
- dependencies: sdl,
- version: sdl.version())
+ # Some versions of SDL have problems with -Wundef
+ if not cc.compiles('''
+ #include <SDL.h>
+ #include <SDL_syswm.h>
+ int main(int argc, char *argv[]) { return 0; }
+ ''', dependencies: sdl, args: '-Werror=undef')
+ sdl = declare_dependency(compile_args: '-Wno-undef',
+ dependencies: sdl,
+ version: sdl.version())
+ endif
sdl_image = dependency('SDL2_image', required: get_option('sdl_image'),
method: 'pkg-config')
else
@@ -1799,8 +1791,7 @@ malloc = []
if get_option('malloc') == 'system'
has_malloc_trim = \
get_option('malloc_trim').allowed() and \
- cc.links('''#include <malloc.h>
- int main(void) { malloc_trim(0); return 0; }''')
+ cc.has_function('malloc_trim', prefix: '#include <malloc.h>')
else
has_malloc_trim = false
malloc = cc.find_library(get_option('malloc'), required: true)
@@ -1813,34 +1804,19 @@ if not has_malloc_trim and get_option('malloc_trim').enabled()
endif
endif
-# Check whether the glibc provides statx()
-
gnu_source_prefix = '''
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
'''
-statx_test = gnu_source_prefix + '''
- #include <sys/stat.h>
- int main(void) {
- struct statx statxbuf;
- statx(0, "", 0, STATX_BASIC_STATS, &statxbuf);
- return 0;
- }'''
-has_statx = cc.links(statx_test)
+# Check whether the glibc provides STATX_BASIC_STATS
-# Check whether statx() provides mount ID information
+has_statx = cc.has_header_symbol('sys/stat.h', 'STATX_BASIC_STATS', prefix: gnu_source_prefix)
-statx_mnt_id_test = gnu_source_prefix + '''
- #include <sys/stat.h>
- int main(void) {
- struct statx statxbuf;
- statx(0, "", 0, STATX_BASIC_STATS | STATX_MNT_ID, &statxbuf);
- return statxbuf.stx_mnt_id;
- }'''
+# Check whether statx() provides mount ID information
-has_statx_mnt_id = cc.links(statx_mnt_id_test)
+has_statx_mnt_id = cc.has_header_symbol('sys/stat.h', 'STATX_MNT_ID', prefix: gnu_source_prefix)
have_vhost_user_blk_server = get_option('vhost_user_blk_server') \
.require(targetos == 'linux',
@@ -2106,7 +2082,6 @@ config_host_data.set('CONFIG_GCOV', get_option('b_coverage'))
config_host_data.set('CONFIG_LIBUDEV', libudev.found())
config_host_data.set('CONFIG_LZO', lzo.found())
config_host_data.set('CONFIG_MPATH', mpathpersist.found())
-config_host_data.set('CONFIG_MPATH_NEW_API', mpathpersist_new_api)
config_host_data.set('CONFIG_BLKIO', blkio.found())
if blkio.found()
config_host_data.set('CONFIG_BLKIO_VHOST_VDPA_FD',
@@ -3058,14 +3033,7 @@ endif
libvfio_user_dep = not_found
if have_system and vfio_user_server_allowed
- have_internal = fs.exists(meson.current_source_dir() / 'subprojects/libvfio-user/meson.build')
-
- if not have_internal
- error('libvfio-user source not found - please pull git submodule')
- endif
-
- libvfio_user_proj = subproject('libvfio-user')
-
+ libvfio_user_proj = subproject('libvfio-user', required: true)
libvfio_user_dep = libvfio_user_proj.get_variable('libvfio_user_dep')
endif
@@ -3093,12 +3061,6 @@ if fdt_required.length() > 0 or fdt_opt == 'enabled'
endif
if not fdt.found()
assert(fdt_opt == 'internal')
- have_internal = fs.exists(meson.current_source_dir() / 'subprojects/dtc/meson.build')
-
- if not have_internal
- error('libfdt source not found - please pull git submodule')
- endif
-
libfdt_proj = subproject('dtc', required: true,
default_options: ['tools=false', 'yaml=disabled',
'python=disabled', 'default_library=static'])
@@ -4012,8 +3974,14 @@ endif
# Configuration summary #
#########################
-# Directories
+# Build environment
summary_info = {}
+summary_info += {'Build directory': meson.current_build_dir()}
+summary_info += {'Source path': meson.current_source_dir()}
+summary_info += {'Download dependencies': get_option('wrap_mode') != 'nodownload'}
+summary(summary_info, bool_yn: true, section: 'Build environment')
+
+# Directories
summary_info += {'Install prefix': get_option('prefix')}
summary_info += {'BIOS directory': qemu_datadir}
pathsep = targetos == 'windows' ? ';' : ':'
@@ -4031,14 +3999,10 @@ else
summary_info += {'local state directory': 'queried at runtime'}
endif
summary_info += {'Doc directory': get_option('prefix') / get_option('docdir')}
-summary_info += {'Build directory': meson.current_build_dir()}
-summary_info += {'Source path': meson.current_source_dir()}
-summary_info += {'GIT submodules': config_host['GIT_SUBMODULES']}
summary(summary_info, bool_yn: true, section: 'Directories')
# Host binaries
summary_info = {}
-summary_info += {'git': config_host['GIT']}
summary_info += {'python': '@0@ (version: @1@)'.format(python.full_path(), python.language_version())}
summary_info += {'sphinx-build': sphinx_build}
if config_host.has_key('HAVE_GDB_BIN')
@@ -4245,32 +4209,32 @@ summary_info += {'rng-none': get_option('rng_none')}
summary_info += {'Linux keyring': have_keyring}
summary(summary_info, bool_yn: true, section: 'Crypto')
-# Libraries
+# UI
summary_info = {}
if targetos == 'darwin'
summary_info += {'Cocoa support': cocoa}
- summary_info += {'vmnet.framework support': vmnet}
endif
summary_info += {'SDL support': sdl}
summary_info += {'SDL image support': sdl_image}
summary_info += {'GTK support': gtk}
summary_info += {'pixman': pixman}
summary_info += {'VTE support': vte}
-summary_info += {'slirp support': slirp}
-summary_info += {'libtasn1': tasn1}
-summary_info += {'PAM': pam}
-summary_info += {'iconv support': iconv}
-summary_info += {'curses support': curses}
-summary_info += {'virgl support': virgl}
-summary_info += {'blkio support': blkio}
-summary_info += {'curl support': curl}
-summary_info += {'Multipath support': mpathpersist}
summary_info += {'PNG support': png}
summary_info += {'VNC support': vnc}
if vnc.found()
summary_info += {'VNC SASL support': sasl}
summary_info += {'VNC JPEG support': jpeg}
endif
+summary_info += {'spice protocol support': spice_protocol}
+if spice_protocol.found()
+ summary_info += {' spice server support': spice}
+endif
+summary_info += {'curses support': curses}
+summary_info += {'brlapi support': brlapi}
+summary(summary_info, bool_yn: true, section: 'User interface')
+
+# Audio backends
+summary_info = {}
if targetos not in ['darwin', 'haiku', 'windows']
summary_info += {'OSS support': oss}
summary_info += {'sndio support': sndio}
@@ -4283,12 +4247,30 @@ if targetos == 'linux'
summary_info += {'ALSA support': alsa}
summary_info += {'PulseAudio support': pulse}
endif
-summary_info += {'Pipewire support': pipewire}
+summary_info += {'Pipewire support': pipewire}
summary_info += {'JACK support': jack}
-summary_info += {'brlapi support': brlapi}
+summary(summary_info, bool_yn: true, section: 'Audio backends')
+
+# Network backends
+summary_info = {}
+if targetos == 'darwin'
+ summary_info += {'vmnet.framework support': vmnet}
+endif
+summary_info += {'slirp support': slirp}
summary_info += {'vde support': vde}
summary_info += {'netmap support': have_netmap}
summary_info += {'l2tpv3 support': have_l2tpv3}
+summary(summary_info, bool_yn: true, section: 'Network backends')
+
+# Libraries
+summary_info = {}
+summary_info += {'libtasn1': tasn1}
+summary_info += {'PAM': pam}
+summary_info += {'iconv support': iconv}
+summary_info += {'virgl support': virgl}
+summary_info += {'blkio support': blkio}
+summary_info += {'curl support': curl}
+summary_info += {'Multipath support': mpathpersist}
summary_info += {'Linux AIO support': libaio}
summary_info += {'Linux io_uring support': linux_io_uring}
summary_info += {'ATTR/XATTR support': libattr}
@@ -4297,10 +4279,6 @@ summary_info += {'PVRDMA support': have_pvrdma}
summary_info += {'fdt support': fdt_opt == 'disabled' ? false : fdt_opt}
summary_info += {'libcap-ng support': libcap_ng}
summary_info += {'bpf support': libbpf}
-summary_info += {'spice protocol support': spice_protocol}
-if spice_protocol.found()
- summary_info += {' spice server support': spice}
-endif
summary_info += {'rbd support': rbd}
summary_info += {'smartcard support': cacard}
summary_info += {'U2F support': u2f}
diff --git a/monitor/qmp.c b/monitor/qmp.c
index c8e0156..6eee450 100644
--- a/monitor/qmp.c
+++ b/monitor/qmp.c
@@ -246,7 +246,7 @@ static QMPRequest *monitor_qmp_dispatcher_pop_any(void)
*
* Clear qmp_dispatcher_co_busy before reading request.
*/
- qatomic_mb_set(&qmp_dispatcher_co_busy, false);
+ qatomic_set_mb(&qmp_dispatcher_co_busy, false);
WITH_QEMU_LOCK_GUARD(&monitor_lock) {
QMPRequest *req_obj;
diff --git a/pc-bios/s390-ccw/Makefile b/pc-bios/s390-ccw/Makefile
index 10e8f5c..2e8cc01 100644
--- a/pc-bios/s390-ccw/Makefile
+++ b/pc-bios/s390-ccw/Makefile
@@ -6,6 +6,8 @@ include config-host.mak
CFLAGS = -O2 -g
MAKEFLAGS += -rR
+GIT_SUBMODULES = roms/SLOF
+
NULL :=
SPACE := $(NULL) #
TARGET_PREFIX := $(patsubst %/,%:$(SPACE),$(TARGET_DIR))
@@ -65,12 +67,7 @@ s390-ccw.img: s390-ccw.elf
$(OBJECTS): Makefile
-ifneq ($(wildcard $(SRC_PATH)/../../roms/SLOF/lib/libnet),)
include $(SRC_PATH)/netboot.mak
-else
-s390-netboot.img:
- @echo "s390-netboot.img not built since roms/SLOF/ is not available."
-endif
ALL_OBJS = $(sort $(OBJECTS) $(NETOBJS) $(LIBCOBJS) $(LIBNETOBJS))
-include $(ALL_OBJS:%.o=%.d)
@@ -80,3 +77,12 @@ clean:
distclean:
rm -f config-cc.mak
+
+.PHONY: git-submodule-update
+$(SRC_PATH)/../../.git-submodule-status: git-submodule-update config-host.mak
+Makefile: $(SRC_PATH)/../../.git-submodule-status
+
+git-submodule-update:
+ifneq ($(GIT_SUBMODULES_ACTION),ignore)
+ $(quiet-@)GIT=git "$(SRC_PATH)/../../scripts/git-submodule.sh" $(GIT_SUBMODULES_ACTION) $(GIT_SUBMODULES)
+endif
diff --git a/python/scripts/mkvenv.py b/python/scripts/mkvenv.py
index 3a9aef4..a47f1ea 100644
--- a/python/scripts/mkvenv.py
+++ b/python/scripts/mkvenv.py
@@ -553,6 +553,74 @@ def pkgname_from_depspec(dep_spec: str) -> str:
return match.group(0)
+def _get_path_importlib(package: str) -> Optional[str]:
+ # pylint: disable=import-outside-toplevel
+ # pylint: disable=no-name-in-module
+ # pylint: disable=import-error
+ try:
+ # First preference: Python 3.8+ stdlib
+ from importlib.metadata import ( # type: ignore
+ PackageNotFoundError,
+ distribution,
+ )
+ except ImportError as exc:
+ logger.debug("%s", str(exc))
+ # Second preference: Commonly available PyPI backport
+ from importlib_metadata import ( # type: ignore
+ PackageNotFoundError,
+ distribution,
+ )
+
+ try:
+ return str(distribution(package).locate_file("."))
+ except PackageNotFoundError:
+ return None
+
+
+def _get_path_pkg_resources(package: str) -> Optional[str]:
+ # pylint: disable=import-outside-toplevel
+ # Bundled with setuptools; has a good chance of being available.
+ import pkg_resources
+
+ try:
+ return str(pkg_resources.get_distribution(package).location)
+ except pkg_resources.DistributionNotFound:
+ return None
+
+
+def _get_path(package: str) -> Optional[str]:
+ try:
+ return _get_path_importlib(package)
+ except ImportError as exc:
+ logger.debug("%s", str(exc))
+
+ try:
+ return _get_path_pkg_resources(package)
+ except ImportError as exc:
+ logger.debug("%s", str(exc))
+ raise Ouch(
+ "Neither importlib.metadata nor pkg_resources found. "
+ "Use Python 3.8+, or install importlib-metadata or setuptools."
+ ) from exc
+
+
+def _path_is_prefix(prefix: Optional[str], path: str) -> bool:
+ try:
+ return (
+ prefix is not None and os.path.commonpath([prefix, path]) == prefix
+ )
+ except ValueError:
+ return False
+
+
+def _is_system_package(package: str) -> bool:
+ path = _get_path(package)
+ return path is not None and not (
+ _path_is_prefix(sysconfig.get_path("purelib"), path)
+ or _path_is_prefix(sysconfig.get_path("platlib"), path)
+ )
+
+
def _get_version_importlib(package: str) -> Optional[str]:
# pylint: disable=import-outside-toplevel
# pylint: disable=no-name-in-module
@@ -741,8 +809,12 @@ def _do_ensure(
for spec in dep_specs:
matcher = distlib.version.LegacyMatcher(spec)
ver = _get_version(matcher.name)
- if ver is None or not matcher.match(
- distlib.version.LegacyVersion(ver)
+ if (
+ ver is None
+ # Always pass installed package to pip, so that they can be
+ # updated if the requested version changes
+ or not _is_system_package(matcher.name)
+ or not matcher.match(distlib.version.LegacyVersion(ver))
):
absent.append(spec)
else:
diff --git a/scripts/archive-source.sh b/scripts/archive-source.sh
index dba5ae0..4899630 100755
--- a/scripts/archive-source.sh
+++ b/scripts/archive-source.sh
@@ -26,8 +26,7 @@ sub_file="${sub_tdir}/submodule.tar"
# independent of what the developer currently has initialized
# in their checkout, because the build environment is completely
# different to the host OS.
-submodules="subprojects/dtc subprojects/keycodemapdb"
-submodules="$submodules tests/fp/berkeley-softfloat-3 tests/fp/berkeley-testfloat-3"
+subprojects="dtc keycodemapdb libvfio-user berkeley-softfloat-3 berkeley-testfloat-3"
sub_deinit=""
function cleanup() {
@@ -51,23 +50,11 @@ function tree_ish() {
git archive --format tar "$(tree_ish)" > "$tar_file"
test $? -ne 0 && error "failed to archive qemu"
-for sm in $submodules; do
- status="$(git submodule status "$sm")"
- smhash="${status#[ +-]}"
- smhash="${smhash%% *}"
- case "$status" in
- -*)
- sub_deinit="$sub_deinit $sm"
- git submodule update --init "$sm"
- test $? -ne 0 && error "failed to update submodule $sm"
- ;;
- +*)
- echo "WARNING: submodule $sm is out of sync"
- ;;
- esac
- (cd $sm; git archive --format tar --prefix "$sm/" $(tree_ish)) > "$sub_file"
- test $? -ne 0 && error "failed to archive submodule $sm ($smhash)"
- tar --concatenate --file "$tar_file" "$sub_file"
- test $? -ne 0 && error "failed append submodule $sm to $tar_file"
+
+for sp in $subprojects; do
+ meson subprojects download $sp
+ test $? -ne 0 && error "failed to download subproject $sp"
+ tar --append --file "$tar_file" --exclude=.git subprojects/$sp
+ test $? -ne 0 && error "failed to append subproject $sp to $tar_file"
done
exit 0
diff --git a/scripts/ci/org.centos/stream/8/x86_64/configure b/scripts/ci/org.centos/stream/8/x86_64/configure
index 6e8983f..d02b09a 100755
--- a/scripts/ci/org.centos/stream/8/x86_64/configure
+++ b/scripts/ci/org.centos/stream/8/x86_64/configure
@@ -29,14 +29,11 @@
--extra-cflags="-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection" \
--with-suffix="qemu-kvm" \
--firmwarepath=/usr/share/qemu-firmware \
---with-git=meson \
---with-git-submodules=update \
--target-list="x86_64-softmmu" \
--block-drv-rw-whitelist="qcow2,raw,file,host_device,nbd,iscsi,rbd,blkdebug,luks,null-co,nvme,copy-on-read,throttle,gluster" \
--audio-drv-list="" \
--block-drv-ro-whitelist="vmdk,vhdx,vpc,https,ssh" \
--with-coroutine=ucontext \
---with-git=git \
--tls-priority=@QEMU,SYSTEM \
--disable-attr \
--disable-auth-pam \
diff --git a/scripts/ci/org.centos/stream/8/x86_64/test-avocado b/scripts/ci/org.centos/stream/8/x86_64/test-avocado
index 73e7a1a..e0443fc 100755
--- a/scripts/ci/org.centos/stream/8/x86_64/test-avocado
+++ b/scripts/ci/org.centos/stream/8/x86_64/test-avocado
@@ -4,7 +4,7 @@
# KVM and x86_64, or tests that are generic enough to be valid for all
# targets. Such a test list can be generated with:
#
-# ./pyvenv/bin/avocado list --filter-by-tags-include-empty \
+# ./tests/venv/bin/avocado list --filter-by-tags-include-empty \
# --filter-by-tags-include-empty-key -t accel:kvm,arch:x86_64 \
# tests/avocado/
#
@@ -22,7 +22,7 @@
# - tests/avocado/virtio_check_params.py:VirtioMaxSegSettingsCheck.test_machine_types
#
make get-vm-images
-./pyvenv/bin/avocado run \
+./tests/venv/bin/avocado run \
--job-results-dir=tests/results/ \
tests/avocado/boot_linux.py:BootLinuxX8664.test_pc_i440fx_kvm \
tests/avocado/boot_linux.py:BootLinuxX8664.test_pc_q35_kvm \
diff --git a/scripts/device-crash-test b/scripts/device-crash-test
index 353aa57..b74d887 100755
--- a/scripts/device-crash-test
+++ b/scripts/device-crash-test
@@ -43,7 +43,7 @@ except ModuleNotFoundError as exc:
print(f"Module '{exc.name}' not found.")
print(" Try 'make check-venv' from your build directory,")
print(" and then one way to run this script is like so:")
- print(f' > $builddir/pyvenv/bin/python3 "{path}"')
+ print(f' > $builddir/tests/venv/bin/python3 "{path}"')
sys.exit(1)
logger = logging.getLogger('device-crash-test')
diff --git a/scripts/git-submodule.sh b/scripts/git-submodule.sh
index 7be41f5..11fad21 100755
--- a/scripts/git-submodule.sh
+++ b/scripts/git-submodule.sh
@@ -9,10 +9,10 @@ command=$1
shift
maybe_modules="$@"
-# if --with-git-submodules=ignore, do nothing
+# if not running in a git checkout, do nothing
test "$command" = "ignore" && exit 0
-test -z "$GIT" && GIT=git
+test -z "$GIT" && GIT=$(command -v git)
cd "$(dirname "$0")/.."
@@ -21,19 +21,14 @@ update_error() {
echo
echo "Unable to automatically checkout GIT submodules '$modules'."
echo "If you require use of an alternative GIT binary (for example to"
- echo "enable use of a transparent proxy), then please specify it by"
- echo "running configure by with the '--with-git' argument. e.g."
+ echo "enable use of a transparent proxy), please disable automatic"
+ echo "GIT submodule checkout with:"
echo
- echo " $ ./configure --with-git='tsocks git'"
- echo
- echo "Alternatively you may disable automatic GIT submodule checkout"
- echo "with:"
- echo
- echo " $ ./configure --with-git-submodules=validate"
+ echo " $ ./configure --disable-download"
echo
echo "and then manually update submodules prior to running make, with:"
echo
- echo " $ scripts/git-submodule.sh update $modules"
+ echo " $ GIT='tsocks git' scripts/git-submodule.sh update $modules"
echo
exit 1
}
@@ -44,19 +39,30 @@ validate_error() {
echo "configured for validate only. Please run"
echo " scripts/git-submodule.sh update $maybe_modules"
echo "from the source directory or call configure with"
- echo " --with-git-submodules=update"
- echo "To disable GIT submodules validation, use"
- echo " --with-git-submodules=ignore"
+ echo " --enable-download"
fi
exit 1
}
+check_updated() {
+ local CURSTATUS OLDSTATUS
+ CURSTATUS=$($GIT submodule status $module)
+ OLDSTATUS=$(grep $module $substat)
+ test "$CURSTATUS" = "$OLDSTATUS"
+}
+
if test -n "$maybe_modules" && ! test -e ".git"
then
echo "$0: unexpectedly called with submodules but no git checkout exists"
exit 1
fi
+if test -n "$maybe_modules" && test -z "$GIT"
+then
+ echo "$0: unexpectedly called with submodules but git binary not found"
+ exit 1
+fi
+
modules=""
for m in $maybe_modules
do
@@ -71,33 +77,34 @@ done
case "$command" in
status|validate)
- if test -z "$maybe_modules"
- then
- test -s ${substat} && validate_error "$command" || exit 0
- fi
-
test -f "$substat" || validate_error "$command"
+ test -z "$maybe_modules" && exit 0
for module in $modules; do
- CURSTATUS=$($GIT submodule status $module)
- OLDSTATUS=$(cat $substat | grep $module)
- if test "$CURSTATUS" != "$OLDSTATUS"; then
- validate_error "$command"
- fi
+ check_updated $module || validate_error "$command"
done
exit 0
;;
update)
- if test -z "$maybe_modules"
- then
- test -e $substat || touch $substat
- exit 0
- fi
+ test -e $substat || touch $substat
+ test -z "$maybe_modules" && exit 0
$GIT submodule update --init $modules 1>/dev/null
test $? -ne 0 && update_error "failed to update modules"
+ for module in $modules; do
+ check_updated $module || echo Updated "$module"
+ done
- $GIT submodule status $modules > "${substat}"
- test $? -ne 0 && update_error "failed to save git submodule status" >&2
+ (while read -r; do
+ for module in $modules; do
+ case $REPLY in
+ *" $module "*) continue 2 ;;
+ esac
+ done
+ printf '%s\n' "$REPLY"
+ done
+ $GIT submodule status $modules
+ test $? -ne 0 && update_error "failed to save git submodule status" >&2) < $substat > $substat.new
+ mv -f $substat.new $substat
;;
esac
diff --git a/scripts/make-release b/scripts/make-release
index 44a9d86..c5db87b 100755
--- a/scripts/make-release
+++ b/scripts/make-release
@@ -16,6 +16,9 @@ if [ $# -ne 2 ]; then
exit 0
fi
+# Only include wraps that are invoked with subproject()
+SUBPROJECTS="dtc libvfio-user keycodemapdb berkeley-softfloat-3 berkeley-testfloat-3"
+
src="$1"
version="$2"
destination=qemu-${version}
@@ -26,6 +29,8 @@ git clone --single-branch -b "v${version}" -c advice.detachedHead=false \
pushd ${destination}
git submodule update --init --single-branch
+meson subprojects download $SUBPROJECTS
+
(cd roms/seabios && git describe --tags --long --dirty > .version)
(cd roms/skiboot && ./make_version.sh > .version)
# Fetch edk2 submodule's submodules, since it won't have access to them via
diff --git a/scripts/test-driver.py b/scripts/test-driver.py
deleted file mode 100644
index eef74b2..0000000
--- a/scripts/test-driver.py
+++ /dev/null
@@ -1,35 +0,0 @@
-#! /usr/bin/env python3
-
-# Wrapper for tests that hides the output if they succeed.
-# Used by "make check"
-#
-# Copyright (C) 2020 Red Hat, Inc.
-#
-# Author: Paolo Bonzini <pbonzini@redhat.com>
-
-import subprocess
-import sys
-import os
-import argparse
-
-parser = argparse.ArgumentParser(description='Test driver for QEMU')
-parser.add_argument('-C', metavar='DIR', dest='dir', default='.',
- help='change to DIR before doing anything else')
-parser.add_argument('-v', '--verbose', dest='verbose', action='store_true',
- help='be more verbose')
-parser.add_argument('test_args', nargs=argparse.REMAINDER)
-
-args = parser.parse_args()
-os.chdir(args.dir)
-
-test_args = args.test_args
-if test_args[0] == '--':
- test_args = test_args[1:]
-
-if args.verbose:
- result = subprocess.run(test_args, stdout=None, stderr=None)
-else:
- result = subprocess.run(test_args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
- if result.returncode:
- sys.stdout.buffer.write(result.stdout)
-sys.exit(result.returncode)
diff --git a/scsi/qemu-pr-helper.c b/scsi/qemu-pr-helper.c
index a857e80..ae44a81 100644
--- a/scsi/qemu-pr-helper.c
+++ b/scsi/qemu-pr-helper.c
@@ -280,11 +280,7 @@ void put_multipath_config(struct config *conf)
static void multipath_pr_init(void)
{
udev = udev_new();
-#ifdef CONFIG_MPATH_NEW_API
multipath_conf = mpath_lib_init();
-#else
- mpath_lib_init(udev);
-#endif
}
static int is_mpath(int fd)
diff --git a/softmmu/cpus.c b/softmmu/cpus.c
index 9cbc817..fed20ff 100644
--- a/softmmu/cpus.c
+++ b/softmmu/cpus.c
@@ -405,7 +405,7 @@ static void qemu_cpu_stop(CPUState *cpu, bool exit)
void qemu_wait_io_event_common(CPUState *cpu)
{
- qatomic_mb_set(&cpu->thread_kicked, false);
+ qatomic_set_mb(&cpu->thread_kicked, false);
if (cpu->stop) {
qemu_cpu_stop(cpu, false);
}
diff --git a/softmmu/physmem.c b/softmmu/physmem.c
index 9d7e172..588d0d1 100644
--- a/softmmu/physmem.c
+++ b/softmmu/physmem.c
@@ -3132,7 +3132,7 @@ void address_space_unmap(AddressSpace *as, void *buffer, hwaddr len,
bounce.buffer = NULL;
memory_region_unref(bounce.mr);
/* Clear in_use before reading map_client_list. */
- qatomic_mb_set(&bounce.in_use, false);
+ qatomic_set_mb(&bounce.in_use, false);
cpu_notify_map_clients();
}
diff --git a/subprojects/.gitignore b/subprojects/.gitignore
new file mode 100644
index 0000000..adca026
--- /dev/null
+++ b/subprojects/.gitignore
@@ -0,0 +1,8 @@
+/packagecache
+
+/berkeley-softfloat-3
+/berkeley-testfloat-3
+/dtc
+/keycodemapdb
+/libvfio-user
+/slirp
diff --git a/subprojects/berkeley-softfloat-3.wrap b/subprojects/berkeley-softfloat-3.wrap
new file mode 100644
index 0000000..a8fd877
--- /dev/null
+++ b/subprojects/berkeley-softfloat-3.wrap
@@ -0,0 +1,5 @@
+[wrap-git]
+url = https://gitlab.com/qemu-project/berkeley-softfloat-3
+revision = b64af41c3276f97f0e181920400ee056b9c88037
+patch_directory = berkeley-softfloat-3
+depth = 1
diff --git a/subprojects/berkeley-testfloat-3.wrap b/subprojects/berkeley-testfloat-3.wrap
new file mode 100644
index 0000000..6ad80a3
--- /dev/null
+++ b/subprojects/berkeley-testfloat-3.wrap
@@ -0,0 +1,5 @@
+[wrap-git]
+url = https://gitlab.com/qemu-project/berkeley-testfloat-3
+revision = 40619cbb3bf32872df8c53cc457039229428a263
+patch_directory = berkeley-testfloat-3
+depth = 1
diff --git a/subprojects/dtc b/subprojects/dtc
deleted file mode 160000
-Subproject b6910bec11614980a21e46fbccc35934b671bd8
diff --git a/subprojects/dtc.wrap b/subprojects/dtc.wrap
new file mode 100644
index 0000000..d1bc917
--- /dev/null
+++ b/subprojects/dtc.wrap
@@ -0,0 +1,4 @@
+[wrap-git]
+url = https://gitlab.com/qemu-project/dtc.git
+revision = b6910bec11614980a21e46fbccc35934b671bd81
+depth = 1
diff --git a/subprojects/keycodemapdb b/subprojects/keycodemapdb
deleted file mode 160000
-Subproject f5772a62ec52591ff6870b7e8ef32482371f22c
diff --git a/subprojects/keycodemapdb.wrap b/subprojects/keycodemapdb.wrap
new file mode 100644
index 0000000..dda7b0e
--- /dev/null
+++ b/subprojects/keycodemapdb.wrap
@@ -0,0 +1,4 @@
+[wrap-git]
+url = https://gitlab.com/qemu-project/keycodemapdb.git
+revision = f5772a62ec52591ff6870b7e8ef32482371f22c6
+depth = 1
diff --git a/subprojects/libvfio-user b/subprojects/libvfio-user
deleted file mode 160000
-Subproject 0b28d205572c80b568a1003db2c8f37ca333e4d
diff --git a/subprojects/libvfio-user.wrap b/subprojects/libvfio-user.wrap
new file mode 100644
index 0000000..416955c
--- /dev/null
+++ b/subprojects/libvfio-user.wrap
@@ -0,0 +1,4 @@
+[wrap-git]
+url = https://gitlab.com/qemu-project/libvfio-user.git
+revision = 0b28d205572c80b568a1003db2c8f37ca333e4d7
+depth = 1
diff --git a/subprojects/packagefiles/berkeley-softfloat-3/meson.build b/subprojects/packagefiles/berkeley-softfloat-3/meson.build
new file mode 100644
index 0000000..4ce964b
--- /dev/null
+++ b/subprojects/packagefiles/berkeley-softfloat-3/meson.build
@@ -0,0 +1,339 @@
+project('berkeley-softfloat-3', 'c',
+ default_options: ['warning_level=1', 'c_std=gnu99'])
+
+fpcflags = get_option('defines')
+
+platform_data = configuration_data()
+platform_data.set('INLINE', 'static inline')
+platform_data.set('LITTLEENDIAN', host_machine.endian() == 'little')
+configure_file(output: 'platform.h', configuration: platform_data)
+
+sfdir = 'source'
+sfspedir = sfdir / '8086-SSE'
+sfinc = include_directories('.', sfdir / 'include', sfspedir)
+
+add_project_arguments([
+ '-Wno-implicit-fallthrough',
+ '-Wno-missing-prototypes',
+ '-Wno-redundant-decls',
+ '-Wno-return-type',
+ '-Wno-error',
+], native: false, language: 'c')
+
+libsoftfloat = static_library(
+ 'softfloat',
+ files(
+ # primitives
+ sfdir / 's_eq128.c',
+ sfdir / 's_le128.c',
+ sfdir / 's_lt128.c',
+ sfdir / 's_shortShiftLeft128.c',
+ sfdir / 's_shortShiftRight128.c',
+ sfdir / 's_shortShiftRightJam64.c',
+ sfdir / 's_shortShiftRightJam64Extra.c',
+ sfdir / 's_shortShiftRightJam128.c',
+ sfdir / 's_shortShiftRightJam128Extra.c',
+ sfdir / 's_shiftRightJam32.c',
+ sfdir / 's_shiftRightJam64.c',
+ sfdir / 's_shiftRightJam64Extra.c',
+ sfdir / 's_shiftRightJam128.c',
+ sfdir / 's_shiftRightJam128Extra.c',
+ sfdir / 's_shiftRightJam256M.c',
+ sfdir / 's_countLeadingZeros8.c',
+ sfdir / 's_countLeadingZeros16.c',
+ sfdir / 's_countLeadingZeros32.c',
+ sfdir / 's_countLeadingZeros64.c',
+ sfdir / 's_add128.c',
+ sfdir / 's_add256M.c',
+ sfdir / 's_sub128.c',
+ sfdir / 's_sub256M.c',
+ sfdir / 's_mul64ByShifted32To128.c',
+ sfdir / 's_mul64To128.c',
+ sfdir / 's_mul128By32.c',
+ sfdir / 's_mul128To256M.c',
+ sfdir / 's_approxRecip_1Ks.c',
+ sfdir / 's_approxRecip32_1.c',
+ sfdir / 's_approxRecipSqrt_1Ks.c',
+ sfdir / 's_approxRecipSqrt32_1.c',
+ # others
+ sfdir / 's_roundToUI32.c',
+ sfdir / 's_roundToUI64.c',
+ sfdir / 's_roundToI32.c',
+ sfdir / 's_roundToI64.c',
+ sfdir / 's_normSubnormalF16Sig.c',
+ sfdir / 's_roundPackToF16.c',
+ sfdir / 's_normRoundPackToF16.c',
+ sfdir / 's_addMagsF16.c',
+ sfdir / 's_subMagsF16.c',
+ sfdir / 's_mulAddF16.c',
+ sfdir / 's_normSubnormalF32Sig.c',
+ sfdir / 's_roundPackToF32.c',
+ sfdir / 's_normRoundPackToF32.c',
+ sfdir / 's_addMagsF32.c',
+ sfdir / 's_subMagsF32.c',
+ sfdir / 's_mulAddF32.c',
+ sfdir / 's_normSubnormalF64Sig.c',
+ sfdir / 's_roundPackToF64.c',
+ sfdir / 's_normRoundPackToF64.c',
+ sfdir / 's_addMagsF64.c',
+ sfdir / 's_subMagsF64.c',
+ sfdir / 's_mulAddF64.c',
+ sfdir / 's_normSubnormalExtF80Sig.c',
+ sfdir / 's_roundPackToExtF80.c',
+ sfdir / 's_normRoundPackToExtF80.c',
+ sfdir / 's_addMagsExtF80.c',
+ sfdir / 's_subMagsExtF80.c',
+ sfdir / 's_normSubnormalF128Sig.c',
+ sfdir / 's_roundPackToF128.c',
+ sfdir / 's_normRoundPackToF128.c',
+ sfdir / 's_addMagsF128.c',
+ sfdir / 's_subMagsF128.c',
+ sfdir / 's_mulAddF128.c',
+ sfdir / 'softfloat_state.c',
+ sfdir / 'ui32_to_f16.c',
+ sfdir / 'ui32_to_f32.c',
+ sfdir / 'ui32_to_f64.c',
+ sfdir / 'ui32_to_extF80.c',
+ sfdir / 'ui32_to_extF80M.c',
+ sfdir / 'ui32_to_f128.c',
+ sfdir / 'ui32_to_f128M.c',
+ sfdir / 'ui64_to_f16.c',
+ sfdir / 'ui64_to_f32.c',
+ sfdir / 'ui64_to_f64.c',
+ sfdir / 'ui64_to_extF80.c',
+ sfdir / 'ui64_to_extF80M.c',
+ sfdir / 'ui64_to_f128.c',
+ sfdir / 'ui64_to_f128M.c',
+ sfdir / 'i32_to_f16.c',
+ sfdir / 'i32_to_f32.c',
+ sfdir / 'i32_to_f64.c',
+ sfdir / 'i32_to_extF80.c',
+ sfdir / 'i32_to_extF80M.c',
+ sfdir / 'i32_to_f128.c',
+ sfdir / 'i32_to_f128M.c',
+ sfdir / 'i64_to_f16.c',
+ sfdir / 'i64_to_f32.c',
+ sfdir / 'i64_to_f64.c',
+ sfdir / 'i64_to_extF80.c',
+ sfdir / 'i64_to_extF80M.c',
+ sfdir / 'i64_to_f128.c',
+ sfdir / 'i64_to_f128M.c',
+ sfdir / 'f16_to_ui32.c',
+ sfdir / 'f16_to_ui64.c',
+ sfdir / 'f16_to_i32.c',
+ sfdir / 'f16_to_i64.c',
+ sfdir / 'f16_to_ui32_r_minMag.c',
+ sfdir / 'f16_to_ui64_r_minMag.c',
+ sfdir / 'f16_to_i32_r_minMag.c',
+ sfdir / 'f16_to_i64_r_minMag.c',
+ sfdir / 'f16_to_f32.c',
+ sfdir / 'f16_to_f64.c',
+ sfdir / 'f16_to_extF80.c',
+ sfdir / 'f16_to_extF80M.c',
+ sfdir / 'f16_to_f128.c',
+ sfdir / 'f16_to_f128M.c',
+ sfdir / 'f16_roundToInt.c',
+ sfdir / 'f16_add.c',
+ sfdir / 'f16_sub.c',
+ sfdir / 'f16_mul.c',
+ sfdir / 'f16_mulAdd.c',
+ sfdir / 'f16_div.c',
+ sfdir / 'f16_rem.c',
+ sfdir / 'f16_sqrt.c',
+ sfdir / 'f16_eq.c',
+ sfdir / 'f16_le.c',
+ sfdir / 'f16_lt.c',
+ sfdir / 'f16_eq_signaling.c',
+ sfdir / 'f16_le_quiet.c',
+ sfdir / 'f16_lt_quiet.c',
+ sfdir / 'f16_isSignalingNaN.c',
+ sfdir / 'f32_to_ui32.c',
+ sfdir / 'f32_to_ui64.c',
+ sfdir / 'f32_to_i32.c',
+ sfdir / 'f32_to_i64.c',
+ sfdir / 'f32_to_ui32_r_minMag.c',
+ sfdir / 'f32_to_ui64_r_minMag.c',
+ sfdir / 'f32_to_i32_r_minMag.c',
+ sfdir / 'f32_to_i64_r_minMag.c',
+ sfdir / 'f32_to_f16.c',
+ sfdir / 'f32_to_f64.c',
+ sfdir / 'f32_to_extF80.c',
+ sfdir / 'f32_to_extF80M.c',
+ sfdir / 'f32_to_f128.c',
+ sfdir / 'f32_to_f128M.c',
+ sfdir / 'f32_roundToInt.c',
+ sfdir / 'f32_add.c',
+ sfdir / 'f32_sub.c',
+ sfdir / 'f32_mul.c',
+ sfdir / 'f32_mulAdd.c',
+ sfdir / 'f32_div.c',
+ sfdir / 'f32_rem.c',
+ sfdir / 'f32_sqrt.c',
+ sfdir / 'f32_eq.c',
+ sfdir / 'f32_le.c',
+ sfdir / 'f32_lt.c',
+ sfdir / 'f32_eq_signaling.c',
+ sfdir / 'f32_le_quiet.c',
+ sfdir / 'f32_lt_quiet.c',
+ sfdir / 'f32_isSignalingNaN.c',
+ sfdir / 'f64_to_ui32.c',
+ sfdir / 'f64_to_ui64.c',
+ sfdir / 'f64_to_i32.c',
+ sfdir / 'f64_to_i64.c',
+ sfdir / 'f64_to_ui32_r_minMag.c',
+ sfdir / 'f64_to_ui64_r_minMag.c',
+ sfdir / 'f64_to_i32_r_minMag.c',
+ sfdir / 'f64_to_i64_r_minMag.c',
+ sfdir / 'f64_to_f16.c',
+ sfdir / 'f64_to_f32.c',
+ sfdir / 'f64_to_extF80.c',
+ sfdir / 'f64_to_extF80M.c',
+ sfdir / 'f64_to_f128.c',
+ sfdir / 'f64_to_f128M.c',
+ sfdir / 'f64_roundToInt.c',
+ sfdir / 'f64_add.c',
+ sfdir / 'f64_sub.c',
+ sfdir / 'f64_mul.c',
+ sfdir / 'f64_mulAdd.c',
+ sfdir / 'f64_div.c',
+ sfdir / 'f64_rem.c',
+ sfdir / 'f64_sqrt.c',
+ sfdir / 'f64_eq.c',
+ sfdir / 'f64_le.c',
+ sfdir / 'f64_lt.c',
+ sfdir / 'f64_eq_signaling.c',
+ sfdir / 'f64_le_quiet.c',
+ sfdir / 'f64_lt_quiet.c',
+ sfdir / 'f64_isSignalingNaN.c',
+ sfdir / 'extF80_to_ui32.c',
+ sfdir / 'extF80_to_ui64.c',
+ sfdir / 'extF80_to_i32.c',
+ sfdir / 'extF80_to_i64.c',
+ sfdir / 'extF80_to_ui32_r_minMag.c',
+ sfdir / 'extF80_to_ui64_r_minMag.c',
+ sfdir / 'extF80_to_i32_r_minMag.c',
+ sfdir / 'extF80_to_i64_r_minMag.c',
+ sfdir / 'extF80_to_f16.c',
+ sfdir / 'extF80_to_f32.c',
+ sfdir / 'extF80_to_f64.c',
+ sfdir / 'extF80_to_f128.c',
+ sfdir / 'extF80_roundToInt.c',
+ sfdir / 'extF80_add.c',
+ sfdir / 'extF80_sub.c',
+ sfdir / 'extF80_mul.c',
+ sfdir / 'extF80_div.c',
+ sfdir / 'extF80_rem.c',
+ sfdir / 'extF80_sqrt.c',
+ sfdir / 'extF80_eq.c',
+ sfdir / 'extF80_le.c',
+ sfdir / 'extF80_lt.c',
+ sfdir / 'extF80_eq_signaling.c',
+ sfdir / 'extF80_le_quiet.c',
+ sfdir / 'extF80_lt_quiet.c',
+ sfdir / 'extF80_isSignalingNaN.c',
+ sfdir / 'extF80M_to_ui32.c',
+ sfdir / 'extF80M_to_ui64.c',
+ sfdir / 'extF80M_to_i32.c',
+ sfdir / 'extF80M_to_i64.c',
+ sfdir / 'extF80M_to_ui32_r_minMag.c',
+ sfdir / 'extF80M_to_ui64_r_minMag.c',
+ sfdir / 'extF80M_to_i32_r_minMag.c',
+ sfdir / 'extF80M_to_i64_r_minMag.c',
+ sfdir / 'extF80M_to_f16.c',
+ sfdir / 'extF80M_to_f32.c',
+ sfdir / 'extF80M_to_f64.c',
+ sfdir / 'extF80M_to_f128M.c',
+ sfdir / 'extF80M_roundToInt.c',
+ sfdir / 'extF80M_add.c',
+ sfdir / 'extF80M_sub.c',
+ sfdir / 'extF80M_mul.c',
+ sfdir / 'extF80M_div.c',
+ sfdir / 'extF80M_rem.c',
+ sfdir / 'extF80M_sqrt.c',
+ sfdir / 'extF80M_eq.c',
+ sfdir / 'extF80M_le.c',
+ sfdir / 'extF80M_lt.c',
+ sfdir / 'extF80M_eq_signaling.c',
+ sfdir / 'extF80M_le_quiet.c',
+ sfdir / 'extF80M_lt_quiet.c',
+ sfdir / 'f128_to_ui32.c',
+ sfdir / 'f128_to_ui64.c',
+ sfdir / 'f128_to_i32.c',
+ sfdir / 'f128_to_i64.c',
+ sfdir / 'f128_to_ui32_r_minMag.c',
+ sfdir / 'f128_to_ui64_r_minMag.c',
+ sfdir / 'f128_to_i32_r_minMag.c',
+ sfdir / 'f128_to_i64_r_minMag.c',
+ sfdir / 'f128_to_f16.c',
+ sfdir / 'f128_to_f32.c',
+ sfdir / 'f128_to_extF80.c',
+ sfdir / 'f128_to_f64.c',
+ sfdir / 'f128_roundToInt.c',
+ sfdir / 'f128_add.c',
+ sfdir / 'f128_sub.c',
+ sfdir / 'f128_mul.c',
+ sfdir / 'f128_mulAdd.c',
+ sfdir / 'f128_div.c',
+ sfdir / 'f128_rem.c',
+ sfdir / 'f128_sqrt.c',
+ sfdir / 'f128_eq.c',
+ sfdir / 'f128_le.c',
+ sfdir / 'f128_lt.c',
+ sfdir / 'f128_eq_signaling.c',
+ sfdir / 'f128_le_quiet.c',
+ sfdir / 'f128_lt_quiet.c',
+ sfdir / 'f128_isSignalingNaN.c',
+ sfdir / 'f128M_to_ui32.c',
+ sfdir / 'f128M_to_ui64.c',
+ sfdir / 'f128M_to_i32.c',
+ sfdir / 'f128M_to_i64.c',
+ sfdir / 'f128M_to_ui32_r_minMag.c',
+ sfdir / 'f128M_to_ui64_r_minMag.c',
+ sfdir / 'f128M_to_i32_r_minMag.c',
+ sfdir / 'f128M_to_i64_r_minMag.c',
+ sfdir / 'f128M_to_f16.c',
+ sfdir / 'f128M_to_f32.c',
+ sfdir / 'f128M_to_extF80M.c',
+ sfdir / 'f128M_to_f64.c',
+ sfdir / 'f128M_roundToInt.c',
+ sfdir / 'f128M_add.c',
+ sfdir / 'f128M_sub.c',
+ sfdir / 'f128M_mul.c',
+ sfdir / 'f128M_mulAdd.c',
+ sfdir / 'f128M_div.c',
+ sfdir / 'f128M_rem.c',
+ sfdir / 'f128M_sqrt.c',
+ sfdir / 'f128M_eq.c',
+ sfdir / 'f128M_le.c',
+ sfdir / 'f128M_lt.c',
+ sfdir / 'f128M_eq_signaling.c',
+ sfdir / 'f128M_le_quiet.c',
+ sfdir / 'f128M_lt_quiet.c',
+ # spe
+ sfspedir / 'softfloat_raiseFlags.c',
+ sfspedir / 's_f16UIToCommonNaN.c',
+ sfspedir / 's_commonNaNToF16UI.c',
+ sfspedir / 's_propagateNaNF16UI.c',
+ sfspedir / 's_f32UIToCommonNaN.c',
+ sfspedir / 's_commonNaNToF32UI.c',
+ sfspedir / 's_propagateNaNF32UI.c',
+ sfspedir / 's_f64UIToCommonNaN.c',
+ sfspedir / 's_commonNaNToF64UI.c',
+ sfspedir / 's_propagateNaNF64UI.c',
+ sfspedir / 'extF80M_isSignalingNaN.c',
+ sfspedir / 's_extF80UIToCommonNaN.c',
+ sfspedir / 's_commonNaNToExtF80UI.c',
+ sfspedir / 's_propagateNaNExtF80UI.c',
+ sfspedir / 'f128M_isSignalingNaN.c',
+ sfspedir / 's_f128UIToCommonNaN.c',
+ sfspedir / 's_commonNaNToF128UI.c',
+ sfspedir / 's_propagateNaNF128UI.c',
+ ),
+ include_directories: sfinc,
+ c_args: fpcflags,
+)
+
+libsoftfloat_dep = declare_dependency(
+ link_with: libsoftfloat,
+ include_directories: sfinc,
+ compile_args: fpcflags)
diff --git a/subprojects/packagefiles/berkeley-softfloat-3/meson_options.txt b/subprojects/packagefiles/berkeley-softfloat-3/meson_options.txt
new file mode 100644
index 0000000..868ae57
--- /dev/null
+++ b/subprojects/packagefiles/berkeley-softfloat-3/meson_options.txt
@@ -0,0 +1 @@
+option('defines', type : 'array', value : [])
diff --git a/subprojects/packagefiles/berkeley-testfloat-3/meson.build b/subprojects/packagefiles/berkeley-testfloat-3/meson.build
new file mode 100644
index 0000000..a41673d
--- /dev/null
+++ b/subprojects/packagefiles/berkeley-testfloat-3/meson.build
@@ -0,0 +1,220 @@
+project('berkeley-testfloat-3', 'c',
+ default_options: ['warning_level=1', 'c_std=gnu99'])
+
+fpcflags = get_option('defines')
+
+platform_data = configuration_data()
+platform_data.set('INLINE', 'static inline')
+platform_data.set('LITTLEENDIAN', host_machine.endian() == 'little')
+configure_file(output: 'platform.h', configuration: platform_data)
+
+tfdir = 'source'
+tfinc = include_directories('.', tfdir)
+
+add_project_arguments(
+ [
+ '-Wno-implicit-fallthrough',
+ '-Wno-strict-prototypes',
+ '-Wno-unknown-pragmas',
+ '-Wno-uninitialized',
+ '-Wno-missing-prototypes',
+ '-Wno-return-type',
+ '-Wno-unused-function',
+ '-Wno-missing-format-attribute',
+ '-Wno-error',
+ ] + meson.get_compiler('c').get_supported_arguments('-Wno-ignored-pragmas'),
+ native: false, language: 'c')
+
+tfgencases = [
+ tfdir / 'genCases_ui32.c',
+ tfdir / 'genCases_ui64.c',
+ tfdir / 'genCases_i32.c',
+ tfdir / 'genCases_i64.c',
+ tfdir / 'genCases_f16.c',
+ tfdir / 'genCases_f32.c',
+ tfdir / 'genCases_f64.c',
+ tfdir / 'genCases_extF80.c',
+ tfdir / 'genCases_f128.c',
+]
+
+tfwritecase = [
+ tfdir / 'writeCase_a_ui32.c',
+ tfdir / 'writeCase_a_ui64.c',
+ tfdir / 'writeCase_a_f16.c',
+ tfdir / 'writeCase_ab_f16.c',
+ tfdir / 'writeCase_abc_f16.c',
+ tfdir / 'writeCase_a_f32.c',
+ tfdir / 'writeCase_ab_f32.c',
+ tfdir / 'writeCase_abc_f32.c',
+ tfdir / 'writeCase_a_f64.c',
+ tfdir / 'writeCase_ab_f64.c',
+ tfdir / 'writeCase_abc_f64.c',
+ tfdir / 'writeCase_a_extF80M.c',
+ tfdir / 'writeCase_ab_extF80M.c',
+ tfdir / 'writeCase_a_f128M.c',
+ tfdir / 'writeCase_ab_f128M.c',
+ tfdir / 'writeCase_abc_f128M.c',
+ tfdir / 'writeCase_z_bool.c',
+ tfdir / 'writeCase_z_ui32.c',
+ tfdir / 'writeCase_z_ui64.c',
+ tfdir / 'writeCase_z_f16.c',
+ tfdir / 'writeCase_z_f32.c',
+ tfdir / 'writeCase_z_f64.c',
+ tfdir / 'writeCase_z_extF80M.c',
+ tfdir / 'writeCase_z_f128M.c',
+]
+
+tftest = [
+ tfdir / 'test_a_ui32_z_f16.c',
+ tfdir / 'test_a_ui32_z_f32.c',
+ tfdir / 'test_a_ui32_z_f64.c',
+ tfdir / 'test_a_ui32_z_extF80.c',
+ tfdir / 'test_a_ui32_z_f128.c',
+ tfdir / 'test_a_ui64_z_f16.c',
+ tfdir / 'test_a_ui64_z_f32.c',
+ tfdir / 'test_a_ui64_z_f64.c',
+ tfdir / 'test_a_ui64_z_extF80.c',
+ tfdir / 'test_a_ui64_z_f128.c',
+ tfdir / 'test_a_i32_z_f16.c',
+ tfdir / 'test_a_i32_z_f32.c',
+ tfdir / 'test_a_i32_z_f64.c',
+ tfdir / 'test_a_i32_z_extF80.c',
+ tfdir / 'test_a_i32_z_f128.c',
+ tfdir / 'test_a_i64_z_f16.c',
+ tfdir / 'test_a_i64_z_f32.c',
+ tfdir / 'test_a_i64_z_f64.c',
+ tfdir / 'test_a_i64_z_extF80.c',
+ tfdir / 'test_a_i64_z_f128.c',
+ tfdir / 'test_a_f16_z_ui32_rx.c',
+ tfdir / 'test_a_f16_z_ui64_rx.c',
+ tfdir / 'test_a_f16_z_i32_rx.c',
+ tfdir / 'test_a_f16_z_i64_rx.c',
+ tfdir / 'test_a_f16_z_ui32_x.c',
+ tfdir / 'test_a_f16_z_ui64_x.c',
+ tfdir / 'test_a_f16_z_i32_x.c',
+ tfdir / 'test_a_f16_z_i64_x.c',
+ tfdir / 'test_a_f16_z_f32.c',
+ tfdir / 'test_a_f16_z_f64.c',
+ tfdir / 'test_a_f16_z_extF80.c',
+ tfdir / 'test_a_f16_z_f128.c',
+ tfdir / 'test_az_f16.c',
+ tfdir / 'test_az_f16_rx.c',
+ tfdir / 'test_abz_f16.c',
+ tfdir / 'test_abcz_f16.c',
+ tfdir / 'test_ab_f16_z_bool.c',
+ tfdir / 'test_a_f32_z_ui32_rx.c',
+ tfdir / 'test_a_f32_z_ui64_rx.c',
+ tfdir / 'test_a_f32_z_i32_rx.c',
+ tfdir / 'test_a_f32_z_i64_rx.c',
+ tfdir / 'test_a_f32_z_ui32_x.c',
+ tfdir / 'test_a_f32_z_ui64_x.c',
+ tfdir / 'test_a_f32_z_i32_x.c',
+ tfdir / 'test_a_f32_z_i64_x.c',
+ tfdir / 'test_a_f32_z_f16.c',
+ tfdir / 'test_a_f32_z_f64.c',
+ tfdir / 'test_a_f32_z_extF80.c',
+ tfdir / 'test_a_f32_z_f128.c',
+ tfdir / 'test_az_f32.c',
+ tfdir / 'test_az_f32_rx.c',
+ tfdir / 'test_abz_f32.c',
+ tfdir / 'test_abcz_f32.c',
+ tfdir / 'test_ab_f32_z_bool.c',
+ tfdir / 'test_a_f64_z_ui32_rx.c',
+ tfdir / 'test_a_f64_z_ui64_rx.c',
+ tfdir / 'test_a_f64_z_i32_rx.c',
+ tfdir / 'test_a_f64_z_i64_rx.c',
+ tfdir / 'test_a_f64_z_ui32_x.c',
+ tfdir / 'test_a_f64_z_ui64_x.c',
+ tfdir / 'test_a_f64_z_i32_x.c',
+ tfdir / 'test_a_f64_z_i64_x.c',
+ tfdir / 'test_a_f64_z_f16.c',
+ tfdir / 'test_a_f64_z_f32.c',
+ tfdir / 'test_a_f64_z_extF80.c',
+ tfdir / 'test_a_f64_z_f128.c',
+ tfdir / 'test_az_f64.c',
+ tfdir / 'test_az_f64_rx.c',
+ tfdir / 'test_abz_f64.c',
+ tfdir / 'test_abcz_f64.c',
+ tfdir / 'test_ab_f64_z_bool.c',
+ tfdir / 'test_a_extF80_z_ui32_rx.c',
+ tfdir / 'test_a_extF80_z_ui64_rx.c',
+ tfdir / 'test_a_extF80_z_i32_rx.c',
+ tfdir / 'test_a_extF80_z_i64_rx.c',
+ tfdir / 'test_a_extF80_z_ui32_x.c',
+ tfdir / 'test_a_extF80_z_ui64_x.c',
+ tfdir / 'test_a_extF80_z_i32_x.c',
+ tfdir / 'test_a_extF80_z_i64_x.c',
+ tfdir / 'test_a_extF80_z_f16.c',
+ tfdir / 'test_a_extF80_z_f32.c',
+ tfdir / 'test_a_extF80_z_f64.c',
+ tfdir / 'test_a_extF80_z_f128.c',
+ tfdir / 'test_az_extF80.c',
+ tfdir / 'test_az_extF80_rx.c',
+ tfdir / 'test_abz_extF80.c',
+ tfdir / 'test_ab_extF80_z_bool.c',
+ tfdir / 'test_a_f128_z_ui32_rx.c',
+ tfdir / 'test_a_f128_z_ui64_rx.c',
+ tfdir / 'test_a_f128_z_i32_rx.c',
+ tfdir / 'test_a_f128_z_i64_rx.c',
+ tfdir / 'test_a_f128_z_ui32_x.c',
+ tfdir / 'test_a_f128_z_ui64_x.c',
+ tfdir / 'test_a_f128_z_i32_x.c',
+ tfdir / 'test_a_f128_z_i64_x.c',
+ tfdir / 'test_a_f128_z_f16.c',
+ tfdir / 'test_a_f128_z_f32.c',
+ tfdir / 'test_a_f128_z_f64.c',
+ tfdir / 'test_a_f128_z_extF80.c',
+ tfdir / 'test_az_f128.c',
+ tfdir / 'test_az_f128_rx.c',
+ tfdir / 'test_abz_f128.c',
+ tfdir / 'test_abcz_f128.c',
+ tfdir / 'test_ab_f128_z_bool.c',
+]
+
+libsoftfloat_proj = subproject('berkeley-softfloat-3', required: true)
+libsoftfloat = libsoftfloat_proj.get_variable('libsoftfloat_dep')
+
+libtestfloat = static_library(
+ 'testfloat',
+ files(
+ tfdir / 'uint128_inline.c',
+ tfdir / 'uint128.c',
+ tfdir / 'fail.c',
+ tfdir / 'functions_common.c',
+ tfdir / 'functionInfos.c',
+ tfdir / 'standardFunctionInfos.c',
+ tfdir / 'random.c',
+ tfdir / 'genCases_common.c',
+ tfgencases,
+ tfdir / 'genCases_writeTestsTotal.c',
+ tfdir / 'verCases_inline.c',
+ tfdir / 'verCases_common.c',
+ tfdir / 'verCases_writeFunctionName.c',
+ tfdir / 'readHex.c',
+ tfdir / 'writeHex.c',
+ tfwritecase,
+ tfdir / 'testLoops_common.c',
+ tftest,
+ ),
+ dependencies: libsoftfloat.partial_dependency(includes: true, compile_args: true),
+ c_args: fpcflags,
+)
+
+libtestfloat_dep = declare_dependency(
+ link_with: libtestfloat,
+ dependencies: libsoftfloat,
+ include_directories: tfinc,
+ compile_args: fpcflags)
+
+libslowfloat = static_library(
+ 'slowfloat',
+ tfdir / 'slowfloat.c',
+ dependencies: libsoftfloat.partial_dependency(includes: true, compile_args: true),
+ c_args: fpcflags,
+)
+
+libslowfloat_dep = declare_dependency(
+ link_with: libslowfloat,
+ dependencies: libsoftfloat,
+ include_directories: tfinc,
+ compile_args: fpcflags)
diff --git a/subprojects/packagefiles/berkeley-testfloat-3/meson_options.txt b/subprojects/packagefiles/berkeley-testfloat-3/meson_options.txt
new file mode 100644
index 0000000..868ae57
--- /dev/null
+++ b/subprojects/packagefiles/berkeley-testfloat-3/meson_options.txt
@@ -0,0 +1 @@
+option('defines', type : 'array', value : [])
diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c
index ad65603..5900dc7 100644
--- a/target/arm/hvf/hvf.c
+++ b/target/arm/hvf/hvf.c
@@ -1229,7 +1229,7 @@ static void hvf_wait_for_ipi(CPUState *cpu, struct timespec *ts)
* Use pselect to sleep so that other threads can IPI us while we're
* sleeping.
*/
- qatomic_mb_set(&cpu->thread_kicked, false);
+ qatomic_set_mb(&cpu->thread_kicked, false);
qemu_mutex_unlock_iothread();
pselect(0, 0, 0, 0, ts, &cpu->hvf->unblock_ipi_mask);
qemu_mutex_lock_iothread();
diff --git a/tests/Makefile.include b/tests/Makefile.include
index 0184ef2..9422dda 100644
--- a/tests/Makefile.include
+++ b/tests/Makefile.include
@@ -89,9 +89,10 @@ distclean-tcg: $(DISTCLEAN_TCG_TARGET_RULES)
# Build up our target list from the filtered list of ninja targets
TARGETS=$(patsubst libqemu-%.fa, %, $(filter libqemu-%.fa, $(ninja-targets)))
-TESTS_VENV_TOKEN=$(BUILD_DIR)/pyvenv/tests.group
+TESTS_VENV_DIR=$(BUILD_DIR)/tests/venv
TESTS_VENV_REQ=$(SRC_PATH)/tests/requirements.txt
TESTS_RESULTS_DIR=$(BUILD_DIR)/tests/results
+TESTS_PYTHON=$(TESTS_VENV_DIR)/bin/python3
ifndef AVOCADO_TESTS
AVOCADO_TESTS=tests/avocado
endif
@@ -107,10 +108,11 @@ else
endif
quiet-venv-pip = $(quiet-@)$(call quiet-command-run, \
- $(PYTHON) -m pip -q --disable-pip-version-check $1, \
+ $(TESTS_PYTHON) -m pip -q --disable-pip-version-check $1, \
"VENVPIP","$1")
-$(TESTS_VENV_TOKEN): $(TESTS_VENV_REQ)
+$(TESTS_VENV_DIR): $(TESTS_VENV_REQ)
+ $(call quiet-command, $(PYTHON) -m venv $@, VENV, $@)
$(call quiet-venv-pip,install -e "$(SRC_PATH)/python/")
$(call quiet-venv-pip,install -r $(TESTS_VENV_REQ))
$(call quiet-command, touch $@)
@@ -119,7 +121,7 @@ $(TESTS_RESULTS_DIR):
$(call quiet-command, mkdir -p $@, \
MKDIR, $@)
-check-venv: $(TESTS_VENV_TOKEN)
+check-venv: $(TESTS_VENV_DIR)
FEDORA_31_ARCHES_TARGETS=$(patsubst %-softmmu,%, $(filter %-softmmu,$(TARGETS)))
FEDORA_31_ARCHES_CANDIDATES=$(patsubst ppc64,ppc64le,$(FEDORA_31_ARCHES_TARGETS))
@@ -129,25 +131,21 @@ FEDORA_31_DOWNLOAD=$(filter $(FEDORA_31_ARCHES),$(FEDORA_31_ARCHES_CANDIDATES))
# download one specific Fedora 31 image
get-vm-image-fedora-31-%: check-venv
$(call quiet-command, \
- $(PYTHON) -m avocado vmimage get \
+ $(TESTS_PYTHON) -m avocado vmimage get \
--distro=fedora --distro-version=31 --arch=$*, \
"AVOCADO", "Downloading avocado tests VM image for $*")
# download all vm images, according to defined targets
get-vm-images: check-venv $(patsubst %,get-vm-image-fedora-31-%, $(FEDORA_31_DOWNLOAD))
-JOBS_OPTION=$(lastword -j1 $(filter-out -j, $(filter -j%,$(MAKEFLAGS))))
-
check-avocado: check-venv $(TESTS_RESULTS_DIR) get-vm-images
- $(call quiet-command, \
- $(PYTHON) -m avocado \
- --show=$(AVOCADO_SHOW) run --job-results-dir=$(TESTS_RESULTS_DIR) \
- $(if $(AVOCADO_TAGS),, \
- --filter-by-tags-include-empty \
- --filter-by-tags-include-empty-key) \
- --max-parallel-tasks $(JOBS_OPTION:-j%=%) \
- $(AVOCADO_CMDLINE_TAGS) \
- $(if $(GITLAB_CI),,--failfast) $(AVOCADO_TESTS), \
+ $(call quiet-command, \
+ $(TESTS_PYTHON) -m avocado \
+ --show=$(AVOCADO_SHOW) run --job-results-dir=$(TESTS_RESULTS_DIR) \
+ $(if $(AVOCADO_TAGS),, --filter-by-tags-include-empty \
+ --filter-by-tags-include-empty-key) \
+ $(AVOCADO_CMDLINE_TAGS) \
+ $(if $(GITLAB_CI),,--failfast) $(AVOCADO_TESTS), \
"AVOCADO", "tests/avocado")
check-acceptance-deprecated-warning:
@@ -165,7 +163,7 @@ check:
check-build: run-ninja
check-clean:
- rm -rf $(TESTS_RESULTS_DIR)
+ rm -rf $(TESTS_VENV_DIR) $(TESTS_RESULTS_DIR)
clean: check-clean clean-tcg
distclean: distclean-tcg
diff --git a/tests/fp/meson.build b/tests/fp/meson.build
index f9ca6a9..cbc1739 100644
--- a/tests/fp/meson.build
+++ b/tests/fp/meson.build
@@ -7,13 +7,15 @@ if targetos == 'windows'
subdir_done()
endif
-fpcflags = [
+sfcflags = [
# softfloat defines
'-DSOFTFLOAT_ROUND_ODD',
'-DINLINE_LEVEL=5',
'-DSOFTFLOAT_FAST_DIV32TO16',
'-DSOFTFLOAT_FAST_DIV64TO32',
'-DSOFTFLOAT_FAST_INT64',
+]
+tfcflags = [
# testfloat defines
'-DFLOAT16',
'-DFLOAT64',
@@ -23,523 +25,16 @@ fpcflags = [
'-DLONG_DOUBLE_IS_EXTFLOAT80',
]
-sfdir = 'berkeley-softfloat-3/source'
-sfspedir = sfdir / '8086-SSE'
-tfdir = 'berkeley-testfloat-3/source'
-
-sfinc = include_directories(sfdir / 'include', sfspedir)
-
-tfcflags = [
- '-Wno-implicit-fallthrough',
- '-Wno-strict-prototypes',
- '-Wno-unknown-pragmas',
- '-Wno-uninitialized',
- '-Wno-missing-prototypes',
- '-Wno-return-type',
- '-Wno-unused-function',
- '-Wno-missing-format-attribute',
- '-Wno-error',
-]
-
-if cc.get_id() == 'clang'
- # Clang does not support '#pragma STDC FENV_ACCESS'
- tfcflags += [ '-Wno-ignored-pragmas' ]
-endif
-
-tfgencases = [
- tfdir / 'genCases_ui32.c',
- tfdir / 'genCases_ui64.c',
- tfdir / 'genCases_i32.c',
- tfdir / 'genCases_i64.c',
- tfdir / 'genCases_f16.c',
- tfdir / 'genCases_f32.c',
- tfdir / 'genCases_f64.c',
- tfdir / 'genCases_extF80.c',
- tfdir / 'genCases_f128.c',
-]
-
-tfwritecase = [
- tfdir / 'writeCase_a_ui32.c',
- tfdir / 'writeCase_a_ui64.c',
- tfdir / 'writeCase_a_f16.c',
- tfdir / 'writeCase_ab_f16.c',
- tfdir / 'writeCase_abc_f16.c',
- tfdir / 'writeCase_a_f32.c',
- tfdir / 'writeCase_ab_f32.c',
- tfdir / 'writeCase_abc_f32.c',
- tfdir / 'writeCase_a_f64.c',
- tfdir / 'writeCase_ab_f64.c',
- tfdir / 'writeCase_abc_f64.c',
- tfdir / 'writeCase_a_extF80M.c',
- tfdir / 'writeCase_ab_extF80M.c',
- tfdir / 'writeCase_a_f128M.c',
- tfdir / 'writeCase_ab_f128M.c',
- tfdir / 'writeCase_abc_f128M.c',
- tfdir / 'writeCase_z_bool.c',
- tfdir / 'writeCase_z_ui32.c',
- tfdir / 'writeCase_z_ui64.c',
- tfdir / 'writeCase_z_f16.c',
- tfdir / 'writeCase_z_f32.c',
- tfdir / 'writeCase_z_f64.c',
- tfdir / 'writeCase_z_extF80M.c',
- tfdir / 'writeCase_z_f128M.c',
-]
-
-tftest = [
- tfdir / 'test_a_ui32_z_f16.c',
- tfdir / 'test_a_ui32_z_f32.c',
- tfdir / 'test_a_ui32_z_f64.c',
- tfdir / 'test_a_ui32_z_extF80.c',
- tfdir / 'test_a_ui32_z_f128.c',
- tfdir / 'test_a_ui64_z_f16.c',
- tfdir / 'test_a_ui64_z_f32.c',
- tfdir / 'test_a_ui64_z_f64.c',
- tfdir / 'test_a_ui64_z_extF80.c',
- tfdir / 'test_a_ui64_z_f128.c',
- tfdir / 'test_a_i32_z_f16.c',
- tfdir / 'test_a_i32_z_f32.c',
- tfdir / 'test_a_i32_z_f64.c',
- tfdir / 'test_a_i32_z_extF80.c',
- tfdir / 'test_a_i32_z_f128.c',
- tfdir / 'test_a_i64_z_f16.c',
- tfdir / 'test_a_i64_z_f32.c',
- tfdir / 'test_a_i64_z_f64.c',
- tfdir / 'test_a_i64_z_extF80.c',
- tfdir / 'test_a_i64_z_f128.c',
- tfdir / 'test_a_f16_z_ui32_rx.c',
- tfdir / 'test_a_f16_z_ui64_rx.c',
- tfdir / 'test_a_f16_z_i32_rx.c',
- tfdir / 'test_a_f16_z_i64_rx.c',
- tfdir / 'test_a_f16_z_ui32_x.c',
- tfdir / 'test_a_f16_z_ui64_x.c',
- tfdir / 'test_a_f16_z_i32_x.c',
- tfdir / 'test_a_f16_z_i64_x.c',
- tfdir / 'test_a_f16_z_f32.c',
- tfdir / 'test_a_f16_z_f64.c',
- tfdir / 'test_a_f16_z_extF80.c',
- tfdir / 'test_a_f16_z_f128.c',
- tfdir / 'test_az_f16.c',
- tfdir / 'test_az_f16_rx.c',
- tfdir / 'test_abz_f16.c',
- tfdir / 'test_abcz_f16.c',
- tfdir / 'test_ab_f16_z_bool.c',
- tfdir / 'test_a_f32_z_ui32_rx.c',
- tfdir / 'test_a_f32_z_ui64_rx.c',
- tfdir / 'test_a_f32_z_i32_rx.c',
- tfdir / 'test_a_f32_z_i64_rx.c',
- tfdir / 'test_a_f32_z_ui32_x.c',
- tfdir / 'test_a_f32_z_ui64_x.c',
- tfdir / 'test_a_f32_z_i32_x.c',
- tfdir / 'test_a_f32_z_i64_x.c',
- tfdir / 'test_a_f32_z_f16.c',
- tfdir / 'test_a_f32_z_f64.c',
- tfdir / 'test_a_f32_z_extF80.c',
- tfdir / 'test_a_f32_z_f128.c',
- tfdir / 'test_az_f32.c',
- tfdir / 'test_az_f32_rx.c',
- tfdir / 'test_abz_f32.c',
- tfdir / 'test_abcz_f32.c',
- tfdir / 'test_ab_f32_z_bool.c',
- tfdir / 'test_a_f64_z_ui32_rx.c',
- tfdir / 'test_a_f64_z_ui64_rx.c',
- tfdir / 'test_a_f64_z_i32_rx.c',
- tfdir / 'test_a_f64_z_i64_rx.c',
- tfdir / 'test_a_f64_z_ui32_x.c',
- tfdir / 'test_a_f64_z_ui64_x.c',
- tfdir / 'test_a_f64_z_i32_x.c',
- tfdir / 'test_a_f64_z_i64_x.c',
- tfdir / 'test_a_f64_z_f16.c',
- tfdir / 'test_a_f64_z_f32.c',
- tfdir / 'test_a_f64_z_extF80.c',
- tfdir / 'test_a_f64_z_f128.c',
- tfdir / 'test_az_f64.c',
- tfdir / 'test_az_f64_rx.c',
- tfdir / 'test_abz_f64.c',
- tfdir / 'test_abcz_f64.c',
- tfdir / 'test_ab_f64_z_bool.c',
- tfdir / 'test_a_extF80_z_ui32_rx.c',
- tfdir / 'test_a_extF80_z_ui64_rx.c',
- tfdir / 'test_a_extF80_z_i32_rx.c',
- tfdir / 'test_a_extF80_z_i64_rx.c',
- tfdir / 'test_a_extF80_z_ui32_x.c',
- tfdir / 'test_a_extF80_z_ui64_x.c',
- tfdir / 'test_a_extF80_z_i32_x.c',
- tfdir / 'test_a_extF80_z_i64_x.c',
- tfdir / 'test_a_extF80_z_f16.c',
- tfdir / 'test_a_extF80_z_f32.c',
- tfdir / 'test_a_extF80_z_f64.c',
- tfdir / 'test_a_extF80_z_f128.c',
- tfdir / 'test_az_extF80.c',
- tfdir / 'test_az_extF80_rx.c',
- tfdir / 'test_abz_extF80.c',
- tfdir / 'test_ab_extF80_z_bool.c',
- tfdir / 'test_a_f128_z_ui32_rx.c',
- tfdir / 'test_a_f128_z_ui64_rx.c',
- tfdir / 'test_a_f128_z_i32_rx.c',
- tfdir / 'test_a_f128_z_i64_rx.c',
- tfdir / 'test_a_f128_z_ui32_x.c',
- tfdir / 'test_a_f128_z_ui64_x.c',
- tfdir / 'test_a_f128_z_i32_x.c',
- tfdir / 'test_a_f128_z_i64_x.c',
- tfdir / 'test_a_f128_z_f16.c',
- tfdir / 'test_a_f128_z_f32.c',
- tfdir / 'test_a_f128_z_f64.c',
- tfdir / 'test_a_f128_z_extF80.c',
- tfdir / 'test_az_f128.c',
- tfdir / 'test_az_f128_rx.c',
- tfdir / 'test_abz_f128.c',
- tfdir / 'test_abcz_f128.c',
- tfdir / 'test_ab_f128_z_bool.c',
-]
-
-libtestfloat = static_library(
- 'testfloat',
- files(
- tfdir / 'uint128_inline.c',
- tfdir / 'uint128.c',
- tfdir / 'fail.c',
- tfdir / 'functions_common.c',
- tfdir / 'functionInfos.c',
- tfdir / 'standardFunctionInfos.c',
- tfdir / 'random.c',
- tfdir / 'genCases_common.c',
- tfgencases,
- tfdir / 'genCases_writeTestsTotal.c',
- tfdir / 'verCases_inline.c',
- tfdir / 'verCases_common.c',
- tfdir / 'verCases_writeFunctionName.c',
- tfdir / 'readHex.c',
- tfdir / 'writeHex.c',
- tfwritecase,
- tfdir / 'testLoops_common.c',
- tftest,
- ),
- include_directories: sfinc,
- c_args: tfcflags + fpcflags,
-)
-
-sfcflags = [
- '-Wno-implicit-fallthrough',
- '-Wno-missing-prototypes',
- '-Wno-redundant-decls',
- '-Wno-return-type',
- '-Wno-error',
-]
+libsoftfloat_proj = subproject('berkeley-softfloat-3', required: true,
+ default_options: 'defines=' + ','.join(sfcflags))
+libsoftfloat = libsoftfloat_proj.get_variable('libsoftfloat_dep')
-libsoftfloat = static_library(
- 'softfloat',
- files(
- # primitives
- sfdir / 's_eq128.c',
- sfdir / 's_le128.c',
- sfdir / 's_lt128.c',
- sfdir / 's_shortShiftLeft128.c',
- sfdir / 's_shortShiftRight128.c',
- sfdir / 's_shortShiftRightJam64.c',
- sfdir / 's_shortShiftRightJam64Extra.c',
- sfdir / 's_shortShiftRightJam128.c',
- sfdir / 's_shortShiftRightJam128Extra.c',
- sfdir / 's_shiftRightJam32.c',
- sfdir / 's_shiftRightJam64.c',
- sfdir / 's_shiftRightJam64Extra.c',
- sfdir / 's_shiftRightJam128.c',
- sfdir / 's_shiftRightJam128Extra.c',
- sfdir / 's_shiftRightJam256M.c',
- sfdir / 's_countLeadingZeros8.c',
- sfdir / 's_countLeadingZeros16.c',
- sfdir / 's_countLeadingZeros32.c',
- sfdir / 's_countLeadingZeros64.c',
- sfdir / 's_add128.c',
- sfdir / 's_add256M.c',
- sfdir / 's_sub128.c',
- sfdir / 's_sub256M.c',
- sfdir / 's_mul64ByShifted32To128.c',
- sfdir / 's_mul64To128.c',
- sfdir / 's_mul128By32.c',
- sfdir / 's_mul128To256M.c',
- sfdir / 's_approxRecip_1Ks.c',
- sfdir / 's_approxRecip32_1.c',
- sfdir / 's_approxRecipSqrt_1Ks.c',
- sfdir / 's_approxRecipSqrt32_1.c',
- # others
- sfdir / 's_roundToUI32.c',
- sfdir / 's_roundToUI64.c',
- sfdir / 's_roundToI32.c',
- sfdir / 's_roundToI64.c',
- sfdir / 's_normSubnormalF16Sig.c',
- sfdir / 's_roundPackToF16.c',
- sfdir / 's_normRoundPackToF16.c',
- sfdir / 's_addMagsF16.c',
- sfdir / 's_subMagsF16.c',
- sfdir / 's_mulAddF16.c',
- sfdir / 's_normSubnormalF32Sig.c',
- sfdir / 's_roundPackToF32.c',
- sfdir / 's_normRoundPackToF32.c',
- sfdir / 's_addMagsF32.c',
- sfdir / 's_subMagsF32.c',
- sfdir / 's_mulAddF32.c',
- sfdir / 's_normSubnormalF64Sig.c',
- sfdir / 's_roundPackToF64.c',
- sfdir / 's_normRoundPackToF64.c',
- sfdir / 's_addMagsF64.c',
- sfdir / 's_subMagsF64.c',
- sfdir / 's_mulAddF64.c',
- sfdir / 's_normSubnormalExtF80Sig.c',
- sfdir / 's_roundPackToExtF80.c',
- sfdir / 's_normRoundPackToExtF80.c',
- sfdir / 's_addMagsExtF80.c',
- sfdir / 's_subMagsExtF80.c',
- sfdir / 's_normSubnormalF128Sig.c',
- sfdir / 's_roundPackToF128.c',
- sfdir / 's_normRoundPackToF128.c',
- sfdir / 's_addMagsF128.c',
- sfdir / 's_subMagsF128.c',
- sfdir / 's_mulAddF128.c',
- sfdir / 'softfloat_state.c',
- sfdir / 'ui32_to_f16.c',
- sfdir / 'ui32_to_f32.c',
- sfdir / 'ui32_to_f64.c',
- sfdir / 'ui32_to_extF80.c',
- sfdir / 'ui32_to_extF80M.c',
- sfdir / 'ui32_to_f128.c',
- sfdir / 'ui32_to_f128M.c',
- sfdir / 'ui64_to_f16.c',
- sfdir / 'ui64_to_f32.c',
- sfdir / 'ui64_to_f64.c',
- sfdir / 'ui64_to_extF80.c',
- sfdir / 'ui64_to_extF80M.c',
- sfdir / 'ui64_to_f128.c',
- sfdir / 'ui64_to_f128M.c',
- sfdir / 'i32_to_f16.c',
- sfdir / 'i32_to_f32.c',
- sfdir / 'i32_to_f64.c',
- sfdir / 'i32_to_extF80.c',
- sfdir / 'i32_to_extF80M.c',
- sfdir / 'i32_to_f128.c',
- sfdir / 'i32_to_f128M.c',
- sfdir / 'i64_to_f16.c',
- sfdir / 'i64_to_f32.c',
- sfdir / 'i64_to_f64.c',
- sfdir / 'i64_to_extF80.c',
- sfdir / 'i64_to_extF80M.c',
- sfdir / 'i64_to_f128.c',
- sfdir / 'i64_to_f128M.c',
- sfdir / 'f16_to_ui32.c',
- sfdir / 'f16_to_ui64.c',
- sfdir / 'f16_to_i32.c',
- sfdir / 'f16_to_i64.c',
- sfdir / 'f16_to_ui32_r_minMag.c',
- sfdir / 'f16_to_ui64_r_minMag.c',
- sfdir / 'f16_to_i32_r_minMag.c',
- sfdir / 'f16_to_i64_r_minMag.c',
- sfdir / 'f16_to_f32.c',
- sfdir / 'f16_to_f64.c',
- sfdir / 'f16_to_extF80.c',
- sfdir / 'f16_to_extF80M.c',
- sfdir / 'f16_to_f128.c',
- sfdir / 'f16_to_f128M.c',
- sfdir / 'f16_roundToInt.c',
- sfdir / 'f16_add.c',
- sfdir / 'f16_sub.c',
- sfdir / 'f16_mul.c',
- sfdir / 'f16_mulAdd.c',
- sfdir / 'f16_div.c',
- sfdir / 'f16_rem.c',
- sfdir / 'f16_sqrt.c',
- sfdir / 'f16_eq.c',
- sfdir / 'f16_le.c',
- sfdir / 'f16_lt.c',
- sfdir / 'f16_eq_signaling.c',
- sfdir / 'f16_le_quiet.c',
- sfdir / 'f16_lt_quiet.c',
- sfdir / 'f16_isSignalingNaN.c',
- sfdir / 'f32_to_ui32.c',
- sfdir / 'f32_to_ui64.c',
- sfdir / 'f32_to_i32.c',
- sfdir / 'f32_to_i64.c',
- sfdir / 'f32_to_ui32_r_minMag.c',
- sfdir / 'f32_to_ui64_r_minMag.c',
- sfdir / 'f32_to_i32_r_minMag.c',
- sfdir / 'f32_to_i64_r_minMag.c',
- sfdir / 'f32_to_f16.c',
- sfdir / 'f32_to_f64.c',
- sfdir / 'f32_to_extF80.c',
- sfdir / 'f32_to_extF80M.c',
- sfdir / 'f32_to_f128.c',
- sfdir / 'f32_to_f128M.c',
- sfdir / 'f32_roundToInt.c',
- sfdir / 'f32_add.c',
- sfdir / 'f32_sub.c',
- sfdir / 'f32_mul.c',
- sfdir / 'f32_mulAdd.c',
- sfdir / 'f32_div.c',
- sfdir / 'f32_rem.c',
- sfdir / 'f32_sqrt.c',
- sfdir / 'f32_eq.c',
- sfdir / 'f32_le.c',
- sfdir / 'f32_lt.c',
- sfdir / 'f32_eq_signaling.c',
- sfdir / 'f32_le_quiet.c',
- sfdir / 'f32_lt_quiet.c',
- sfdir / 'f32_isSignalingNaN.c',
- sfdir / 'f64_to_ui32.c',
- sfdir / 'f64_to_ui64.c',
- sfdir / 'f64_to_i32.c',
- sfdir / 'f64_to_i64.c',
- sfdir / 'f64_to_ui32_r_minMag.c',
- sfdir / 'f64_to_ui64_r_minMag.c',
- sfdir / 'f64_to_i32_r_minMag.c',
- sfdir / 'f64_to_i64_r_minMag.c',
- sfdir / 'f64_to_f16.c',
- sfdir / 'f64_to_f32.c',
- sfdir / 'f64_to_extF80.c',
- sfdir / 'f64_to_extF80M.c',
- sfdir / 'f64_to_f128.c',
- sfdir / 'f64_to_f128M.c',
- sfdir / 'f64_roundToInt.c',
- sfdir / 'f64_add.c',
- sfdir / 'f64_sub.c',
- sfdir / 'f64_mul.c',
- sfdir / 'f64_mulAdd.c',
- sfdir / 'f64_div.c',
- sfdir / 'f64_rem.c',
- sfdir / 'f64_sqrt.c',
- sfdir / 'f64_eq.c',
- sfdir / 'f64_le.c',
- sfdir / 'f64_lt.c',
- sfdir / 'f64_eq_signaling.c',
- sfdir / 'f64_le_quiet.c',
- sfdir / 'f64_lt_quiet.c',
- sfdir / 'f64_isSignalingNaN.c',
- sfdir / 'extF80_to_ui32.c',
- sfdir / 'extF80_to_ui64.c',
- sfdir / 'extF80_to_i32.c',
- sfdir / 'extF80_to_i64.c',
- sfdir / 'extF80_to_ui32_r_minMag.c',
- sfdir / 'extF80_to_ui64_r_minMag.c',
- sfdir / 'extF80_to_i32_r_minMag.c',
- sfdir / 'extF80_to_i64_r_minMag.c',
- sfdir / 'extF80_to_f16.c',
- sfdir / 'extF80_to_f32.c',
- sfdir / 'extF80_to_f64.c',
- sfdir / 'extF80_to_f128.c',
- sfdir / 'extF80_roundToInt.c',
- sfdir / 'extF80_add.c',
- sfdir / 'extF80_sub.c',
- sfdir / 'extF80_mul.c',
- sfdir / 'extF80_div.c',
- sfdir / 'extF80_rem.c',
- sfdir / 'extF80_sqrt.c',
- sfdir / 'extF80_eq.c',
- sfdir / 'extF80_le.c',
- sfdir / 'extF80_lt.c',
- sfdir / 'extF80_eq_signaling.c',
- sfdir / 'extF80_le_quiet.c',
- sfdir / 'extF80_lt_quiet.c',
- sfdir / 'extF80_isSignalingNaN.c',
- sfdir / 'extF80M_to_ui32.c',
- sfdir / 'extF80M_to_ui64.c',
- sfdir / 'extF80M_to_i32.c',
- sfdir / 'extF80M_to_i64.c',
- sfdir / 'extF80M_to_ui32_r_minMag.c',
- sfdir / 'extF80M_to_ui64_r_minMag.c',
- sfdir / 'extF80M_to_i32_r_minMag.c',
- sfdir / 'extF80M_to_i64_r_minMag.c',
- sfdir / 'extF80M_to_f16.c',
- sfdir / 'extF80M_to_f32.c',
- sfdir / 'extF80M_to_f64.c',
- sfdir / 'extF80M_to_f128M.c',
- sfdir / 'extF80M_roundToInt.c',
- sfdir / 'extF80M_add.c',
- sfdir / 'extF80M_sub.c',
- sfdir / 'extF80M_mul.c',
- sfdir / 'extF80M_div.c',
- sfdir / 'extF80M_rem.c',
- sfdir / 'extF80M_sqrt.c',
- sfdir / 'extF80M_eq.c',
- sfdir / 'extF80M_le.c',
- sfdir / 'extF80M_lt.c',
- sfdir / 'extF80M_eq_signaling.c',
- sfdir / 'extF80M_le_quiet.c',
- sfdir / 'extF80M_lt_quiet.c',
- sfdir / 'f128_to_ui32.c',
- sfdir / 'f128_to_ui64.c',
- sfdir / 'f128_to_i32.c',
- sfdir / 'f128_to_i64.c',
- sfdir / 'f128_to_ui32_r_minMag.c',
- sfdir / 'f128_to_ui64_r_minMag.c',
- sfdir / 'f128_to_i32_r_minMag.c',
- sfdir / 'f128_to_i64_r_minMag.c',
- sfdir / 'f128_to_f16.c',
- sfdir / 'f128_to_f32.c',
- sfdir / 'f128_to_extF80.c',
- sfdir / 'f128_to_f64.c',
- sfdir / 'f128_roundToInt.c',
- sfdir / 'f128_add.c',
- sfdir / 'f128_sub.c',
- sfdir / 'f128_mul.c',
- sfdir / 'f128_mulAdd.c',
- sfdir / 'f128_div.c',
- sfdir / 'f128_rem.c',
- sfdir / 'f128_sqrt.c',
- sfdir / 'f128_eq.c',
- sfdir / 'f128_le.c',
- sfdir / 'f128_lt.c',
- sfdir / 'f128_eq_signaling.c',
- sfdir / 'f128_le_quiet.c',
- sfdir / 'f128_lt_quiet.c',
- sfdir / 'f128_isSignalingNaN.c',
- sfdir / 'f128M_to_ui32.c',
- sfdir / 'f128M_to_ui64.c',
- sfdir / 'f128M_to_i32.c',
- sfdir / 'f128M_to_i64.c',
- sfdir / 'f128M_to_ui32_r_minMag.c',
- sfdir / 'f128M_to_ui64_r_minMag.c',
- sfdir / 'f128M_to_i32_r_minMag.c',
- sfdir / 'f128M_to_i64_r_minMag.c',
- sfdir / 'f128M_to_f16.c',
- sfdir / 'f128M_to_f32.c',
- sfdir / 'f128M_to_extF80M.c',
- sfdir / 'f128M_to_f64.c',
- sfdir / 'f128M_roundToInt.c',
- sfdir / 'f128M_add.c',
- sfdir / 'f128M_sub.c',
- sfdir / 'f128M_mul.c',
- sfdir / 'f128M_mulAdd.c',
- sfdir / 'f128M_div.c',
- sfdir / 'f128M_rem.c',
- sfdir / 'f128M_sqrt.c',
- sfdir / 'f128M_eq.c',
- sfdir / 'f128M_le.c',
- sfdir / 'f128M_lt.c',
- sfdir / 'f128M_eq_signaling.c',
- sfdir / 'f128M_le_quiet.c',
- sfdir / 'f128M_lt_quiet.c',
- # spe
- sfspedir / 'softfloat_raiseFlags.c',
- sfspedir / 's_f16UIToCommonNaN.c',
- sfspedir / 's_commonNaNToF16UI.c',
- sfspedir / 's_propagateNaNF16UI.c',
- sfspedir / 's_f32UIToCommonNaN.c',
- sfspedir / 's_commonNaNToF32UI.c',
- sfspedir / 's_propagateNaNF32UI.c',
- sfspedir / 's_f64UIToCommonNaN.c',
- sfspedir / 's_commonNaNToF64UI.c',
- sfspedir / 's_propagateNaNF64UI.c',
- sfspedir / 'extF80M_isSignalingNaN.c',
- sfspedir / 's_extF80UIToCommonNaN.c',
- sfspedir / 's_commonNaNToExtF80UI.c',
- sfspedir / 's_propagateNaNExtF80UI.c',
- sfspedir / 'f128M_isSignalingNaN.c',
- sfspedir / 's_f128UIToCommonNaN.c',
- sfspedir / 's_commonNaNToF128UI.c',
- sfspedir / 's_propagateNaNF128UI.c',
- ),
- include_directories: sfinc,
- c_args: sfcflags + fpcflags,
-)
+libtestfloat_proj = subproject('berkeley-testfloat-3', required: true,
+ default_options: 'defines=' + ','.join(tfcflags))
+libtestfloat = libtestfloat_proj.get_variable('libtestfloat_dep')
+libslowfloat = libtestfloat_proj.get_variable('libslowfloat_dep')
-fpcflags += [
+fpcflags = [
# work around TARGET_* poisoning
'-DHW_POISON_H',
# define a target to match testfloat's implementation-defined choices, such as
@@ -551,10 +46,8 @@ fpcflags += [
fptest = executable(
'fp-test',
- ['fp-test.c', tfdir / 'slowfloat.c', '../../fpu/softfloat.c'],
- link_with: [libtestfloat, libsoftfloat],
- dependencies: [qemuutil],
- include_directories: [sfinc, include_directories(tfdir)],
+ ['fp-test.c', '../../fpu/softfloat.c'],
+ dependencies: [qemuutil, libsoftfloat, libtestfloat, libslowfloat],
c_args: fpcflags,
)
softfloat_conv_tests = {
@@ -636,18 +129,14 @@ test('fp-test-mulAdd', fptest,
executable(
'fp-bench',
['fp-bench.c', '../../fpu/softfloat.c'],
- link_with: [libtestfloat, libsoftfloat],
- dependencies: [qemuutil],
- include_directories: [sfinc, include_directories(tfdir)],
+ dependencies: [qemuutil, libtestfloat, libsoftfloat],
c_args: fpcflags,
)
fptestlog2 = executable(
'fp-test-log2',
['fp-test-log2.c', '../../fpu/softfloat.c'],
- link_with: [libsoftfloat],
- dependencies: [qemuutil],
- include_directories: [sfinc],
+ dependencies: [qemuutil, libsoftfloat],
c_args: fpcflags,
)
test('fp-test-log2', fptestlog2,
diff --git a/tests/requirements.txt b/tests/requirements.txt
index 0e008b9..0ba561b 100644
--- a/tests/requirements.txt
+++ b/tests/requirements.txt
@@ -1,9 +1,6 @@
# Add Python module requirements, one per line, to be installed
-# in the qemu build_dir/pyvenv Python virtual environment. For more info,
+# in the tests/venv Python virtual environment. For more info,
# refer to: https://pip.pypa.io/en/stable/user_guide/#id1
-#
-# Note that qemu.git/python/ is implicitly installed to this venv when
-# 'make check-venv' is run, and will persist until configure is run
-# again.
-avocado-framework==101.0
+# Note that qemu.git/python/ is always implicitly installed.
+avocado-framework==88.1
pycdlib==1.11.0
diff --git a/tests/unit/test-aio-multithread.c b/tests/unit/test-aio-multithread.c
index 80c5d4e..08d4570 100644
--- a/tests/unit/test-aio-multithread.c
+++ b/tests/unit/test-aio-multithread.c
@@ -154,7 +154,7 @@ static coroutine_fn void test_multi_co_schedule_entry(void *opaque)
n = g_test_rand_int_range(0, NUM_CONTEXTS);
schedule_next(n);
- qatomic_mb_set(&to_schedule[id], qemu_coroutine_self());
+ qatomic_set_mb(&to_schedule[id], qemu_coroutine_self());
/* finish_cb can run here. */
qemu_coroutine_yield();
g_assert(to_schedule[id] == NULL);
diff --git a/tests/vm/Makefile.include b/tests/vm/Makefile.include
index f0f5d32..c2a8ca1 100644
--- a/tests/vm/Makefile.include
+++ b/tests/vm/Makefile.include
@@ -5,7 +5,7 @@ ifeq ($(realpath $(SRC_PATH)),$(realpath .))
VM_PYTHON = PYTHONPATH=$(SRC_PATH)/python /usr/bin/env python3
VM_VENV =
else
-VM_PYTHON = $(PYTHON)
+VM_PYTHON = $(TESTS_PYTHON)
VM_VENV = check-venv
endif
diff --git a/util/qemu-coroutine-lock.c b/util/qemu-coroutine-lock.c
index 84a50a9..2534435 100644
--- a/util/qemu-coroutine-lock.c
+++ b/util/qemu-coroutine-lock.c
@@ -202,7 +202,7 @@ static void coroutine_fn qemu_co_mutex_lock_slowpath(AioContext *ctx,
push_waiter(mutex, &w);
/*
- * Add waiter before reading mutex->handoff. Pairs with qatomic_mb_set
+ * Add waiter before reading mutex->handoff. Pairs with qatomic_set_mb
* in qemu_co_mutex_unlock.
*/
smp_mb__after_rmw();
@@ -310,7 +310,7 @@ void coroutine_fn qemu_co_mutex_unlock(CoMutex *mutex)
our_handoff = mutex->sequence;
/* Set handoff before checking for waiters. */
- qatomic_mb_set(&mutex->handoff, our_handoff);
+ qatomic_set_mb(&mutex->handoff, our_handoff);
if (!has_waiters(mutex)) {
/* The concurrent lock has not added itself yet, so it
* will be able to pick our handoff.