mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
Merge tag 'pull-maintainer-9.1-rc1-300724-1' of https://gitlab.com/stsquad/qemu into staging
Minor bug fixes and documentation cleanups: - display packages in CI builds to catch changes - stop compiler complaining about exec stacks in test cases - stop loongarch compiler complaining about rwx in test cases - improve docs on running TCG tests - remove old unneeded avocado test for memory callback testing - move test plugins into tcg testing dir - clean-up and move plugin documentation to emulation section - remove dead code from cache modelling plugin - add compatibility workaround for lockstep plugin - make some noise when building contrib plugins # -----BEGIN PGP SIGNATURE----- # # iQEzBAABCgAdFiEEZoWumedRZ7yvyN81+9DbCVqeKkQFAmaoxmwACgkQ+9DbCVqe # KkTOGwgAhAqwEQIIwridsih//+3NYB2QQ9SmbCW7ss/idVN0DfWEQLcEfiBz9sWl # Vh0CeptupLvtQlbbcnTdIG7sF6Aj9+XbTbYy4dS0nl4TGPmUoWqJy4QdZtpMlSBp # s3FyC2g6UxXKkbI64RPSkdGaMEdb8ACvlGrQqb2LvrH+6tmlEfSQ05jLFrm1L0Db # LjsxeFq50aVVIP2y91Cvc7FZmFgv0dqjTVlIMi9JGiW5cDKAwLDHv5AvQqT6oiv8 # yyknMlnf8pvNiJpsJYXHIbl/029C87n6NeStHjfrMA9yUC4hWqYb4qzXFu4k7fuo # 2s5WdRFK+QAXEgi9MhS2p7eXVVlMpw== # =8gOM # -----END PGP SIGNATURE----- # gpg: Signature made Tue 30 Jul 2024 08:54:36 PM AEST # gpg: using RSA key 6685AE99E75167BCAFC8DF35FBD0DB095A9E2A44 # gpg: Good signature from "Alex Bennée (Master Work Key) <alex.bennee@linaro.org>" [full] * tag 'pull-maintainer-9.1-rc1-300724-1' of https://gitlab.com/stsquad/qemu: plugin/loader: handle basic help query contrib/plugins: add compat for g_memdup2 contrib/plugins: be more vocal building contrib/plugins/cache.c: Remove redundant check of l2_access docs: split TCG plugin usage from devel section tests/tcg: move test plugins into tcg subdir tests/avocado: remove tcg_plugins virt_mem_icount test docs/devel: document how to run individual TCG tests docs/devel: update the testing introduction tests/tcg: update README tests/tcg/loongarch64: Use --no-warn-rwx-segments to link system tests tests/tcg: Use --noexecstack with assembler files gitlab: display /packages.txt in build jobs gitlab: record installed packages in /packages.txt in containers Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
@@ -9,6 +9,7 @@
|
||||
when: always
|
||||
before_script:
|
||||
- JOBS=$(expr $(nproc) + 1)
|
||||
- cat /packages.txt
|
||||
script:
|
||||
- export CCACHE_BASEDIR="$(pwd)"
|
||||
- export CCACHE_DIR="$CCACHE_BASEDIR/ccache"
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
key: "$CI_JOB_NAME"
|
||||
when: always
|
||||
timeout: 80m
|
||||
before_script:
|
||||
- cat /packages.txt
|
||||
script:
|
||||
- export CCACHE_BASEDIR="$(pwd)"
|
||||
- export CCACHE_DIR="$CCACHE_BASEDIR/ccache"
|
||||
|
||||
+1
-1
@@ -3751,7 +3751,7 @@ R: Pierrick Bouvier <pierrick.bouvier@linaro.org>
|
||||
S: Maintained
|
||||
F: docs/devel/tcg-plugins.rst
|
||||
F: plugins/
|
||||
F: tests/plugin/
|
||||
F: tests/tcg/plugins/
|
||||
F: tests/avocado/tcg_plugins.py
|
||||
F: contrib/plugins/
|
||||
|
||||
|
||||
@@ -39,26 +39,41 @@ endif
|
||||
|
||||
SONAMES := $(addsuffix $(SO_SUFFIX),$(addprefix lib,$(NAMES)))
|
||||
|
||||
# The main QEMU uses Glib extensively so it's perfectly fine to use it
|
||||
# The main QEMU uses Glib extensively so it is perfectly fine to use it
|
||||
# in plugins (which many example do).
|
||||
PLUGIN_CFLAGS := $(shell $(PKG_CONFIG) --cflags glib-2.0)
|
||||
PLUGIN_CFLAGS += -fPIC -Wall
|
||||
PLUGIN_CFLAGS += -I$(TOP_SRC_PATH)/include/qemu
|
||||
|
||||
# Helper that honours V=1 so we get some output when compiling
|
||||
quiet-@ = $(if $(V),,@$(if $1,printf " %-7s %s\n" "$(strip $1)" "$(strip $2)" && ))
|
||||
quiet-command = $(call quiet-@,$2,$3)$1
|
||||
|
||||
# for including , in command strings
|
||||
COMMA := ,
|
||||
|
||||
all: $(SONAMES)
|
||||
|
||||
%.o: %.c
|
||||
$(CC) $(CFLAGS) $(PLUGIN_CFLAGS) -c -o $@ $<
|
||||
$(call quiet-command, \
|
||||
$(CC) $(CFLAGS) $(PLUGIN_CFLAGS) -c -o $@ $<, \
|
||||
BUILD, plugin $@)
|
||||
|
||||
ifeq ($(CONFIG_WIN32),y)
|
||||
lib%$(SO_SUFFIX): %.o win32_linker.o ../../plugins/libqemu_plugin_api.a
|
||||
$(CC) -shared -o $@ $^ $(LDLIBS)
|
||||
$(call quiet-command, \
|
||||
$(CC) -shared -o $@ $^ $(LDLIBS), \
|
||||
LINK, plugin $@)
|
||||
else ifeq ($(CONFIG_DARWIN),y)
|
||||
lib%$(SO_SUFFIX): %.o
|
||||
$(CC) -bundle -Wl,-undefined,dynamic_lookup -o $@ $^ $(LDLIBS)
|
||||
$(call quiet-command, \
|
||||
$(CC) -bundle -Wl$(COMMA)-undefined$(COMMA)dynamic_lookup -o $@ $^ $(LDLIBS), \
|
||||
LINK, plugin $@)
|
||||
else
|
||||
lib%$(SO_SUFFIX): %.o
|
||||
$(CC) -shared -o $@ $^ $(LDLIBS)
|
||||
$(call quiet-command, \
|
||||
$(CC) -shared -o $@ $^ $(LDLIBS), \
|
||||
LINK, plugin $@)
|
||||
endif
|
||||
|
||||
|
||||
|
||||
@@ -558,7 +558,7 @@ static void append_stats_line(GString *line,
|
||||
" %-12" PRIu64 " %-11" PRIu64 " %10.4lf%%",
|
||||
l2_access,
|
||||
l2_misses,
|
||||
l2_access ? l2_miss_rate : 0.0);
|
||||
l2_miss_rate);
|
||||
}
|
||||
|
||||
g_string_append(line, "\n");
|
||||
|
||||
@@ -101,6 +101,31 @@ static void plugin_exit(qemu_plugin_id_t id, void *p)
|
||||
plugin_cleanup(id);
|
||||
}
|
||||
|
||||
/*
|
||||
* g_memdup has been deprecated in Glib since 2.68 and
|
||||
* will complain about it if you try to use it. However until
|
||||
* glib_req_ver for QEMU is bumped we make a copy of the glib-compat
|
||||
* handler.
|
||||
*/
|
||||
static inline gpointer g_memdup2_qemu(gconstpointer mem, gsize byte_size)
|
||||
{
|
||||
#if GLIB_CHECK_VERSION(2, 68, 0)
|
||||
return g_memdup2(mem, byte_size);
|
||||
#else
|
||||
gpointer new_mem;
|
||||
|
||||
if (mem && byte_size != 0) {
|
||||
new_mem = g_malloc(byte_size);
|
||||
memcpy(new_mem, mem, byte_size);
|
||||
} else {
|
||||
new_mem = NULL;
|
||||
}
|
||||
|
||||
return new_mem;
|
||||
#endif
|
||||
}
|
||||
#define g_memdup2(m, s) g_memdup2_qemu(m, s)
|
||||
|
||||
static void report_divergance(ExecState *us, ExecState *them)
|
||||
{
|
||||
DivergeState divrec = { log, 0 };
|
||||
|
||||
+564
-3
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+31
-3
@@ -3,13 +3,28 @@
|
||||
Testing in QEMU
|
||||
===============
|
||||
|
||||
This document describes the testing infrastructure in QEMU.
|
||||
QEMU's testing infrastructure is fairly complex as it covers
|
||||
everything from unit testing and exercising specific sub-systems all
|
||||
the way to full blown acceptance tests. To get an overview of the
|
||||
tests you can run ``make check-help`` from either the source or build
|
||||
tree.
|
||||
|
||||
Most (but not all) tests are also integrated into the meson build
|
||||
system so can be run directly from the build tree, for example:
|
||||
|
||||
.. code::
|
||||
|
||||
[./pyvenv/bin/]meson test --suite qemu:softfloat
|
||||
|
||||
will run just the softfloat tests.
|
||||
|
||||
The rest of this document will cover the details for specific test
|
||||
groups.
|
||||
|
||||
Testing with "make check"
|
||||
-------------------------
|
||||
|
||||
The "make check" testing family includes most of the C based tests in QEMU. For
|
||||
a quick help, run ``make check-help`` from the source tree.
|
||||
The "make check" testing family includes most of the C based tests in QEMU.
|
||||
|
||||
The usual way to run these tests is:
|
||||
|
||||
@@ -1475,6 +1490,19 @@ And run with::
|
||||
Adding ``V=1`` to the invocation will show the details of how to
|
||||
invoke QEMU for the test which is useful for debugging tests.
|
||||
|
||||
Running individual tests
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Tests can also be run directly from the test build directory. If you
|
||||
run ``make help`` from the test build directory you will get a list of
|
||||
all the tests that can be run. Please note that same binaries are used
|
||||
in multiple tests, for example::
|
||||
|
||||
make run-plugin-test-mmap-with-libinline.so
|
||||
|
||||
will run the mmap test with the ``libinline.so`` TCG plugin. The
|
||||
gdbstub tests also re-use the test binaries but while exercising gdb.
|
||||
|
||||
TCG test dependencies
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
+7
-1
@@ -18,6 +18,7 @@
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "qemu/config-file.h"
|
||||
#include "qemu/help_option.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/lockable.h"
|
||||
#include "qemu/option.h"
|
||||
@@ -98,7 +99,12 @@ static int plugin_add(void *opaque, const char *name, const char *value,
|
||||
bool is_on;
|
||||
char *fullarg;
|
||||
|
||||
if (strcmp(name, "file") == 0) {
|
||||
if (is_help_option(value)) {
|
||||
printf("Plugin options\n");
|
||||
printf(" file=<path/to/plugin.so>\n");
|
||||
printf(" plugin specific arguments\n");
|
||||
exit(0);
|
||||
} else if (strcmp(name, "file") == 0) {
|
||||
if (strcmp(value, "") == 0) {
|
||||
error_setg(errp, "requires a non-empty argument");
|
||||
return 1;
|
||||
|
||||
@@ -77,7 +77,7 @@ class PluginKernelNormal(PluginKernelBase):
|
||||
suffix=".log")
|
||||
|
||||
self.run_vm(kernel_path, kernel_command_line,
|
||||
"tests/plugin/libinsn.so", plugin_log.name,
|
||||
"tests/tcg/plugins/libinsn.so", plugin_log.name,
|
||||
console_pattern)
|
||||
|
||||
with plugin_log as lf, \
|
||||
@@ -107,7 +107,7 @@ class PluginKernelNormal(PluginKernelBase):
|
||||
suffix=".log")
|
||||
|
||||
self.run_vm(kernel_path, kernel_command_line,
|
||||
"tests/plugin/libinsn.so", plugin_log.name,
|
||||
"tests/tcg/plugins/libinsn.so", plugin_log.name,
|
||||
console_pattern,
|
||||
args=('-icount', 'shift=1'))
|
||||
|
||||
@@ -120,36 +120,3 @@ class PluginKernelNormal(PluginKernelBase):
|
||||
else:
|
||||
count = int(m.group("count"))
|
||||
self.log.info(f"Counted: {count} instructions")
|
||||
|
||||
def test_aarch64_virt_mem_icount(self):
|
||||
"""
|
||||
:avocado: tags=accel:tcg
|
||||
:avocado: tags=arch:aarch64
|
||||
:avocado: tags=machine:virt
|
||||
:avocado: tags=cpu:cortex-a53
|
||||
"""
|
||||
kernel_path = self._grab_aarch64_kernel()
|
||||
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
|
||||
'console=ttyAMA0')
|
||||
console_pattern = 'Kernel panic - not syncing: VFS:'
|
||||
|
||||
plugin_log = tempfile.NamedTemporaryFile(mode="r+t", prefix="plugin",
|
||||
suffix=".log")
|
||||
|
||||
self.run_vm(kernel_path, kernel_command_line,
|
||||
"tests/plugin/libmem.so,inline=true,callback=true", plugin_log.name,
|
||||
console_pattern,
|
||||
args=('-icount', 'shift=1'))
|
||||
|
||||
with plugin_log as lf, \
|
||||
mmap.mmap(lf.fileno(), 0, access=mmap.ACCESS_READ) as s:
|
||||
m = re.findall(br"mem accesses: (?P<count>\d+)", s)
|
||||
if m is None or len(m) != 2:
|
||||
self.fail("no memory access counts found")
|
||||
else:
|
||||
inline = int(m[0])
|
||||
callback = int(m[1])
|
||||
if inline != callback:
|
||||
self.fail("mismatched access counts")
|
||||
else:
|
||||
self.log.info(f"Counted {inline} memory accesses")
|
||||
|
||||
@@ -62,7 +62,8 @@ RUN DEBIAN_FRONTEND=noninteractive eatmydata \
|
||||
gcc-s390x-linux-gnu \
|
||||
libc6-dev-s390x-cross \
|
||||
gcc-sparc64-linux-gnu \
|
||||
libc6-dev-sparc64-cross
|
||||
libc6-dev-sparc64-cross && \
|
||||
dpkg-query --showformat '${Package}_${Version}_${Architecture}\n' --show > /packages.txt
|
||||
|
||||
|
||||
ENV QEMU_CONFIGURE_OPTS --disable-system --disable-docs --disable-tools
|
||||
|
||||
@@ -33,7 +33,8 @@ RUN apt-get update && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/c++ && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/cc && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/g++ && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/gcc
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/gcc && \
|
||||
dpkg-query --showformat '${Package}_${Version}_${Architecture}\n' --show > /packages.txt
|
||||
|
||||
RUN /usr/bin/pip3 install tomli
|
||||
|
||||
|
||||
@@ -36,7 +36,8 @@ RUN DEBIAN_FRONTEND=noninteractive eatmydata \
|
||||
python3-pip \
|
||||
python3-setuptools \
|
||||
python3-venv \
|
||||
python3-wheel
|
||||
python3-wheel && \
|
||||
dpkg-query --showformat '${Package}_${Version}_${Architecture}\n' --show > /packages.txt
|
||||
|
||||
RUN /usr/bin/pip3 install tomli
|
||||
|
||||
|
||||
@@ -32,7 +32,8 @@ RUN apt-get update && \
|
||||
python3-pip \
|
||||
python3-setuptools \
|
||||
python3-venv \
|
||||
python3-wheel
|
||||
python3-wheel && \
|
||||
dpkg-query --showformat '${Package}_${Version}_${Architecture}\n' --show > /packages.txt
|
||||
|
||||
RUN /usr/bin/pip3 install tomli
|
||||
|
||||
|
||||
@@ -34,7 +34,8 @@ RUN apt update && \
|
||||
python3-pip \
|
||||
python3-setuptools \
|
||||
python3-wheel \
|
||||
python3-venv
|
||||
python3-venv && \
|
||||
dpkg-query --showformat '${Package}_${Version}_${Architecture}\n' --show > /packages.txt
|
||||
|
||||
RUN /usr/bin/pip3 install tomli
|
||||
|
||||
|
||||
@@ -16,7 +16,8 @@ RUN apt-get update && \
|
||||
curl \
|
||||
gettext \
|
||||
git \
|
||||
python3-minimal
|
||||
python3-minimal && \
|
||||
dpkg-query --showformat '${Package}_${Version}_${Architecture}\n' --show > /packages.txt
|
||||
|
||||
ENV CPU_LIST dc232b dc233c de233_fpu dsp3400
|
||||
ENV TOOLCHAIN_RELEASE 2020.07
|
||||
|
||||
+1
-1
@@ -78,7 +78,7 @@ subdir('decode')
|
||||
|
||||
if 'CONFIG_TCG' in config_all_accel
|
||||
subdir('fp')
|
||||
subdir('plugin')
|
||||
subdir('tcg/plugins')
|
||||
endif
|
||||
|
||||
subdir('unit')
|
||||
|
||||
@@ -115,7 +115,7 @@ endif
|
||||
%: %.c
|
||||
$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $< -o $@ $(LDFLAGS)
|
||||
%: %.S
|
||||
$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $< -o $@ $(LDFLAGS)
|
||||
$(CC) $(CFLAGS) $(EXTRA_CFLAGS) -Wa,--noexecstack $< -o $@ $(LDFLAGS)
|
||||
else
|
||||
# For system targets we include a different Makefile fragment as the
|
||||
# build options for bare programs are usually pretty different. They
|
||||
@@ -142,8 +142,8 @@ RUN_TESTS=$(patsubst %,run-%, $(TESTS))
|
||||
|
||||
# If plugins exist also include those in the tests
|
||||
ifeq ($(CONFIG_PLUGIN),y)
|
||||
PLUGIN_SRC=$(SRC_PATH)/tests/plugin
|
||||
PLUGIN_LIB=../../plugin
|
||||
PLUGIN_SRC=$(SRC_PATH)/tests/tcg/plugins
|
||||
PLUGIN_LIB=../plugins
|
||||
VPATH+=$(PLUGIN_LIB)
|
||||
PLUGINS=$(patsubst %.c, lib%.so, $(notdir $(wildcard $(PLUGIN_SRC)/*.c)))
|
||||
|
||||
|
||||
+13
-8
@@ -1,9 +1,14 @@
|
||||
This directory contains various interesting guest programs for
|
||||
regression testing. Tests are either multi-arch, meaning they can be
|
||||
built for all guest architectures that support linux-user executable,
|
||||
or they are architecture specific.
|
||||
This directory contains various interesting guest binaries for
|
||||
regression testing the Tiny Code Generator doing system and user-mode
|
||||
emulation.
|
||||
|
||||
CRIS
|
||||
====
|
||||
The testsuite for CRIS is in tests/tcg/cris. You can run it
|
||||
with "make test-cris".
|
||||
The multiarch directory contains shared code for tests that can be
|
||||
built for all guest architectures. Architecture specific code can be
|
||||
found in their respective directories.
|
||||
|
||||
System mode tests will be under the "system" subdirectories.
|
||||
|
||||
GDB scripts for exercising the gdbstub on specific tests will be found
|
||||
under the "gdbstb" subdirectories.
|
||||
|
||||
See the developer guide for more instructions on "make check-tcg"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user