mirror of https://github.com/xemu-project/xemu.git
* Cirrus-CI improvements and fixes (compile with -Werror & fix for 1h problem)
* Two build system fixes to fix some failures the CI * One m68k QOMification patch * Some trivial qtest patches * Some small improvements for the Gitlab CI -----BEGIN PGP SIGNATURE----- iQJFBAABCAAvFiEEJ7iIR+7gJQEY8+q5LtnXdP5wLbUFAl9QzcARHHRodXRoQHJl ZGhhdC5jb20ACgkQLtnXdP5wLbWfIQ//TqpTDJzS0qs3m/cvl8nJNbe/DqwSx2U5 gUgpLiLU0UVO8xOw0WwrdIIdRlEdV9QclG+kjq3VTNfPBpZ7llTsPlWuXduDvrrQ LhVaYCtOkl3eA1dvujQOAud04DQlo73NS5H1FeJzpK5UAQNhW/HSHZRgkNfZxCSj WRFQbXu2Sp+WKstvgoaBvIfr2yqdoToicuRL12IGkIYNdDzHVR82gouDrsxdO7Ig VDr0fUL2t4cylUAmNrmctV3Fe0WcbI8HXH1S825TvaoYofo6LmrkKBXj5IIoTK9s zCKIh+prMnWhXupCE4uCvDLESqptq6YvY5mt4a6c3om1U0qUvFxsaJeR0lS6sXHc xoIYdBTw1ETWfOgfT8ZpJRiogBoi7AkQrjWXUsUUR9KFYSRaOIIUujCnTyJuIVm1 spKxlwikVoIa9onJD+or4LC1HI79lS8i537lHjPWHgsZuzzjkT/cCIUvTcax/Rjz itpqi8sJrOlS4rP9u84qL/xz7wOixehriLUnBVb/Q6i7LaLMyDaLg+5+r8sPb6jx VzKLpDQ6YtigzRZ/PKOe1BQun4jGBT4oyautu+5Z7GSnkXqrR1NNnacOWGhJztzt S+IhC08boN4C8KqjynF1xazZXtkfYgya4p2SU6AQG0dxhvf9cEr1AWj0tBSXpRc/ 3jx4Ev24kZk= =kPTJ -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/huth-gitlab/tags/pull-request-2020-09-03' into staging * Cirrus-CI improvements and fixes (compile with -Werror & fix for 1h problem) * Two build system fixes to fix some failures the CI * One m68k QOMification patch * Some trivial qtest patches * Some small improvements for the Gitlab CI # gpg: Signature made Thu 03 Sep 2020 12:04:32 BST # gpg: using RSA key 27B88847EEE0250118F3EAB92ED9D774FE702DB5 # gpg: issuer "thuth@redhat.com" # gpg: Good signature from "Thomas Huth <th.huth@gmx.de>" [full] # gpg: aka "Thomas Huth <thuth@redhat.com>" [full] # gpg: aka "Thomas Huth <huth@tuxfamily.org>" [full] # gpg: aka "Thomas Huth <th.huth@posteo.de>" [unknown] # Primary key fingerprint: 27B8 8847 EEE0 2501 18F3 EAB9 2ED9 D774 FE70 2DB5 * remotes/huth-gitlab/tags/pull-request-2020-09-03: gitlab-ci.yml: Set artifacts expiration time gitlab-ci.yml: Run check-qtest and check-unit at the end of the fuzzer job gitlab/travis: Rework the disabled features tests libqtest: Rename qmp_assert_error_class() to qmp_expect_error_and_unref() tests/qtest/ipmi-kcs: Fix assert side-effect tests/qtest/tpm: Declare input buffers const and static tests/qtest/ahci: Improve error handling (NEGATIVE_RETURNS) hw/m68k: QOMify the mcf5206 system integration module configure: Add system = 'linux' for meson when cross-compiling meson: fix keymaps without qemu-keymap cirrus.yml: Split FreeBSD job into two parts cirrus.yml: Update the macOS jobs to Catalina cirrus.yml: Compile macOS with -Werror cirrus.yml: Compile FreeBSD with -Werror configure: Fix atomic64 test for --enable-werror on macOS Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
67a7bfe560
43
.cirrus.yml
43
.cirrus.yml
|
@ -1,42 +1,65 @@
|
|||
env:
|
||||
CIRRUS_CLONE_DEPTH: 1
|
||||
|
||||
freebsd_12_task:
|
||||
freebsd_1st_task:
|
||||
freebsd_instance:
|
||||
image_family: freebsd-12-1
|
||||
cpu: 8
|
||||
memory: 8G
|
||||
cpu: 4
|
||||
memory: 4G
|
||||
install_script: ASSUME_ALWAYS_YES=yes pkg bootstrap -f ; pkg install -y
|
||||
bash curl cyrus-sasl git glib gmake gnutls gsed
|
||||
nettle perl5 pixman pkgconf png usbredir
|
||||
script:
|
||||
- mkdir build
|
||||
- cd build
|
||||
- ../configure || { cat config.log; exit 1; }
|
||||
- gmake -j8
|
||||
- gmake V=1 check
|
||||
- ../configure --disable-user --target-list-exclude='alpha-softmmu
|
||||
ppc64-softmmu ppc-softmmu riscv32-softmmu riscv64-softmmu s390x-softmmu
|
||||
sparc64-softmmu sparc-softmmu x86_64-softmmu i386-softmmu'
|
||||
--enable-werror || { cat config.log; exit 1; }
|
||||
- gmake -j$(sysctl -n hw.ncpu)
|
||||
- gmake -j$(sysctl -n hw.ncpu) check
|
||||
|
||||
freebsd_2nd_task:
|
||||
freebsd_instance:
|
||||
image_family: freebsd-12-1
|
||||
cpu: 4
|
||||
memory: 4G
|
||||
install_script: ASSUME_ALWAYS_YES=yes pkg bootstrap -f ; pkg install -y
|
||||
bash curl cyrus-sasl git glib gmake gnutls gtk3 gsed libepoxy mesa-libs
|
||||
nettle perl5 pixman pkgconf png SDL2 usbredir
|
||||
script:
|
||||
- ./configure --enable-werror --target-list='alpha-softmmu ppc64-softmmu
|
||||
ppc-softmmu riscv32-softmmu riscv64-softmmu s390x-softmmu
|
||||
sparc64-softmmu sparc-softmmu x86_64-softmmu i386-softmmu
|
||||
sparc-bsd-user sparc64-bsd-user x86_64-bsd-user i386-bsd-user'
|
||||
|| { cat config.log; exit 1; }
|
||||
- gmake -j$(sysctl -n hw.ncpu)
|
||||
- gmake -j$(sysctl -n hw.ncpu) check
|
||||
|
||||
macos_task:
|
||||
osx_instance:
|
||||
image: mojave-base
|
||||
image: catalina-base
|
||||
install_script:
|
||||
- brew install pkg-config python gnu-sed glib pixman make sdl2 bash
|
||||
script:
|
||||
- mkdir build
|
||||
- cd build
|
||||
- ../configure --python=/usr/local/bin/python3 || { cat config.log; exit 1; }
|
||||
- ../configure --python=/usr/local/bin/python3 --enable-werror
|
||||
--extra-cflags='-Wno-error=deprecated-declarations'
|
||||
|| { cat config.log; exit 1; }
|
||||
- gmake -j$(sysctl -n hw.ncpu)
|
||||
- gmake check
|
||||
|
||||
macos_xcode_task:
|
||||
osx_instance:
|
||||
# this is an alias for the latest Xcode
|
||||
image: mojave-xcode
|
||||
image: catalina-xcode
|
||||
install_script:
|
||||
- brew install pkg-config gnu-sed glib pixman make sdl2 bash
|
||||
script:
|
||||
- mkdir build
|
||||
- cd build
|
||||
- ../configure --cc=clang || { cat config.log; exit 1; }
|
||||
- ../configure --extra-cflags='-Wno-error=deprecated-declarations'
|
||||
--enable-werror --cc=clang || { cat config.log; exit 1; }
|
||||
- gmake -j$(sysctl -n hw.ncpu)
|
||||
- gmake check
|
||||
|
|
|
@ -74,6 +74,7 @@ build-system-ubuntu:
|
|||
moxie-softmmu microblazeel-softmmu mips64el-softmmu
|
||||
MAKE_CHECK_ARGS: check-build
|
||||
artifacts:
|
||||
expire_in: 2 days
|
||||
paths:
|
||||
- build
|
||||
|
||||
|
@ -104,6 +105,7 @@ build-system-debian:
|
|||
riscv64-softmmu sh4eb-softmmu sparc-softmmu xtensaeb-softmmu
|
||||
MAKE_CHECK_ARGS: check-build
|
||||
artifacts:
|
||||
expire_in: 2 days
|
||||
paths:
|
||||
- build
|
||||
|
||||
|
@ -134,6 +136,7 @@ build-system-fedora:
|
|||
xtensa-softmmu m68k-softmmu riscv32-softmmu ppc-softmmu sparc64-softmmu
|
||||
MAKE_CHECK_ARGS: check-build
|
||||
artifacts:
|
||||
expire_in: 2 days
|
||||
paths:
|
||||
- build
|
||||
|
||||
|
@ -164,6 +167,7 @@ build-system-centos:
|
|||
x86_64-softmmu rx-softmmu sh4-softmmu nios2-softmmu
|
||||
MAKE_CHECK_ARGS: check-build
|
||||
artifacts:
|
||||
expire_in: 2 days
|
||||
paths:
|
||||
- build
|
||||
|
||||
|
@ -190,13 +194,25 @@ build-disabled:
|
|||
<<: *native_build_job_definition
|
||||
variables:
|
||||
IMAGE: fedora
|
||||
CONFIGURE_ARGS: --disable-rdma --disable-slirp --disable-curl
|
||||
--disable-capstone --disable-live-block-migration --disable-glusterfs
|
||||
--disable-replication --disable-coroutine-pool --disable-smartcard
|
||||
--disable-guest-agent --disable-curses --disable-libxml2 --disable-tpm
|
||||
--disable-qom-cast-debug --disable-spice --disable-vhost-vsock
|
||||
--disable-vhost-net --disable-vhost-crypto --disable-vhost-user
|
||||
TARGETS: i386-softmmu ppc64-softmmu mips64-softmmu i386-linux-user
|
||||
CONFIGURE_ARGS: --disable-attr --disable-avx2 --disable-bochs
|
||||
--disable-brlapi --disable-bzip2 --disable-cap-ng --disable-capstone
|
||||
--disable-cloop --disable-coroutine-pool --disable-curl --disable-curses
|
||||
--disable-dmg --disable-docs --disable-glusterfs --disable-gnutls
|
||||
--disable-gtk --disable-guest-agent --disable-iconv --disable-kvm
|
||||
--disable-libiscsi --disable-libpmem --disable-libssh --disable-libusb
|
||||
--disable-libxml2 --disable-linux-aio --disable-live-block-migration
|
||||
--disable-lzo --disable-malloc-trim --disable-mpath --disable-nettle
|
||||
--disable-numa --disable-parallels --disable-pie --disable-qcow1
|
||||
--disable-qed --disable-qom-cast-debug --disable-rbd --disable-rdma
|
||||
--disable-replication --disable-sdl --disable-seccomp --disable-sheepdog
|
||||
--disable-slirp --disable-smartcard --disable-snappy --disable-spice
|
||||
--disable-strip --disable-tpm --disable-usb-redir --disable-vdi
|
||||
--disable-vhost-crypto --disable-vhost-net --disable-vhost-scsi
|
||||
--disable-vhost-user --disable-vhost-vdpa --disable-vhost-vsock
|
||||
--disable-virglrenderer --disable-vnc --disable-vte --disable-vvfat
|
||||
--disable-xen --disable-zstd
|
||||
TARGETS: arm-softmmu i386-softmmu ppc64-softmmu mips64-softmmu
|
||||
s390x-softmmu i386-linux-user
|
||||
MAKE_CHECK_ARGS: check-qtest SPEED=slow
|
||||
|
||||
build-tcg-disabled:
|
||||
|
@ -243,13 +259,15 @@ build-oss-fuzz:
|
|||
- mkdir build-oss-fuzz
|
||||
- CC="clang" CXX="clang++" CFLAGS="-fsanitize=address"
|
||||
./scripts/oss-fuzz/build.sh
|
||||
- export ASAN_OPTIONS="fast_unwind_on_malloc=0"
|
||||
- for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f
|
||||
| grep -v slirp); do
|
||||
grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ;
|
||||
echo Testing ${fuzzer} ... ;
|
||||
ASAN_OPTIONS="fast_unwind_on_malloc=0"
|
||||
"${fuzzer}" -runs=1000 -seed=1 || exit 1 ;
|
||||
"${fuzzer}" -runs=1000 -seed=1 || exit 1 ;
|
||||
done
|
||||
# Unrelated to fuzzer: run some tests with -fsanitize=address
|
||||
- cd build-oss-fuzz && make check-qtest-i386 check-unit
|
||||
|
||||
build-tci:
|
||||
<<: *native_build_job_definition
|
||||
|
|
|
@ -159,12 +159,6 @@ jobs:
|
|||
- CONFIG="--enable-debug-tcg --disable-system"
|
||||
- CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-debug-tcg"
|
||||
|
||||
|
||||
- name: "GCC some libs disabled (main-softmmu)"
|
||||
env:
|
||||
- CONFIG="--disable-linux-aio --disable-cap-ng --disable-attr --disable-brlapi --disable-libusb --disable-replication --target-list=${MAIN_SOFTMMU_TARGETS}"
|
||||
|
||||
|
||||
# Module builds are mostly of interest to major distros
|
||||
- name: "GCC modules (main-softmmu)"
|
||||
env:
|
||||
|
|
|
@ -5755,11 +5755,11 @@ int main(void)
|
|||
{
|
||||
uint64_t x = 0, y = 0;
|
||||
#ifdef __ATOMIC_RELAXED
|
||||
y = __atomic_load_8(&x, 0);
|
||||
__atomic_store_8(&x, y, 0);
|
||||
__atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
|
||||
__atomic_exchange_8(&x, y, 0);
|
||||
__atomic_fetch_add_8(&x, y, 0);
|
||||
y = __atomic_load_n(&x, __ATOMIC_RELAXED);
|
||||
__atomic_store_n(&x, y, __ATOMIC_RELAXED);
|
||||
__atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
|
||||
__atomic_exchange_n(&x, y, __ATOMIC_RELAXED);
|
||||
__atomic_fetch_add(&x, y, __ATOMIC_RELAXED);
|
||||
#else
|
||||
typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
|
||||
__sync_lock_test_and_set(&x, y);
|
||||
|
@ -8065,6 +8065,9 @@ fi
|
|||
# so the build tree will be missing the link back to the new file, and
|
||||
# tests might fail. Prefer to keep the relevant files in their own
|
||||
# directory and symlink the directory instead.
|
||||
# UNLINK is used to remove symlinks from older development versions
|
||||
# that might get into the way when doing "git update" without doing
|
||||
# a "make distclean" in between.
|
||||
DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
|
||||
DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
|
||||
DIRS="$DIRS docs docs/interop fsdev scsi"
|
||||
|
@ -8081,6 +8084,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"
|
||||
UNLINK="pc-bios/keymaps"
|
||||
for bios_file in \
|
||||
$source_path/pc-bios/*.bin \
|
||||
$source_path/pc-bios/*.elf \
|
||||
|
@ -8101,6 +8105,11 @@ for f in $LINKS ; do
|
|||
symlink "$source_path/$f" "$f"
|
||||
fi
|
||||
done
|
||||
for f in $UNLINK ; do
|
||||
if [ -L "$f" ]; then
|
||||
rm -f "$f"
|
||||
fi
|
||||
done
|
||||
|
||||
(for i in $cross_cc_vars; do
|
||||
export $i
|
||||
|
@ -8163,6 +8172,9 @@ if test -n "$cross_prefix"; then
|
|||
?:*) pre_prefix=/ ;;
|
||||
esac
|
||||
fi
|
||||
if test "$linux" = "yes" ; then
|
||||
echo "system = 'linux'" >> $cross
|
||||
fi
|
||||
case "$ARCH" in
|
||||
i386|x86_64)
|
||||
echo "cpu_family = 'x86'" >> $cross
|
||||
|
|
|
@ -21,7 +21,17 @@
|
|||
#define AN5206_MBAR_ADDR 0x10000000
|
||||
#define AN5206_RAMBAR_ADDR 0x20000000
|
||||
|
||||
/* Board init. */
|
||||
static void mcf5206_init(MemoryRegion *sysmem, uint32_t base)
|
||||
{
|
||||
DeviceState *dev;
|
||||
SysBusDevice *s;
|
||||
|
||||
dev = qdev_new(TYPE_MCF5206_MBAR);
|
||||
s = SYS_BUS_DEVICE(dev);
|
||||
sysbus_realize_and_unref(s, &error_fatal);
|
||||
|
||||
memory_region_add_subregion(sysmem, base, sysbus_mmio_get_region(s, 0));
|
||||
}
|
||||
|
||||
static void an5206_init(MachineState *machine)
|
||||
{
|
||||
|
@ -51,7 +61,7 @@ static void an5206_init(MachineState *machine)
|
|||
memory_region_init_ram(sram, NULL, "an5206.sram", 512, &error_fatal);
|
||||
memory_region_add_subregion(address_space_mem, AN5206_RAMBAR_ADDR, sram);
|
||||
|
||||
mcf5206_init(address_space_mem, AN5206_MBAR_ADDR, cpu);
|
||||
mcf5206_init(address_space_mem, AN5206_MBAR_ADDR);
|
||||
|
||||
/* Load kernel. */
|
||||
if (!kernel_filename) {
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include "qemu/timer.h"
|
||||
#include "hw/ptimer.h"
|
||||
#include "sysemu/sysemu.h"
|
||||
#include "hw/sysbus.h"
|
||||
|
||||
/* General purpose timer module. */
|
||||
typedef struct {
|
||||
|
@ -159,6 +160,8 @@ static m5206_timer_state *m5206_timer_init(qemu_irq irq)
|
|||
/* System Integration Module. */
|
||||
|
||||
typedef struct {
|
||||
SysBusDevice parent_obj;
|
||||
|
||||
M68kCPU *cpu;
|
||||
MemoryRegion iomem;
|
||||
m5206_timer_state *timer[2];
|
||||
|
@ -174,6 +177,8 @@ typedef struct {
|
|||
uint8_t uivr[2];
|
||||
} m5206_mbar_state;
|
||||
|
||||
#define MCF5206_MBAR(obj) OBJECT_CHECK(m5206_mbar_state, (obj), TYPE_MCF5206_MBAR)
|
||||
|
||||
/* Interrupt controller. */
|
||||
|
||||
static int m5206_find_pending_irq(m5206_mbar_state *s)
|
||||
|
@ -257,8 +262,10 @@ static void m5206_mbar_set_irq(void *opaque, int irq, int level)
|
|||
|
||||
/* System Integration Module. */
|
||||
|
||||
static void m5206_mbar_reset(m5206_mbar_state *s)
|
||||
static void m5206_mbar_reset(DeviceState *dev)
|
||||
{
|
||||
m5206_mbar_state *s = MCF5206_MBAR(dev);
|
||||
|
||||
s->scr = 0xc0;
|
||||
s->icr[1] = 0x04;
|
||||
s->icr[2] = 0x08;
|
||||
|
@ -578,24 +585,43 @@ static const MemoryRegionOps m5206_mbar_ops = {
|
|||
.endianness = DEVICE_NATIVE_ENDIAN,
|
||||
};
|
||||
|
||||
qemu_irq *mcf5206_init(MemoryRegion *sysmem, uint32_t base, M68kCPU *cpu)
|
||||
static void mcf5206_mbar_realize(DeviceState *dev, Error **errp)
|
||||
{
|
||||
m5206_mbar_state *s;
|
||||
m5206_mbar_state *s = MCF5206_MBAR(dev);
|
||||
qemu_irq *pic;
|
||||
|
||||
s = g_new0(m5206_mbar_state, 1);
|
||||
|
||||
memory_region_init_io(&s->iomem, NULL, &m5206_mbar_ops, s,
|
||||
"mbar", 0x00001000);
|
||||
memory_region_add_subregion(sysmem, base, &s->iomem);
|
||||
sysbus_init_mmio(SYS_BUS_DEVICE(dev), &s->iomem);
|
||||
|
||||
pic = qemu_allocate_irqs(m5206_mbar_set_irq, s, 14);
|
||||
s->timer[0] = m5206_timer_init(pic[9]);
|
||||
s->timer[1] = m5206_timer_init(pic[10]);
|
||||
s->uart[0] = mcf_uart_init(pic[12], serial_hd(0));
|
||||
s->uart[1] = mcf_uart_init(pic[13], serial_hd(1));
|
||||
s->cpu = cpu;
|
||||
|
||||
m5206_mbar_reset(s);
|
||||
return pic;
|
||||
s->cpu = M68K_CPU(qemu_get_cpu(0));
|
||||
}
|
||||
|
||||
static void mcf5206_mbar_class_init(ObjectClass *oc, void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(oc);
|
||||
|
||||
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
|
||||
dc->desc = "MCF5206 system integration module";
|
||||
dc->realize = mcf5206_mbar_realize;
|
||||
dc->reset = m5206_mbar_reset;
|
||||
}
|
||||
|
||||
static const TypeInfo mcf5206_mbar_info = {
|
||||
.name = TYPE_MCF5206_MBAR,
|
||||
.parent = TYPE_SYS_BUS_DEVICE,
|
||||
.instance_size = sizeof(m5206_mbar_state),
|
||||
.class_init = mcf5206_mbar_class_init,
|
||||
};
|
||||
|
||||
static void mcf5206_mbar_register_types(void)
|
||||
{
|
||||
type_register_static(&mcf5206_mbar_info);
|
||||
}
|
||||
|
||||
type_init(mcf5206_mbar_register_types)
|
||||
|
|
|
@ -18,7 +18,6 @@ qemu_irq *mcf_intc_init(struct MemoryRegion *sysmem,
|
|||
M68kCPU *cpu);
|
||||
|
||||
/* mcf5206.c */
|
||||
qemu_irq *mcf5206_init(struct MemoryRegion *sysmem,
|
||||
uint32_t base, M68kCPU *cpu);
|
||||
#define TYPE_MCF5206_MBAR "mcf5206-mbar"
|
||||
|
||||
#endif
|
||||
|
|
|
@ -38,19 +38,29 @@ if meson.is_cross_build() or 'CONFIG_XKBCOMMON' not in config_host
|
|||
else
|
||||
native_qemu_keymap = qemu_keymap
|
||||
endif
|
||||
|
||||
t = []
|
||||
foreach km, args: keymaps
|
||||
t += custom_target(km,
|
||||
build_by_default: true,
|
||||
output: km,
|
||||
command: [native_qemu_keymap, '-f', '@OUTPUT@', args.split()],
|
||||
install_dir: qemu_datadir / 'keymaps')
|
||||
if native_qemu_keymap.found()
|
||||
# generate with qemu-kvm
|
||||
t += custom_target(km,
|
||||
build_by_default: true,
|
||||
output: km,
|
||||
command: [native_qemu_keymap, '-f', '@OUTPUT@', args.split()],
|
||||
install_dir: qemu_datadir / 'keymaps')
|
||||
else
|
||||
# copy from source tree
|
||||
t += custom_target(km,
|
||||
build_by_default: true,
|
||||
input: km,
|
||||
output: km,
|
||||
command: ['cp', '@INPUT@', '@OUTPUT@'],
|
||||
install_dir: qemu_datadir / 'keymaps')
|
||||
endif
|
||||
endforeach
|
||||
if t.length() > 0
|
||||
|
||||
if native_qemu_keymap.found()
|
||||
alias_target('update-keymaps', t)
|
||||
else
|
||||
# install from the source tree
|
||||
install_data(keymaps.keys(), install_dir: qemu_datadir / 'keymaps')
|
||||
endif
|
||||
|
||||
install_data(['sl', 'sv'], install_dir: qemu_datadir / 'keymaps')
|
||||
|
|
|
@ -1443,6 +1443,7 @@ static int prepare_iso(size_t size, unsigned char **buf, char **name)
|
|||
ssize_t ret;
|
||||
int fd = mkstemp(cdrom_path);
|
||||
|
||||
g_assert(fd != -1);
|
||||
g_assert(buf);
|
||||
g_assert(name);
|
||||
patt = g_malloc(size);
|
||||
|
|
|
@ -103,7 +103,7 @@ static void test_after_failed_device_add(void)
|
|||
" 'drive': 'drive0'"
|
||||
"}}", driver);
|
||||
g_assert(response);
|
||||
qmp_assert_error_class(response, "GenericError");
|
||||
qmp_expect_error_and_unref(response, "GenericError");
|
||||
|
||||
/* Delete the drive */
|
||||
drive_del(qts);
|
||||
|
|
|
@ -81,7 +81,8 @@ static void kcs_wait_obf(void)
|
|||
{
|
||||
unsigned int count = 1000;
|
||||
while (IPMI_KCS_CMDREG_GET_OBF() == 0) {
|
||||
g_assert(--count != 0);
|
||||
--count;
|
||||
g_assert(count != 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -704,13 +704,13 @@ void qtest_qmp_device_del(QTestState *qts, const char *id);
|
|||
bool qmp_rsp_is_err(QDict *rsp);
|
||||
|
||||
/**
|
||||
* qmp_assert_error_class:
|
||||
* qmp_expect_error_and_unref:
|
||||
* @rsp: QMP response to check for error
|
||||
* @class: an error class
|
||||
*
|
||||
* Assert the response has the given error class and discard @rsp.
|
||||
*/
|
||||
void qmp_assert_error_class(QDict *rsp, const char *class);
|
||||
void qmp_expect_error_and_unref(QDict *rsp, const char *class);
|
||||
|
||||
/**
|
||||
* qtest_probe_child:
|
||||
|
|
|
@ -1359,7 +1359,7 @@ bool qmp_rsp_is_err(QDict *rsp)
|
|||
return !!error;
|
||||
}
|
||||
|
||||
void qmp_assert_error_class(QDict *rsp, const char *class)
|
||||
void qmp_expect_error_and_unref(QDict *rsp, const char *class)
|
||||
{
|
||||
QDict *error = qdict_get_qdict(rsp, "error");
|
||||
|
||||
|
|
|
@ -210,19 +210,19 @@ static void test_object_add_failure_modes(void)
|
|||
resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':"
|
||||
" {'qom-type': 'memory-backend-ram', 'id': 'ram1' } }");
|
||||
g_assert_nonnull(resp);
|
||||
qmp_assert_error_class(resp, "GenericError");
|
||||
qmp_expect_error_and_unref(resp, "GenericError");
|
||||
|
||||
/* attempt to create an object without qom-type */
|
||||
resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':"
|
||||
" {'id': 'ram1' } }");
|
||||
g_assert_nonnull(resp);
|
||||
qmp_assert_error_class(resp, "GenericError");
|
||||
qmp_expect_error_and_unref(resp, "GenericError");
|
||||
|
||||
/* attempt to delete an object that does not exist */
|
||||
resp = qtest_qmp(qts, "{'execute': 'object-del', 'arguments':"
|
||||
" {'id': 'ram1' } }");
|
||||
g_assert_nonnull(resp);
|
||||
qmp_assert_error_class(resp, "GenericError");
|
||||
qmp_expect_error_and_unref(resp, "GenericError");
|
||||
|
||||
/* attempt to create 2 objects with duplicate id */
|
||||
resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':"
|
||||
|
@ -236,7 +236,7 @@ static void test_object_add_failure_modes(void)
|
|||
" {'qom-type': 'memory-backend-ram', 'id': 'ram1',"
|
||||
" 'props': {'size': 1048576 } } }");
|
||||
g_assert_nonnull(resp);
|
||||
qmp_assert_error_class(resp, "GenericError");
|
||||
qmp_expect_error_and_unref(resp, "GenericError");
|
||||
|
||||
/* delete ram1 object */
|
||||
resp = qtest_qmp(qts, "{'execute': 'object-del', 'arguments':"
|
||||
|
@ -251,7 +251,7 @@ static void test_object_add_failure_modes(void)
|
|||
" 'props': {'size': '1048576' } } }");
|
||||
g_assert_nonnull(resp);
|
||||
/* now do it right */
|
||||
qmp_assert_error_class(resp, "GenericError");
|
||||
qmp_expect_error_and_unref(resp, "GenericError");
|
||||
|
||||
resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':"
|
||||
" {'qom-type': 'memory-backend-ram', 'id': 'ram1',"
|
||||
|
@ -272,7 +272,7 @@ static void test_object_add_failure_modes(void)
|
|||
" {'qom-type': 'memory-backend-ram',"
|
||||
" 'props': {'size': 1048576 } } }");
|
||||
g_assert_nonnull(resp);
|
||||
qmp_assert_error_class(resp, "GenericError");
|
||||
qmp_expect_error_and_unref(resp, "GenericError");
|
||||
|
||||
/* now do it right */
|
||||
resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':"
|
||||
|
@ -294,7 +294,7 @@ static void test_object_add_failure_modes(void)
|
|||
" {'qom-type': 'memory-backend-ram', 'id': 'ram1',"
|
||||
" 'props': {'sized': 1048576 } } }");
|
||||
g_assert_nonnull(resp);
|
||||
qmp_assert_error_class(resp, "GenericError");
|
||||
qmp_expect_error_and_unref(resp, "GenericError");
|
||||
|
||||
/* now do it right */
|
||||
resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':"
|
||||
|
@ -321,7 +321,7 @@ static void test_object_add_failure_modes(void)
|
|||
resp = qtest_qmp(qts, "{'execute': 'object-del', 'arguments':"
|
||||
" {'id': 'ram1' } }");
|
||||
g_assert_nonnull(resp);
|
||||
qmp_assert_error_class(resp, "GenericError");
|
||||
qmp_expect_error_and_unref(resp, "GenericError");
|
||||
|
||||
qtest_quit(qts);
|
||||
}
|
||||
|
|
|
@ -38,7 +38,7 @@ static void assert_recovered(QTestState *qts)
|
|||
QDict *resp;
|
||||
|
||||
resp = qtest_qmp(qts, "{ 'execute': 'no-such-cmd' }");
|
||||
qmp_assert_error_class(resp, "CommandNotFound");
|
||||
qmp_expect_error_and_unref(resp, "CommandNotFound");
|
||||
}
|
||||
|
||||
static void test_malformed(QTestState *qts)
|
||||
|
@ -48,58 +48,58 @@ static void test_malformed(QTestState *qts)
|
|||
/* syntax error */
|
||||
qtest_qmp_send_raw(qts, "{]\n");
|
||||
resp = qtest_qmp_receive(qts);
|
||||
qmp_assert_error_class(resp, "GenericError");
|
||||
qmp_expect_error_and_unref(resp, "GenericError");
|
||||
assert_recovered(qts);
|
||||
|
||||
/* lexical error: impossible byte outside string */
|
||||
qtest_qmp_send_raw(qts, "{\xFF");
|
||||
resp = qtest_qmp_receive(qts);
|
||||
qmp_assert_error_class(resp, "GenericError");
|
||||
qmp_expect_error_and_unref(resp, "GenericError");
|
||||
assert_recovered(qts);
|
||||
|
||||
/* lexical error: funny control character outside string */
|
||||
qtest_qmp_send_raw(qts, "{\x01");
|
||||
resp = qtest_qmp_receive(qts);
|
||||
qmp_assert_error_class(resp, "GenericError");
|
||||
qmp_expect_error_and_unref(resp, "GenericError");
|
||||
assert_recovered(qts);
|
||||
|
||||
/* lexical error: impossible byte in string */
|
||||
qtest_qmp_send_raw(qts, "{'bad \xFF");
|
||||
resp = qtest_qmp_receive(qts);
|
||||
qmp_assert_error_class(resp, "GenericError");
|
||||
qmp_expect_error_and_unref(resp, "GenericError");
|
||||
assert_recovered(qts);
|
||||
|
||||
/* lexical error: control character in string */
|
||||
qtest_qmp_send_raw(qts, "{'execute': 'nonexistent', 'id':'\n");
|
||||
resp = qtest_qmp_receive(qts);
|
||||
qmp_assert_error_class(resp, "GenericError");
|
||||
qmp_expect_error_and_unref(resp, "GenericError");
|
||||
assert_recovered(qts);
|
||||
|
||||
/* lexical error: interpolation */
|
||||
qtest_qmp_send_raw(qts, "%%p");
|
||||
resp = qtest_qmp_receive(qts);
|
||||
qmp_assert_error_class(resp, "GenericError");
|
||||
qmp_expect_error_and_unref(resp, "GenericError");
|
||||
assert_recovered(qts);
|
||||
|
||||
/* Not even a dictionary */
|
||||
resp = qtest_qmp(qts, "null");
|
||||
qmp_assert_error_class(resp, "GenericError");
|
||||
qmp_expect_error_and_unref(resp, "GenericError");
|
||||
|
||||
/* No "execute" key */
|
||||
resp = qtest_qmp(qts, "{}");
|
||||
qmp_assert_error_class(resp, "GenericError");
|
||||
qmp_expect_error_and_unref(resp, "GenericError");
|
||||
|
||||
/* "execute" isn't a string */
|
||||
resp = qtest_qmp(qts, "{ 'execute': true }");
|
||||
qmp_assert_error_class(resp, "GenericError");
|
||||
qmp_expect_error_and_unref(resp, "GenericError");
|
||||
|
||||
/* "arguments" isn't a dictionary */
|
||||
resp = qtest_qmp(qts, "{ 'execute': 'no-such-cmd', 'arguments': [] }");
|
||||
qmp_assert_error_class(resp, "GenericError");
|
||||
qmp_expect_error_and_unref(resp, "GenericError");
|
||||
|
||||
/* extra key */
|
||||
resp = qtest_qmp(qts, "{ 'execute': 'no-such-cmd', 'extra': true }");
|
||||
qmp_assert_error_class(resp, "GenericError");
|
||||
qmp_expect_error_and_unref(resp, "GenericError");
|
||||
}
|
||||
|
||||
static void test_qmp_protocol(void)
|
||||
|
@ -121,7 +121,7 @@ static void test_qmp_protocol(void)
|
|||
|
||||
/* Test valid command before handshake */
|
||||
resp = qtest_qmp(qts, "{ 'execute': 'query-version' }");
|
||||
qmp_assert_error_class(resp, "CommandNotFound");
|
||||
qmp_expect_error_and_unref(resp, "CommandNotFound");
|
||||
|
||||
/* Test malformed commands before handshake */
|
||||
test_malformed(qts);
|
||||
|
@ -134,7 +134,7 @@ static void test_qmp_protocol(void)
|
|||
|
||||
/* Test repeated handshake */
|
||||
resp = qtest_qmp(qts, "{ 'execute': 'qmp_capabilities' }");
|
||||
qmp_assert_error_class(resp, "CommandNotFound");
|
||||
qmp_expect_error_and_unref(resp, "CommandNotFound");
|
||||
|
||||
/* Test valid command */
|
||||
resp = qtest_qmp(qts, "{ 'execute': 'query-version' }");
|
||||
|
@ -154,7 +154,7 @@ static void test_qmp_protocol(void)
|
|||
/* Test command failure with 'id' */
|
||||
resp = qtest_qmp(qts, "{ 'execute': 'human-monitor-command', 'id': 2 }");
|
||||
g_assert_cmpint(qdict_get_int(resp, "id"), ==, 2);
|
||||
qmp_assert_error_class(resp, "GenericError");
|
||||
qmp_expect_error_and_unref(resp, "GenericError");
|
||||
|
||||
qtest_quit(qts);
|
||||
}
|
||||
|
@ -327,7 +327,7 @@ static void test_qmp_missing_any_arg(void)
|
|||
resp = qtest_qmp(qts, "{'execute': 'qom-set', 'arguments':"
|
||||
" { 'path': '/machine', 'property': 'rtc-time' } }");
|
||||
g_assert_nonnull(resp);
|
||||
qmp_assert_error_class(resp, "GenericError");
|
||||
qmp_expect_error_and_unref(resp, "GenericError");
|
||||
qtest_quit(qts);
|
||||
}
|
||||
|
||||
|
|
|
@ -59,7 +59,7 @@ void tpm_test_swtpm_test(const char *src_tpm_path, tx_func *tx,
|
|||
tpm_util_startup(s, tx);
|
||||
tpm_util_pcrextend(s, tx);
|
||||
|
||||
unsigned char tpm_pcrread_resp[] =
|
||||
static const unsigned char tpm_pcrread_resp[] =
|
||||
"\x80\x01\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x16\x00\x00"
|
||||
"\x00\x01\x00\x0b\x03\x00\x04\x00\x00\x00\x00\x01\x00\x20\xf6\x85"
|
||||
"\x98\xe5\x86\x8d\xe6\x8b\x97\x29\x99\x60\xf2\x71\x7d\x17\x67\x89"
|
||||
|
@ -107,7 +107,7 @@ void tpm_test_swtpm_migration_test(const char *src_tpm_path,
|
|||
tpm_util_startup(src_qemu, tx);
|
||||
tpm_util_pcrextend(src_qemu, tx);
|
||||
|
||||
unsigned char tpm_pcrread_resp[] =
|
||||
static const unsigned char tpm_pcrread_resp[] =
|
||||
"\x80\x01\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x16\x00\x00"
|
||||
"\x00\x01\x00\x0b\x03\x00\x04\x00\x00\x00\x00\x01\x00\x20\xf6\x85"
|
||||
"\x98\xe5\x86\x8d\xe6\x8b\x97\x29\x99\x60\xf2\x71\x7d\x17\x67\x89"
|
||||
|
|
|
@ -98,9 +98,9 @@ void tpm_util_tis_transfer(QTestState *s,
|
|||
void tpm_util_startup(QTestState *s, tx_func *tx)
|
||||
{
|
||||
unsigned char buffer[1024];
|
||||
unsigned char tpm_startup[] =
|
||||
static const unsigned char tpm_startup[] =
|
||||
"\x80\x01\x00\x00\x00\x0c\x00\x00\x01\x44\x00\x00";
|
||||
unsigned char tpm_startup_resp[] =
|
||||
static const unsigned char tpm_startup_resp[] =
|
||||
"\x80\x01\x00\x00\x00\x0a\x00\x00\x00\x00";
|
||||
|
||||
tx(s, tpm_startup, sizeof(tpm_startup), buffer, sizeof(buffer));
|
||||
|
@ -112,14 +112,14 @@ void tpm_util_startup(QTestState *s, tx_func *tx)
|
|||
void tpm_util_pcrextend(QTestState *s, tx_func *tx)
|
||||
{
|
||||
unsigned char buffer[1024];
|
||||
unsigned char tpm_pcrextend[] =
|
||||
static const unsigned char tpm_pcrextend[] =
|
||||
"\x80\x02\x00\x00\x00\x41\x00\x00\x01\x82\x00\x00\x00\x0a\x00\x00"
|
||||
"\x00\x09\x40\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00"
|
||||
"\x0b\x74\x65\x73\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
|
||||
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
|
||||
"\x00";
|
||||
|
||||
unsigned char tpm_pcrextend_resp[] =
|
||||
static const unsigned char tpm_pcrextend_resp[] =
|
||||
"\x80\x02\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
|
||||
"\x01\x00\x00";
|
||||
|
||||
|
@ -133,7 +133,7 @@ void tpm_util_pcrread(QTestState *s, tx_func *tx,
|
|||
const unsigned char *exp_resp, size_t exp_resp_size)
|
||||
{
|
||||
unsigned char buffer[1024];
|
||||
unsigned char tpm_pcrread[] =
|
||||
static const unsigned char tpm_pcrread[] =
|
||||
"\x80\x01\x00\x00\x00\x14\x00\x00\x01\x7e\x00\x00\x00\x01\x00\x0b"
|
||||
"\x03\x00\x04\x00";
|
||||
|
||||
|
|
|
@ -246,7 +246,7 @@ static void test_qga_invalid_oob(gconstpointer fix)
|
|||
ret = qmp_fd(fixture->fd, "{'exec-oob': 'guest-ping'}");
|
||||
g_assert_nonnull(ret);
|
||||
|
||||
qmp_assert_error_class(ret, "GenericError");
|
||||
qmp_expect_error_and_unref(ret, "GenericError");
|
||||
}
|
||||
|
||||
static void test_qga_invalid_args(gconstpointer fix)
|
||||
|
|
Loading…
Reference in New Issue