Various misc and testing fixes:
- Expand CODING_STYLE.rst a little more - usb-host build fix - allow check-softfloat unit tests without TCG - simplify mips imm_branch so compiler isn't confused - mark ppc64abi32 for deprecation - more compiler soothing in pch_rev_id - allow acceptance to skip missing binaries - more a bunch of plugins to contrib -----BEGIN PGP SIGNATURE----- iQEzBAABCgAdFiEEZoWumedRZ7yvyN81+9DbCVqeKkQFAl9Z9wkACgkQ+9DbCVqe KkRbkQf9HLRDEUSy/1LqbU7ncHzgCmnlzC0MKCqn/L3e+M916naO3xhu0tbJN9Ks nxu9irY1mGrj/gK+gJ9lr50GOvcc8XCFTpE82MisMRWWFeVRt3vYLAql7WcY0ioM K6jMMfoVswmVetP034llQhsAt9zvFimL89kp4O4i2Mjw5shsBIPfharXnnhL4EgS ykKmUdLWxAJPSOJJA71IAFP9UzMYfXg7/NHFK1SMVOWZjMT18aoa6YDzBpbr4KzX 4vOvgGK3tBlVuOooSew7By6iR5oBPa5GP7O9Z78osCsyvzJMPcoNxQZyvgnS0Tda q6+/QeF9/ooDPkg5Jq6Z8EAsY0q+XA== =PIOR -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/stsquad/tags/pull-testing-fixes-100920-1' into staging Various misc and testing fixes: - Expand CODING_STYLE.rst a little more - usb-host build fix - allow check-softfloat unit tests without TCG - simplify mips imm_branch so compiler isn't confused - mark ppc64abi32 for deprecation - more compiler soothing in pch_rev_id - allow acceptance to skip missing binaries - more a bunch of plugins to contrib # gpg: Signature made Thu 10 Sep 2020 10:51:05 BST # gpg: using RSA key 6685AE99E75167BCAFC8DF35FBD0DB095A9E2A44 # gpg: Good signature from "Alex Bennée (Master Work Key) <alex.bennee@linaro.org>" [full] # Primary key fingerprint: 6685 AE99 E751 67BC AFC8 DF35 FBD0 DB09 5A9E 2A44 * remotes/stsquad/tags/pull-testing-fixes-100920-1: plugins: move the more involved plugins to contrib tests/acceptance: Add Test.fetch_asset(cancel_on_missing=True) tests: bump avocado version hw/i386: make explicit clearing of pch_rev_id configure: don't enable ppc64abi32-linux-user by default docs/system/deprecated: mark ppc64abi32-linux-user for deprecation target/mips: simplify gen_compute_imm_branch logic tests/meson.build: fp tests don't need CONFIG_TCG usb-host: restrict workaround to new libusb versions CODING_STYLE.rst: flesh out our naming conventions. Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
3d9f371b01
@ -138,7 +138,7 @@ jobs:
|
||||
|
||||
|
||||
# Just build tools and run minimal unit and softfloat checks
|
||||
- name: "GCC check-softfloat (user)"
|
||||
- name: "GCC check-unit and check-softfloat"
|
||||
env:
|
||||
- BASE_CONFIG="--enable-tools"
|
||||
- CONFIG="--disable-user --disable-system"
|
||||
|
@ -109,8 +109,41 @@ names are lower_case_with_underscores_ending_with_a_t, like the POSIX
|
||||
uint64_t and family. Note that this last convention contradicts POSIX
|
||||
and is therefore likely to be changed.
|
||||
|
||||
When wrapping standard library functions, use the prefix ``qemu_`` to alert
|
||||
readers that they are seeing a wrapped version; otherwise avoid this prefix.
|
||||
Variable Naming Conventions
|
||||
---------------------------
|
||||
|
||||
A number of short naming conventions exist for variables that use
|
||||
common QEMU types. For example, the architecture independent CPUState
|
||||
is often held as a ``cs`` pointer variable, whereas the concrete
|
||||
CPUArchState is usually held in a pointer called ``env``.
|
||||
|
||||
Likewise, in device emulation code the common DeviceState is usually
|
||||
called ``dev``.
|
||||
|
||||
Function Naming Conventions
|
||||
---------------------------
|
||||
|
||||
Wrapped version of standard library or GLib functions use a ``qemu_``
|
||||
prefix to alert readers that they are seeing a wrapped version, for
|
||||
example ``qemu_strtol`` or ``qemu_mutex_lock``. Other utility functions
|
||||
that are widely called from across the codebase should not have any
|
||||
prefix, for example ``pstrcpy`` or bit manipulation functions such as
|
||||
``find_first_bit``.
|
||||
|
||||
The ``qemu_`` prefix is also used for functions that modify global
|
||||
emulator state, for example ``qemu_add_vm_change_state_handler``.
|
||||
However, if there is an obvious subsystem-specific prefix it should be
|
||||
used instead.
|
||||
|
||||
Public functions from a file or subsystem (declared in headers) tend
|
||||
to have a consistent prefix to show where they came from. For example,
|
||||
``tlb_`` for functions from ``cputlb.c`` or ``cpu_`` for functions
|
||||
from cpus.c.
|
||||
|
||||
If there are two versions of a function to be called with or without a
|
||||
lock held, the function that expects the lock to be already held
|
||||
usually uses the suffix ``_locked``.
|
||||
|
||||
|
||||
Block structure
|
||||
===============
|
||||
|
@ -2750,7 +2750,8 @@ M: Alex Bennée <alex.bennee@linaro.org>
|
||||
S: Maintained
|
||||
F: docs/devel/tcg-plugins.rst
|
||||
F: plugins/
|
||||
F: tests/plugin
|
||||
F: tests/plugin/
|
||||
F: contrib/plugins/
|
||||
|
||||
AArch64 TCG target
|
||||
M: Richard Henderson <richard.henderson@linaro.org>
|
||||
|
11
Makefile
11
Makefile
@ -106,6 +106,12 @@ config-host.mak: $(SRC_PATH)/configure $(SRC_PATH)/pc-bios $(SRC_PATH)/VERSION
|
||||
# Force configure to re-run if the API symbols are updated
|
||||
ifeq ($(CONFIG_PLUGIN),y)
|
||||
config-host.mak: $(SRC_PATH)/plugins/qemu-plugins.symbols
|
||||
|
||||
.PHONY: plugins
|
||||
plugins:
|
||||
$(call quiet-command,\
|
||||
$(MAKE) $(SUBDIR_MAKEFLAGS) -C contrib/plugins V="$(V)", \
|
||||
"BUILD", "example plugins")
|
||||
endif
|
||||
|
||||
else
|
||||
@ -258,6 +264,11 @@ help:
|
||||
$(call print-help,cscope,Generate cscope index)
|
||||
$(call print-help,sparse,Run sparse on the QEMU source)
|
||||
@echo ''
|
||||
ifeq ($(CONFIG_PLUGIN),y)
|
||||
@echo 'Plugin targets:'
|
||||
$(call print-help,plugins,Build the example TCG plugins)
|
||||
@echo ''
|
||||
endif
|
||||
@echo 'Cleaning targets:'
|
||||
$(call print-help,clean,Remove most generated files but keep the config)
|
||||
$(call print-help,distclean,Remove all generated files)
|
||||
|
48
configure
vendored
48
configure
vendored
@ -542,6 +542,8 @@ gettext=""
|
||||
bogus_os="no"
|
||||
malloc_trim=""
|
||||
|
||||
deprecated_features=""
|
||||
|
||||
# parse CC options first
|
||||
for opt do
|
||||
optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
|
||||
@ -1720,26 +1722,25 @@ if [ "$bsd_user" = "yes" ]; then
|
||||
mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
|
||||
fi
|
||||
|
||||
if test -z "$target_list_exclude"; then
|
||||
for config in $mak_wilds; do
|
||||
default_target_list="${default_target_list} $(basename "$config" .mak)"
|
||||
done
|
||||
else
|
||||
exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
|
||||
for config in $mak_wilds; do
|
||||
target="$(basename "$config" .mak)"
|
||||
exclude="no"
|
||||
for excl in $exclude_list; do
|
||||
if test "$excl" = "$target"; then
|
||||
exclude="yes"
|
||||
break;
|
||||
fi
|
||||
done
|
||||
if test "$exclude" = "no"; then
|
||||
default_target_list="${default_target_list} $target"
|
||||
if test -z "$target_list_exclude" -a -z "$target_list"; then
|
||||
# if the user doesn't specify anything lets skip deprecating stuff
|
||||
target_list_exclude=ppc64abi32-linux-user
|
||||
fi
|
||||
|
||||
exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
|
||||
for config in $mak_wilds; do
|
||||
target="$(basename "$config" .mak)"
|
||||
exclude="no"
|
||||
for excl in $exclude_list; do
|
||||
if test "$excl" = "$target"; then
|
||||
exclude="yes"
|
||||
break;
|
||||
fi
|
||||
done
|
||||
fi
|
||||
if test "$exclude" = "no"; then
|
||||
default_target_list="${default_target_list} $target"
|
||||
fi
|
||||
done
|
||||
|
||||
# Enumerate public trace backends for --help output
|
||||
trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
|
||||
@ -7557,7 +7558,7 @@ TARGET_SYSTBL=""
|
||||
case "$target_name" in
|
||||
i386)
|
||||
mttcg="yes"
|
||||
gdb_xml_files="i386-32bit.xml"
|
||||
gdb_xml_files="i386-32bit.xml"
|
||||
TARGET_SYSTBL_ABI=i386
|
||||
TARGET_SYSTBL=syscall_32.tbl
|
||||
;;
|
||||
@ -7667,6 +7668,7 @@ case "$target_name" in
|
||||
TARGET_SYSTBL_ABI=common,nospu,32
|
||||
echo "TARGET_ABI32=y" >> $config_target_mak
|
||||
gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
|
||||
deprecated_features="ppc64abi32 ${deprecated_features}"
|
||||
;;
|
||||
riscv32)
|
||||
TARGET_BASE_ARCH=riscv
|
||||
@ -7853,6 +7855,7 @@ DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
|
||||
DIRS="$DIRS docs docs/interop fsdev scsi"
|
||||
DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
|
||||
DIRS="$DIRS roms/seabios"
|
||||
DIRS="$DIRS contrib/plugins/"
|
||||
LINKS="Makefile"
|
||||
LINKS="$LINKS tests/tcg/lm32/Makefile"
|
||||
LINKS="$LINKS tests/tcg/Makefile.target"
|
||||
@ -7864,6 +7867,7 @@ LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
|
||||
LINKS="$LINKS tests/acceptance tests/data"
|
||||
LINKS="$LINKS tests/qemu-iotests/check"
|
||||
LINKS="$LINKS python"
|
||||
LINKS="$LINKS contrib/plugins/Makefile "
|
||||
UNLINK="pc-bios/keymaps"
|
||||
for bios_file in \
|
||||
$source_path/pc-bios/*.bin \
|
||||
@ -8011,6 +8015,12 @@ fi
|
||||
touch ninjatool.stamp
|
||||
fi
|
||||
|
||||
if test -n "${deprecated_features}"; then
|
||||
echo "Warning, deprecated features enabled."
|
||||
echo "Please see docs/system/deprecated.rst"
|
||||
echo " features: ${deprecated_features}"
|
||||
fi
|
||||
|
||||
# Save the configure command line for later reuse.
|
||||
cat <<EOD >config.status
|
||||
#!/bin/sh
|
||||
|
42
contrib/plugins/Makefile
Normal file
42
contrib/plugins/Makefile
Normal file
@ -0,0 +1,42 @@
|
||||
# -*- Mode: makefile -*-
|
||||
#
|
||||
# This Makefile example is fairly independent from the main makefile
|
||||
# so users can take and adapt it for their build. We only really
|
||||
# include config-host.mak so we don't have to repeat probing for
|
||||
# cflags that the main configure has already done for us.
|
||||
#
|
||||
|
||||
BUILD_DIR := $(CURDIR)/../..
|
||||
|
||||
include $(BUILD_DIR)/config-host.mak
|
||||
|
||||
VPATH += $(SRC_PATH)/contrib/plugins
|
||||
|
||||
NAMES :=
|
||||
NAMES += hotblocks
|
||||
NAMES += hotpages
|
||||
NAMES += howvec
|
||||
NAMES += lockstep
|
||||
|
||||
SONAMES := $(addsuffix .so,$(addprefix lib,$(NAMES)))
|
||||
|
||||
# The main QEMU uses Glib extensively so it's perfectly fine to use it
|
||||
# in plugins (which many example do).
|
||||
CFLAGS = $(GLIB_CFLAGS)
|
||||
CFLAGS += -fPIC
|
||||
CFLAGS += $(if $(findstring no-psabi,$(QEMU_CFLAGS)),-Wpsabi)
|
||||
CFLAGS += -I$(SRC_PATH)/include/qemu
|
||||
|
||||
all: $(SONAMES)
|
||||
|
||||
%.o: %.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $<
|
||||
|
||||
lib%.so: %.o
|
||||
$(CC) -shared -Wl,-soname,$@ -o $@ $^ $(LDLIBS)
|
||||
|
||||
clean:
|
||||
rm -f *.o *.so *.d
|
||||
rm -Rf .libs
|
||||
|
||||
.PHONY: all clean
|
@ -134,3 +134,149 @@ longer want to instrument the code. This operation is asynchronous
|
||||
which means callbacks may still occur after the uninstall operation is
|
||||
requested. The plugin isn't completely uninstalled until the safe work
|
||||
has executed while all vCPUs are quiescent.
|
||||
|
||||
Example Plugins
|
||||
===============
|
||||
|
||||
There are a number of plugins included with QEMU and you are
|
||||
encouraged to contribute your own plugins plugins upstream. There is a
|
||||
`contrib/plugins` directory where they can go.
|
||||
|
||||
- tests/plugins
|
||||
|
||||
These are some basic plugins that are used to test and exercise the
|
||||
API during the `make check-tcg` target.
|
||||
|
||||
- contrib/plugins/hotblocks.c
|
||||
|
||||
The hotblocks plugin allows you to examine the where hot paths of
|
||||
execution are in your program. Once the program has finished you will
|
||||
get a sorted list of blocks reporting the starting PC, translation
|
||||
count, number of instructions and execution count. This will work best
|
||||
with linux-user execution as system emulation tends to generate
|
||||
re-translations as blocks from different programs get swapped in and
|
||||
out of system memory.
|
||||
|
||||
If your program is single-threaded you can use the `inline` option for
|
||||
slightly faster (but not thread safe) counters.
|
||||
|
||||
Example::
|
||||
|
||||
./aarch64-linux-user/qemu-aarch64 \
|
||||
-plugin contrib/plugins/libhotblocks.so -d plugin \
|
||||
./tests/tcg/aarch64-linux-user/sha1
|
||||
SHA1=15dd99a1991e0b3826fede3deffc1feba42278e6
|
||||
collected 903 entries in the hash table
|
||||
pc, tcount, icount, ecount
|
||||
0x0000000041ed10, 1, 5, 66087
|
||||
0x000000004002b0, 1, 4, 66087
|
||||
...
|
||||
|
||||
- contrib/plugins/hotpages.c
|
||||
|
||||
Similar to hotblocks but this time tracks memory accesses::
|
||||
|
||||
./aarch64-linux-user/qemu-aarch64 \
|
||||
-plugin contrib/plugins/libhotpages.so -d plugin \
|
||||
./tests/tcg/aarch64-linux-user/sha1
|
||||
SHA1=15dd99a1991e0b3826fede3deffc1feba42278e6
|
||||
Addr, RCPUs, Reads, WCPUs, Writes
|
||||
0x000055007fe000, 0x0001, 31747952, 0x0001, 8835161
|
||||
0x000055007ff000, 0x0001, 29001054, 0x0001, 8780625
|
||||
0x00005500800000, 0x0001, 687465, 0x0001, 335857
|
||||
0x0000000048b000, 0x0001, 130594, 0x0001, 355
|
||||
0x0000000048a000, 0x0001, 1826, 0x0001, 11
|
||||
|
||||
- contrib/plugins/howvec.c
|
||||
|
||||
This is an instruction classifier so can be used to count different
|
||||
types of instructions. It has a number of options to refine which get
|
||||
counted. You can give an argument for a class of instructions to break
|
||||
it down fully, so for example to see all the system registers
|
||||
accesses::
|
||||
|
||||
./aarch64-softmmu/qemu-system-aarch64 $(QEMU_ARGS) \
|
||||
-append "root=/dev/sda2 systemd.unit=benchmark.service" \
|
||||
-smp 4 -plugin ./contrib/plugins/libhowvec.so,arg=sreg -d plugin
|
||||
|
||||
which will lead to a sorted list after the class breakdown::
|
||||
|
||||
Instruction Classes:
|
||||
Class: UDEF not counted
|
||||
Class: SVE (68 hits)
|
||||
Class: PCrel addr (47789483 hits)
|
||||
Class: Add/Sub (imm) (192817388 hits)
|
||||
Class: Logical (imm) (93852565 hits)
|
||||
Class: Move Wide (imm) (76398116 hits)
|
||||
Class: Bitfield (44706084 hits)
|
||||
Class: Extract (5499257 hits)
|
||||
Class: Cond Branch (imm) (147202932 hits)
|
||||
Class: Exception Gen (193581 hits)
|
||||
Class: NOP not counted
|
||||
Class: Hints (6652291 hits)
|
||||
Class: Barriers (8001661 hits)
|
||||
Class: PSTATE (1801695 hits)
|
||||
Class: System Insn (6385349 hits)
|
||||
Class: System Reg counted individually
|
||||
Class: Branch (reg) (69497127 hits)
|
||||
Class: Branch (imm) (84393665 hits)
|
||||
Class: Cmp & Branch (110929659 hits)
|
||||
Class: Tst & Branch (44681442 hits)
|
||||
Class: AdvSimd ldstmult (736 hits)
|
||||
Class: ldst excl (9098783 hits)
|
||||
Class: Load Reg (lit) (87189424 hits)
|
||||
Class: ldst noalloc pair (3264433 hits)
|
||||
Class: ldst pair (412526434 hits)
|
||||
Class: ldst reg (imm) (314734576 hits)
|
||||
Class: Loads & Stores (2117774 hits)
|
||||
Class: Data Proc Reg (223519077 hits)
|
||||
Class: Scalar FP (31657954 hits)
|
||||
Individual Instructions:
|
||||
Instr: mrs x0, sp_el0 (2682661 hits) (op=0xd5384100/ System Reg)
|
||||
Instr: mrs x1, tpidr_el2 (1789339 hits) (op=0xd53cd041/ System Reg)
|
||||
Instr: mrs x2, tpidr_el2 (1513494 hits) (op=0xd53cd042/ System Reg)
|
||||
Instr: mrs x0, tpidr_el2 (1490823 hits) (op=0xd53cd040/ System Reg)
|
||||
Instr: mrs x1, sp_el0 (933793 hits) (op=0xd5384101/ System Reg)
|
||||
Instr: mrs x2, sp_el0 (699516 hits) (op=0xd5384102/ System Reg)
|
||||
Instr: mrs x4, tpidr_el2 (528437 hits) (op=0xd53cd044/ System Reg)
|
||||
Instr: mrs x30, ttbr1_el1 (480776 hits) (op=0xd538203e/ System Reg)
|
||||
Instr: msr ttbr1_el1, x30 (480713 hits) (op=0xd518203e/ System Reg)
|
||||
Instr: msr vbar_el1, x30 (480671 hits) (op=0xd518c01e/ System Reg)
|
||||
...
|
||||
|
||||
To find the argument shorthand for the class you need to examine the
|
||||
source code of the plugin at the moment, specifically the `*opt`
|
||||
argument in the InsnClassExecCount tables.
|
||||
|
||||
- contrib/plugins/lockstep.c
|
||||
|
||||
This is a debugging tool for developers who want to find out when and
|
||||
where execution diverges after a subtle change to TCG code generation.
|
||||
It is not an exact science and results are likely to be mixed once
|
||||
asynchronous events are introduced. While the use of -icount can
|
||||
introduce determinism to the execution flow it doesn't always follow
|
||||
the translation sequence will be exactly the same. Typically this is
|
||||
caused by a timer firing to service the GUI causing a block to end
|
||||
early. However in some cases it has proved to be useful in pointing
|
||||
people at roughly where execution diverges. The only argument you need
|
||||
for the plugin is a path for the socket the two instances will
|
||||
communicate over::
|
||||
|
||||
|
||||
./sparc-softmmu/qemu-system-sparc -monitor none -parallel none \
|
||||
-net none -M SS-20 -m 256 -kernel day11/zImage.elf \
|
||||
-plugin ./contrib/plugins/liblockstep.so,arg=lockstep-sparc.sock \
|
||||
-d plugin,nochain
|
||||
|
||||
which will eventually report::
|
||||
|
||||
qemu-system-sparc: warning: nic lance.0 has no peer
|
||||
@ 0x000000ffd06678 vs 0x000000ffd001e0 (2/1 since last)
|
||||
@ 0x000000ffd07d9c vs 0x000000ffd06678 (3/1 since last)
|
||||
Δ insn_count @ 0x000000ffd07d9c (809900609) vs 0x000000ffd06678 (809900612)
|
||||
previously @ 0x000000ffd06678/10 (809900609 insns)
|
||||
previously @ 0x000000ffd001e0/4 (809900599 insns)
|
||||
previously @ 0x000000ffd080ac/2 (809900595 insns)
|
||||
previously @ 0x000000ffd08098/5 (809900593 insns)
|
||||
previously @ 0x000000ffd080c0/1 (809900588 insns)
|
||||
|
||||
|
@ -424,6 +424,13 @@ linux-user mode) is deprecated and will be removed in a future version
|
||||
of QEMU. Support for this CPU was removed from the upstream Linux
|
||||
kernel in 2018, and has also been dropped from glibc.
|
||||
|
||||
``ppc64abi32`` CPUs (since 5.2.0)
|
||||
'''''''''''''''''''''''''''''''''
|
||||
|
||||
The ``ppc64abi32`` architecture has a number of issues which regularly
|
||||
trip up our CI testing and is suspected to be quite broken. For that
|
||||
reason the maintainers strongly suspect no one actually uses it.
|
||||
|
||||
Related binaries
|
||||
----------------
|
||||
|
||||
|
@ -930,7 +930,7 @@ void igd_passthrough_isa_bridge_create(PCIBus *bus, uint16_t gpu_dev_id)
|
||||
struct PCIDevice *bridge_dev;
|
||||
int i, num;
|
||||
uint16_t pch_dev_id = 0xffff;
|
||||
uint8_t pch_rev_id;
|
||||
uint8_t pch_rev_id = 0;
|
||||
|
||||
num = ARRAY_SIZE(igd_combo_id_infos);
|
||||
for (i = 0; i < num; i++) {
|
||||
|
@ -943,7 +943,7 @@ static int usb_host_open(USBHostDevice *s, libusb_device *dev, int hostfd)
|
||||
usb_host_ep_update(s);
|
||||
|
||||
libusb_speed = libusb_get_device_speed(dev);
|
||||
#ifdef CONFIG_LINUX
|
||||
#if LIBUSB_API_VERSION >= 0x01000107 && defined(CONFIG_LINUX)
|
||||
if (hostfd && libusb_speed == 0) {
|
||||
/*
|
||||
* Workaround libusb bug: libusb_get_device_speed() does not
|
||||
|
@ -20028,8 +20028,7 @@ static void gen_pool32axf_nanomips_insn(CPUMIPSState *env, DisasContext *ctx)
|
||||
static void gen_compute_imm_branch(DisasContext *ctx, uint32_t opc,
|
||||
int rt, int32_t imm, int32_t offset)
|
||||
{
|
||||
TCGCond cond;
|
||||
int bcond_compute = 0;
|
||||
TCGCond cond = TCG_COND_ALWAYS;
|
||||
TCGv t0 = tcg_temp_new();
|
||||
TCGv t1 = tcg_temp_new();
|
||||
|
||||
@ -20046,7 +20045,6 @@ static void gen_compute_imm_branch(DisasContext *ctx, uint32_t opc,
|
||||
/* Treat as NOP */
|
||||
goto out;
|
||||
} else {
|
||||
bcond_compute = 1;
|
||||
cond = TCG_COND_EQ;
|
||||
}
|
||||
break;
|
||||
@ -20065,7 +20063,6 @@ static void gen_compute_imm_branch(DisasContext *ctx, uint32_t opc,
|
||||
tcg_gen_shri_tl(t0, t0, imm);
|
||||
tcg_gen_andi_tl(t0, t0, 1);
|
||||
tcg_gen_movi_tl(t1, 0);
|
||||
bcond_compute = 1;
|
||||
if (opc == NM_BBEQZC) {
|
||||
cond = TCG_COND_EQ;
|
||||
} else {
|
||||
@ -20080,7 +20077,6 @@ static void gen_compute_imm_branch(DisasContext *ctx, uint32_t opc,
|
||||
} else if (rt == 0 && imm != 0) {
|
||||
/* Unconditional branch */
|
||||
} else {
|
||||
bcond_compute = 1;
|
||||
cond = TCG_COND_NE;
|
||||
}
|
||||
break;
|
||||
@ -20088,24 +20084,20 @@ static void gen_compute_imm_branch(DisasContext *ctx, uint32_t opc,
|
||||
if (rt == 0 && imm == 0) {
|
||||
/* Unconditional branch */
|
||||
} else {
|
||||
bcond_compute = 1;
|
||||
cond = TCG_COND_GE;
|
||||
}
|
||||
break;
|
||||
case NM_BLTIC:
|
||||
bcond_compute = 1;
|
||||
cond = TCG_COND_LT;
|
||||
break;
|
||||
case NM_BGEIUC:
|
||||
if (rt == 0 && imm == 0) {
|
||||
/* Unconditional branch */
|
||||
} else {
|
||||
bcond_compute = 1;
|
||||
cond = TCG_COND_GEU;
|
||||
}
|
||||
break;
|
||||
case NM_BLTIUC:
|
||||
bcond_compute = 1;
|
||||
cond = TCG_COND_LTU;
|
||||
break;
|
||||
default:
|
||||
@ -20118,7 +20110,7 @@ static void gen_compute_imm_branch(DisasContext *ctx, uint32_t opc,
|
||||
clear_branch_hflags(ctx);
|
||||
ctx->base.is_jmp = DISAS_NORETURN;
|
||||
|
||||
if (bcond_compute == 0) {
|
||||
if (cond == TCG_COND_ALWAYS) {
|
||||
/* Uncoditional compact branch */
|
||||
gen_goto_tb(ctx, 0, ctx->btarget);
|
||||
} else {
|
||||
|
@ -50,7 +50,7 @@ RUN_TCG_TARGET_RULES=$(patsubst %,run-tcg-tests-%, $(TARGET_DIRS))
|
||||
$(foreach PROBE_TARGET,$(TARGET_DIRS), \
|
||||
$(eval -include $(SRC_PATH)/tests/tcg/Makefile.prereqs))
|
||||
|
||||
build-tcg-tests-%: $(if $(CONFIG_PLUGIN),plugins)
|
||||
build-tcg-tests-%: $(if $(CONFIG_PLUGIN),test-plugins)
|
||||
$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) \
|
||||
-f $(SRC_PATH)/tests/tcg/Makefile.qemu \
|
||||
SRC_PATH=$(SRC_PATH) \
|
||||
@ -127,7 +127,7 @@ check-acceptance: check-venv $(TESTS_RESULTS_DIR) get-vm-images
|
||||
--show=$(AVOCADO_SHOW) run --job-results-dir=$(TESTS_RESULTS_DIR) \
|
||||
--filter-by-tags-include-empty --filter-by-tags-include-empty-key \
|
||||
$(AVOCADO_TAGS) \
|
||||
$(if $(GITLAB_CI),,--failfast=on) tests/acceptance, \
|
||||
$(if $(GITLAB_CI),,--failfast) tests/acceptance, \
|
||||
"AVOCADO", "tests/acceptance")
|
||||
|
||||
# Consolidated targets
|
||||
|
@ -192,3 +192,15 @@ class Test(avocado.Test):
|
||||
def tearDown(self):
|
||||
for vm in self._vms.values():
|
||||
vm.shutdown()
|
||||
|
||||
def fetch_asset(self, name,
|
||||
asset_hash=None, algorithm=None,
|
||||
locations=None, expire=None,
|
||||
find_only=False, cancel_on_missing=True):
|
||||
return super(Test, self).fetch_asset(name,
|
||||
asset_hash=asset_hash,
|
||||
algorithm=algorithm,
|
||||
locations=locations,
|
||||
expire=expire,
|
||||
find_only=find_only,
|
||||
cancel_on_missing=cancel_on_missing)
|
||||
|
@ -259,8 +259,9 @@ test('decodetree', sh,
|
||||
workdir: meson.current_source_dir() / 'decode',
|
||||
suite: 'decodetree')
|
||||
|
||||
subdir('fp')
|
||||
|
||||
if 'CONFIG_TCG' in config_host
|
||||
subdir('fp')
|
||||
if 'CONFIG_PLUGIN' in config_host
|
||||
subdir('plugin')
|
||||
endif
|
||||
|
@ -1,7 +1,7 @@
|
||||
t = []
|
||||
foreach i : ['bb', 'empty', 'insn', 'mem', 'hotblocks', 'howvec', 'hotpages', 'lockstep']
|
||||
foreach i : ['bb', 'empty', 'insn', 'mem']
|
||||
t += shared_module(i, files(i + '.c'),
|
||||
include_directories: '../../include/qemu',
|
||||
dependencies: glib)
|
||||
endforeach
|
||||
alias_target('plugins', t)
|
||||
alias_target('test-plugins', t)
|
||||
|
@ -1,5 +1,5 @@
|
||||
# Add Python module requirements, one per line, to be installed
|
||||
# in the tests/venv Python virtual environment. For more info,
|
||||
# refer to: https://pip.pypa.io/en/stable/user_guide/#id1
|
||||
avocado-framework==76.0
|
||||
avocado-framework==81.0
|
||||
pycdlib==1.9.0
|
||||
|
@ -129,8 +129,7 @@ ifeq ($(CONFIG_PLUGIN),y)
|
||||
PLUGIN_SRC=$(SRC_PATH)/tests/plugin
|
||||
PLUGIN_LIB=../../plugin
|
||||
VPATH+=$(PLUGIN_LIB)
|
||||
PLUGINS=$(filter-out liblockstep.so,\
|
||||
$(patsubst %.c, lib%.so, $(notdir $(wildcard $(PLUGIN_SRC)/*.c))))
|
||||
PLUGINS=$(patsubst %.c, lib%.so, $(notdir $(wildcard $(PLUGIN_SRC)/*.c)))
|
||||
|
||||
# We need to ensure expand the run-plugin-TEST-with-PLUGIN
|
||||
# pre-requistes manually here as we can't use stems to handle it. We
|
||||
|
Loading…
Reference in New Issue
Block a user