mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-23 19:49:43 +00:00
* Latest fuzzer patches from Alexander
* Fixes for the qtest bios-tables-test * LGPL information cleanup in qtest code * sh4 acceptance test * Improved submodule handling for the s390x CI test -----BEGIN PGP SIGNATURE----- iQJFBAABCAAvFiEEJ7iIR+7gJQEY8+q5LtnXdP5wLbUFAl7oexoRHHRodXRoQHJl ZGhhdC5jb20ACgkQLtnXdP5wLbVF/A//U2l79c2xM+9u95treESERb8XH7DXq8z0 uB5/3hEorGhF3XcnJoxHjzKlGtwKYdcn+h8fYba3efroT8QRh84D+y+7at5Ag9r9 jDB7MKIIn4pw0Zti4/s26xwccSlL1Sr24dzeJfGMfAXzve7wP4QZkAU9jwOu6TFW 5o5zd8DnPT9IpXnqJZgX0K+A1dLvnkyxqiWAFAok/8PHyhdLx7UPkGG+hIyOezSi j0vadrihUSUO88zChgq1Lfbr2r82YaIUIve9PYCMwMW9gYARH0fDFXKv55wHAmzJ NuO3DNy3FtobrZFPfJ9/x5P9ri806uATLI9ioF7U7tGD0xmsoypORxo8ueFfL1hD V31k052mSOpfYZKMdltMhlBMHxVjNZt7lHu2MEilC1j+cDbBE4JWgipbEkvrKnKR jCO6ur0f1UTrNt93S5xhCH2muGtGoAwv4i96e2/XhRoP4t8x7KyNUwzNbV3Y0Uvf HXBFz8S/J743Pd+j0aSp12ma+z5awtC5L1C0X5DaIu5jR1dQ9VK+G13x7tAjNdT8 wCHoOXwtveYLxWJ235Rx6pzdvk625plDlCYXmhRjyBNbW+XWuLAVwbNBwZSfKcLr Dj+vbHGpWiNpXnPTtnTZS4Lec9w4dCZdNGXq54nypIxDYukTjjPldTc20bbz6JoM 4OcE3na8bMA= =Pdab -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/huth-gitlab/tags/pull-request-2020-06-16' into staging * Latest fuzzer patches from Alexander * Fixes for the qtest bios-tables-test * LGPL information cleanup in qtest code * sh4 acceptance test * Improved submodule handling for the s390x CI test # gpg: Signature made Tue 16 Jun 2020 08:56:10 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-06-16: configure: Let SLOF be initialized by ./scripts/git-submodule.sh tests/acceptance: Add boot tests for sh4 QEMU advent calendar image tests/qtest: Fix LGPL information in the file headers fuzz: add oss-fuzz build-script fuzz: Add support for logging QTest commands fuzz: skip QTest serialization bios-tables-test: Fix "-tpmdev: invalid option" Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
72fc7d7f79
@ -293,7 +293,7 @@ jobs:
|
||||
- name: "GCC check-acceptance"
|
||||
dist: bionic
|
||||
env:
|
||||
- CONFIG="--enable-tools --target-list=aarch64-softmmu,alpha-softmmu,arm-softmmu,m68k-softmmu,microblaze-softmmu,mips-softmmu,mips64el-softmmu,nios2-softmmu,or1k-softmmu,ppc-softmmu,ppc64-softmmu,s390x-softmmu,sparc-softmmu,x86_64-softmmu,xtensa-softmmu"
|
||||
- CONFIG="--enable-tools --target-list=aarch64-softmmu,alpha-softmmu,arm-softmmu,m68k-softmmu,microblaze-softmmu,mips-softmmu,mips64el-softmmu,nios2-softmmu,or1k-softmmu,ppc-softmmu,ppc64-softmmu,s390x-softmmu,sh4-softmmu,sparc-softmmu,x86_64-softmmu,xtensa-softmmu"
|
||||
- TEST_CMD="make check-acceptance"
|
||||
- CACHE_NAME="${TRAVIS_BRANCH}-linux-gcc-acceptance"
|
||||
after_script:
|
||||
@ -496,7 +496,6 @@ jobs:
|
||||
- CONFIG="--disable-containers --target-list=${MAIN_SOFTMMU_TARGETS},s390x-linux-user"
|
||||
- UNRELIABLE=true
|
||||
script:
|
||||
- ( cd ${SRC_DIR} ; git submodule update --init roms/SLOF )
|
||||
- BUILD_RC=0 && make -j${JOBS} || BUILD_RC=$?
|
||||
- |
|
||||
if [ "$BUILD_RC" -eq 0 ] ; then
|
||||
|
@ -2339,6 +2339,7 @@ R: Bandan Das <bsd@redhat.com>
|
||||
R: Stefan Hajnoczi <stefanha@redhat.com>
|
||||
S: Maintained
|
||||
F: tests/qtest/fuzz/
|
||||
F: scripts/oss-fuzz/
|
||||
|
||||
Register API
|
||||
M: Alistair Francis <alistair@alistair23.me>
|
||||
|
5
configure
vendored
5
configure
vendored
@ -6600,6 +6600,11 @@ if test "$cpu" = "s390x" ; then
|
||||
write_c_skeleton
|
||||
if compile_prog "-march=z900" ""; then
|
||||
roms="$roms s390-ccw"
|
||||
# SLOF is required for building the s390-ccw firmware on s390x,
|
||||
# since it is using the libnet code from SLOF for network booting.
|
||||
if test -e "${source_path}/.git" ; then
|
||||
git_submodules="${git_submodules} roms/SLOF"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
|
105
scripts/oss-fuzz/build.sh
Executable file
105
scripts/oss-fuzz/build.sh
Executable file
@ -0,0 +1,105 @@
|
||||
#!/bin/sh -e
|
||||
#
|
||||
# OSS-Fuzz build script. See:
|
||||
# https://google.github.io/oss-fuzz/getting-started/new-project-guide/#buildsh
|
||||
#
|
||||
# The file is consumed by:
|
||||
# https://github.com/google/oss-fuzz/blob/master/projects/qemu/Dockerfiles
|
||||
#
|
||||
# This code is licensed under the GPL version 2 or later. See
|
||||
# the COPYING file in the top-level directory.
|
||||
#
|
||||
|
||||
# build project
|
||||
# e.g.
|
||||
# ./autogen.sh
|
||||
# ./configure
|
||||
# make -j$(nproc) all
|
||||
|
||||
# build fuzzers
|
||||
# e.g.
|
||||
# $CXX $CXXFLAGS -std=c++11 -Iinclude \
|
||||
# /path/to/name_of_fuzzer.cc -o $OUT/name_of_fuzzer \
|
||||
# $LIB_FUZZING_ENGINE /path/to/library.a
|
||||
|
||||
fatal () {
|
||||
echo "Error : ${*}, exiting."
|
||||
exit 1
|
||||
}
|
||||
|
||||
OSS_FUZZ_BUILD_DIR="./build-oss-fuzz/"
|
||||
|
||||
# There seems to be a bug in clang-11 (used for builds on oss-fuzz) :
|
||||
# accel/tcg/cputlb.o: In function `load_memop':
|
||||
# accel/tcg/cputlb.c:1505: undefined reference to `qemu_build_not_reached'
|
||||
#
|
||||
# When building with optimization, the compiler is expected to prove that the
|
||||
# statement cannot be reached, and remove it. For some reason clang-11 doesn't
|
||||
# remove it, resulting in an unresolved reference to qemu_build_not_reached
|
||||
# Undefine the __OPTIMIZE__ macro which compiler.h relies on to choose whether
|
||||
# to " #define qemu_build_not_reached() g_assert_not_reached() "
|
||||
EXTRA_CFLAGS="$CFLAGS -U __OPTIMIZE__"
|
||||
|
||||
if ! { [ -e "./COPYING" ] &&
|
||||
[ -e "./MAINTAINERS" ] &&
|
||||
[ -e "./Makefile" ] &&
|
||||
[ -e "./docs" ] &&
|
||||
[ -e "./VERSION" ] &&
|
||||
[ -e "./linux-user" ] &&
|
||||
[ -e "./softmmu" ];} ; then
|
||||
fatal "Please run the script from the top of the QEMU tree"
|
||||
fi
|
||||
|
||||
mkdir -p $OSS_FUZZ_BUILD_DIR || fatal "mkdir $OSS_FUZZ_BUILD_DIR failed"
|
||||
cd $OSS_FUZZ_BUILD_DIR || fatal "cd $OSS_FUZZ_BUILD_DIR failed"
|
||||
|
||||
|
||||
if [ -z ${LIB_FUZZING_ENGINE+x} ]; then
|
||||
LIB_FUZZING_ENGINE="-fsanitize=fuzzer"
|
||||
fi
|
||||
|
||||
if [ -z ${OUT+x} ]; then
|
||||
DEST_DIR=$(realpath "./DEST_DIR")
|
||||
else
|
||||
DEST_DIR=$OUT
|
||||
fi
|
||||
|
||||
mkdir -p "$DEST_DIR/lib/" # Copy the shared libraries here
|
||||
|
||||
# Build once to get the list of dynamic lib paths, and copy them over
|
||||
../configure --disable-werror --cc="$CC" --cxx="$CXX" \
|
||||
--extra-cflags="$EXTRA_CFLAGS"
|
||||
|
||||
if ! make CONFIG_FUZZ=y CFLAGS="$LIB_FUZZING_ENGINE" "-j$(nproc)" \
|
||||
i386-softmmu/fuzz; then
|
||||
fatal "Build failed. Please specify a compiler with fuzzing support"\
|
||||
"using the \$CC and \$CXX environemnt variables, or specify a"\
|
||||
"\$LIB_FUZZING_ENGINE compatible with your compiler"\
|
||||
"\nFor example: CC=clang CXX=clang++ $0"
|
||||
fi
|
||||
|
||||
for i in $(ldd ./i386-softmmu/qemu-fuzz-i386 | cut -f3 -d' '); do
|
||||
cp "$i" "$DEST_DIR/lib/"
|
||||
done
|
||||
rm ./i386-softmmu/qemu-fuzz-i386
|
||||
|
||||
# Build a second time to build the final binary with correct rpath
|
||||
../configure --bindir="$DEST_DIR" --datadir="$DEST_DIR/data/" --disable-werror \
|
||||
--cc="$CC" --cxx="$CXX" --extra-cflags="$EXTRA_CFLAGS" \
|
||||
--extra-ldflags="-Wl,-rpath,'\$\$ORIGIN/lib'"
|
||||
make CONFIG_FUZZ=y CFLAGS="$LIB_FUZZING_ENGINE" "-j$(nproc)" i386-softmmu/fuzz
|
||||
|
||||
# Copy over the datadir
|
||||
cp -r ../pc-bios/ "$DEST_DIR/pc-bios"
|
||||
|
||||
# Run the fuzzer with no arguments, to print the help-string and get the list
|
||||
# of available fuzz-targets. Copy over the qemu-fuzz-i386, naming it according
|
||||
# to each available fuzz target (See 05509c8e6d fuzz: select fuzz target using
|
||||
# executable name)
|
||||
for target in $(./i386-softmmu/qemu-fuzz-i386 | awk '$1 ~ /\*/ {print $2}');
|
||||
do
|
||||
cp ./i386-softmmu/qemu-fuzz-i386 "$DEST_DIR/qemu-fuzz-i386-target-$target"
|
||||
done
|
||||
|
||||
echo "Done. The fuzzers are located in $DEST_DIR"
|
||||
exit 0
|
@ -858,12 +858,12 @@ class BootLinuxConsole(LinuxKernelTest):
|
||||
console_pattern = 'No filesystem could mount root'
|
||||
self.wait_for_console_pattern(console_pattern)
|
||||
|
||||
def do_test_advcal_2018(self, day, tar_hash, kernel_name):
|
||||
def do_test_advcal_2018(self, day, tar_hash, kernel_name, console=0):
|
||||
tar_url = ('https://www.qemu-advent-calendar.org'
|
||||
'/2018/download/day' + day + '.tar.xz')
|
||||
file_path = self.fetch_asset(tar_url, asset_hash=tar_hash)
|
||||
archive.extract(file_path, self.workdir)
|
||||
self.vm.set_console()
|
||||
self.vm.set_console(console_index=console)
|
||||
self.vm.add_args('-kernel',
|
||||
self.workdir + '/day' + day + '/' + kernel_name)
|
||||
self.vm.launch()
|
||||
@ -937,6 +937,15 @@ class BootLinuxConsole(LinuxKernelTest):
|
||||
self.vm.add_args('-M', 'graphics=off')
|
||||
self.do_test_advcal_2018('15', tar_hash, 'invaders.elf')
|
||||
|
||||
def test_sh4_r2d(self):
|
||||
"""
|
||||
:avocado: tags=arch:sh4
|
||||
:avocado: tags=machine:r2d
|
||||
"""
|
||||
tar_hash = 'fe06a4fd8ccbf2e27928d64472939d47829d4c7e'
|
||||
self.vm.add_args('-append', 'console=ttySC1')
|
||||
self.do_test_advcal_2018('09', tar_hash, 'zImage', console=1)
|
||||
|
||||
def test_sparc_ss20(self):
|
||||
"""
|
||||
:avocado: tags=arch:sparc
|
||||
|
@ -882,6 +882,7 @@ uint64_t tpm_tis_base_addr;
|
||||
static void test_acpi_tcg_tpm(const char *machine, const char *tpm_if,
|
||||
uint64_t base)
|
||||
{
|
||||
#ifdef CONFIG_TPM
|
||||
gchar *tmp_dir_name = g_strdup_printf("qemu-test_acpi_%s_tcg_%s.XXXXXX",
|
||||
machine, tpm_if);
|
||||
char *tmp_path = g_dir_make_tmp(tmp_dir_name, NULL);
|
||||
@ -924,6 +925,9 @@ static void test_acpi_tcg_tpm(const char *machine, const char *tpm_if,
|
||||
g_free(tmp_path);
|
||||
g_free(tmp_dir_name);
|
||||
free_test_data(&data);
|
||||
#else
|
||||
g_test_skip("TPM disabled");
|
||||
#endif
|
||||
}
|
||||
|
||||
static void test_acpi_q35_tcg_tpm_tis(void)
|
||||
|
@ -12,7 +12,7 @@
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -5,6 +5,7 @@ fuzz-obj-y += $(libqos-obj-y)
|
||||
fuzz-obj-y += tests/qtest/fuzz/fuzz.o # Fuzzer skeleton
|
||||
fuzz-obj-y += tests/qtest/fuzz/fork_fuzz.o
|
||||
fuzz-obj-y += tests/qtest/fuzz/qos_fuzz.o
|
||||
fuzz-obj-y += tests/qtest/fuzz/qtest_wrappers.o
|
||||
|
||||
# Targets
|
||||
fuzz-obj-$(CONFIG_PCI_I440FX) += tests/qtest/fuzz/i440fx_fuzz.o
|
||||
@ -16,3 +17,23 @@ FUZZ_CFLAGS += -I$(SRC_PATH)/tests -I$(SRC_PATH)/tests/qtest
|
||||
# Linker Script to force coverage-counters into known regions which we can mark
|
||||
# shared
|
||||
FUZZ_LDFLAGS += -Xlinker -T$(SRC_PATH)/tests/qtest/fuzz/fork_fuzz.ld
|
||||
|
||||
FUZZ_LDFLAGS += -Wl,-wrap,qtest_inb
|
||||
FUZZ_LDFLAGS += -Wl,-wrap,qtest_inw
|
||||
FUZZ_LDFLAGS += -Wl,-wrap,qtest_inl
|
||||
FUZZ_LDFLAGS += -Wl,-wrap,qtest_outb
|
||||
FUZZ_LDFLAGS += -Wl,-wrap,qtest_outw
|
||||
FUZZ_LDFLAGS += -Wl,-wrap,qtest_outl
|
||||
FUZZ_LDFLAGS += -Wl,-wrap,qtest_readb
|
||||
FUZZ_LDFLAGS += -Wl,-wrap,qtest_readw
|
||||
FUZZ_LDFLAGS += -Wl,-wrap,qtest_readl
|
||||
FUZZ_LDFLAGS += -Wl,-wrap,qtest_readq
|
||||
FUZZ_LDFLAGS += -Wl,-wrap,qtest_writeb
|
||||
FUZZ_LDFLAGS += -Wl,-wrap,qtest_writew
|
||||
FUZZ_LDFLAGS += -Wl,-wrap,qtest_writel
|
||||
FUZZ_LDFLAGS += -Wl,-wrap,qtest_writeq
|
||||
FUZZ_LDFLAGS += -Wl,-wrap,qtest_memread
|
||||
FUZZ_LDFLAGS += -Wl,-wrap,qtest_bufread
|
||||
FUZZ_LDFLAGS += -Wl,-wrap,qtest_memwrite
|
||||
FUZZ_LDFLAGS += -Wl,-wrap,qtest_bufwrite
|
||||
FUZZ_LDFLAGS += -Wl,-wrap,qtest_memset
|
||||
|
@ -91,7 +91,12 @@ static void usage(char *path)
|
||||
printf(" * %s : %s\n", tmp->target->name,
|
||||
tmp->target->description);
|
||||
}
|
||||
printf("Alternatively, add -target-FUZZ_TARGET to the executable name\n");
|
||||
printf("Alternatively, add -target-FUZZ_TARGET to the executable name\n\n"
|
||||
"Set the environment variable FUZZ_SERIALIZE_QTEST=1 to serialize\n"
|
||||
"QTest commands into an ASCII protocol. Useful for building crash\n"
|
||||
"reproducers, but slows down execution.\n\n"
|
||||
"Set the environment variable QTEST_LOG=1 to log all qtest commands"
|
||||
"\n");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
@ -138,6 +143,7 @@ int LLVMFuzzerInitialize(int *argc, char ***argv, char ***envp)
|
||||
|
||||
char *target_name;
|
||||
char *dir;
|
||||
bool serialize = false;
|
||||
|
||||
/* Initialize qgraph and modules */
|
||||
qos_graph_init();
|
||||
@ -172,6 +178,13 @@ int LLVMFuzzerInitialize(int *argc, char ***argv, char ***envp)
|
||||
usage(**argv);
|
||||
}
|
||||
|
||||
/* Should we always serialize qtest commands? */
|
||||
if (getenv("FUZZ_SERIALIZE_QTEST")) {
|
||||
serialize = true;
|
||||
}
|
||||
|
||||
fuzz_qtest_set_serialize(serialize);
|
||||
|
||||
/* Identify the fuzz target */
|
||||
fuzz_target = fuzz_get_target(target_name);
|
||||
if (!fuzz_target) {
|
||||
@ -186,6 +199,11 @@ int LLVMFuzzerInitialize(int *argc, char ***argv, char ***envp)
|
||||
|
||||
/* Run QEMU's softmmu main with the fuzz-target dependent arguments */
|
||||
const char *init_cmdline = fuzz_target->get_init_cmdline(fuzz_target);
|
||||
init_cmdline = g_strdup_printf("%s -qtest /dev/null -qtest-log %s",
|
||||
init_cmdline,
|
||||
getenv("QTEST_LOG") ? "/dev/fd/2"
|
||||
: "/dev/null");
|
||||
|
||||
|
||||
/* Split the runcmd into an argv and argc */
|
||||
wordexp_t result;
|
||||
|
@ -82,6 +82,9 @@ typedef struct FuzzTarget {
|
||||
void flush_events(QTestState *);
|
||||
void reboot(QTestState *);
|
||||
|
||||
/* Use the QTest ASCII protocol or call address_space API directly?*/
|
||||
void fuzz_qtest_set_serialize(bool option);
|
||||
|
||||
/*
|
||||
* makes a copy of *target and adds it to the target-list.
|
||||
* i.e. fine to set up target on the caller's stack
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
* License version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
252
tests/qtest/fuzz/qtest_wrappers.c
Normal file
252
tests/qtest/fuzz/qtest_wrappers.c
Normal file
@ -0,0 +1,252 @@
|
||||
/*
|
||||
* qtest function wrappers
|
||||
*
|
||||
* Copyright Red Hat Inc., 2019
|
||||
*
|
||||
* Authors:
|
||||
* Alexander Bulekov <alxndr@bu.edu>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2 or later.
|
||||
* See the COPYING file in the top-level directory.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "cpu.h"
|
||||
#include "exec/ioport.h"
|
||||
|
||||
#include "fuzz.h"
|
||||
|
||||
static bool serialize = true;
|
||||
|
||||
#define WRAP(RET_TYPE, NAME_AND_ARGS)\
|
||||
RET_TYPE __wrap_##NAME_AND_ARGS;\
|
||||
RET_TYPE __real_##NAME_AND_ARGS;
|
||||
|
||||
WRAP(uint8_t , qtest_inb(QTestState *s, uint16_t addr))
|
||||
WRAP(uint16_t , qtest_inw(QTestState *s, uint16_t addr))
|
||||
WRAP(uint32_t , qtest_inl(QTestState *s, uint16_t addr))
|
||||
WRAP(void , qtest_outb(QTestState *s, uint16_t addr, uint8_t value))
|
||||
WRAP(void , qtest_outw(QTestState *s, uint16_t addr, uint16_t value))
|
||||
WRAP(void , qtest_outl(QTestState *s, uint16_t addr, uint32_t value))
|
||||
WRAP(uint8_t , qtest_readb(QTestState *s, uint64_t addr))
|
||||
WRAP(uint16_t , qtest_readw(QTestState *s, uint64_t addr))
|
||||
WRAP(uint32_t , qtest_readl(QTestState *s, uint64_t addr))
|
||||
WRAP(uint64_t , qtest_readq(QTestState *s, uint64_t addr))
|
||||
WRAP(void , qtest_writeb(QTestState *s, uint64_t addr, uint8_t value))
|
||||
WRAP(void , qtest_writew(QTestState *s, uint64_t addr, uint16_t value))
|
||||
WRAP(void , qtest_writel(QTestState *s, uint64_t addr, uint32_t value))
|
||||
WRAP(void , qtest_writeq(QTestState *s, uint64_t addr, uint64_t value))
|
||||
WRAP(void , qtest_memread(QTestState *s, uint64_t addr,
|
||||
void *data, size_t size))
|
||||
WRAP(void , qtest_bufread(QTestState *s, uint64_t addr, void *data,
|
||||
size_t size))
|
||||
WRAP(void , qtest_memwrite(QTestState *s, uint64_t addr, const void *data,
|
||||
size_t size))
|
||||
WRAP(void, qtest_bufwrite(QTestState *s, uint64_t addr,
|
||||
const void *data, size_t size))
|
||||
WRAP(void, qtest_memset(QTestState *s, uint64_t addr,
|
||||
uint8_t patt, size_t size))
|
||||
|
||||
|
||||
uint8_t __wrap_qtest_inb(QTestState *s, uint16_t addr)
|
||||
{
|
||||
if (!serialize) {
|
||||
return cpu_inb(addr);
|
||||
} else {
|
||||
return __real_qtest_inb(s, addr);
|
||||
}
|
||||
}
|
||||
|
||||
uint16_t __wrap_qtest_inw(QTestState *s, uint16_t addr)
|
||||
{
|
||||
if (!serialize) {
|
||||
return cpu_inw(addr);
|
||||
} else {
|
||||
return __real_qtest_inw(s, addr);
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t __wrap_qtest_inl(QTestState *s, uint16_t addr)
|
||||
{
|
||||
if (!serialize) {
|
||||
return cpu_inl(addr);
|
||||
} else {
|
||||
return __real_qtest_inl(s, addr);
|
||||
}
|
||||
}
|
||||
|
||||
void __wrap_qtest_outb(QTestState *s, uint16_t addr, uint8_t value)
|
||||
{
|
||||
if (!serialize) {
|
||||
cpu_outb(addr, value);
|
||||
} else {
|
||||
__real_qtest_outb(s, addr, value);
|
||||
}
|
||||
}
|
||||
|
||||
void __wrap_qtest_outw(QTestState *s, uint16_t addr, uint16_t value)
|
||||
{
|
||||
if (!serialize) {
|
||||
cpu_outw(addr, value);
|
||||
} else {
|
||||
__real_qtest_outw(s, addr, value);
|
||||
}
|
||||
}
|
||||
|
||||
void __wrap_qtest_outl(QTestState *s, uint16_t addr, uint32_t value)
|
||||
{
|
||||
if (!serialize) {
|
||||
cpu_outl(addr, value);
|
||||
} else {
|
||||
__real_qtest_outl(s, addr, value);
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t __wrap_qtest_readb(QTestState *s, uint64_t addr)
|
||||
{
|
||||
uint8_t value;
|
||||
if (!serialize) {
|
||||
address_space_read(first_cpu->as, addr, MEMTXATTRS_UNSPECIFIED,
|
||||
&value, 1);
|
||||
return value;
|
||||
} else {
|
||||
return __real_qtest_readb(s, addr);
|
||||
}
|
||||
}
|
||||
|
||||
uint16_t __wrap_qtest_readw(QTestState *s, uint64_t addr)
|
||||
{
|
||||
uint16_t value;
|
||||
if (!serialize) {
|
||||
address_space_read(first_cpu->as, addr, MEMTXATTRS_UNSPECIFIED,
|
||||
&value, 2);
|
||||
return value;
|
||||
} else {
|
||||
return __real_qtest_readw(s, addr);
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t __wrap_qtest_readl(QTestState *s, uint64_t addr)
|
||||
{
|
||||
uint32_t value;
|
||||
if (!serialize) {
|
||||
address_space_read(first_cpu->as, addr, MEMTXATTRS_UNSPECIFIED,
|
||||
&value, 4);
|
||||
return value;
|
||||
} else {
|
||||
return __real_qtest_readl(s, addr);
|
||||
}
|
||||
}
|
||||
|
||||
uint64_t __wrap_qtest_readq(QTestState *s, uint64_t addr)
|
||||
{
|
||||
uint64_t value;
|
||||
if (!serialize) {
|
||||
address_space_read(first_cpu->as, addr, MEMTXATTRS_UNSPECIFIED,
|
||||
&value, 8);
|
||||
return value;
|
||||
} else {
|
||||
return __real_qtest_readq(s, addr);
|
||||
}
|
||||
}
|
||||
|
||||
void __wrap_qtest_writeb(QTestState *s, uint64_t addr, uint8_t value)
|
||||
{
|
||||
if (!serialize) {
|
||||
address_space_write(first_cpu->as, addr, MEMTXATTRS_UNSPECIFIED,
|
||||
&value, 1);
|
||||
} else {
|
||||
__real_qtest_writeb(s, addr, value);
|
||||
}
|
||||
}
|
||||
|
||||
void __wrap_qtest_writew(QTestState *s, uint64_t addr, uint16_t value)
|
||||
{
|
||||
if (!serialize) {
|
||||
address_space_write(first_cpu->as, addr, MEMTXATTRS_UNSPECIFIED,
|
||||
&value, 2);
|
||||
} else {
|
||||
__real_qtest_writew(s, addr, value);
|
||||
}
|
||||
}
|
||||
|
||||
void __wrap_qtest_writel(QTestState *s, uint64_t addr, uint32_t value)
|
||||
{
|
||||
if (!serialize) {
|
||||
address_space_write(first_cpu->as, addr, MEMTXATTRS_UNSPECIFIED,
|
||||
&value, 4);
|
||||
} else {
|
||||
__real_qtest_writel(s, addr, value);
|
||||
}
|
||||
}
|
||||
|
||||
void __wrap_qtest_writeq(QTestState *s, uint64_t addr, uint64_t value)
|
||||
{
|
||||
if (!serialize) {
|
||||
address_space_write(first_cpu->as, addr, MEMTXATTRS_UNSPECIFIED,
|
||||
&value, 8);
|
||||
} else {
|
||||
__real_qtest_writeq(s, addr, value);
|
||||
}
|
||||
}
|
||||
|
||||
void __wrap_qtest_memread(QTestState *s, uint64_t addr, void *data, size_t size)
|
||||
{
|
||||
if (!serialize) {
|
||||
address_space_read(first_cpu->as, addr, MEMTXATTRS_UNSPECIFIED, data,
|
||||
size);
|
||||
} else {
|
||||
__real_qtest_memread(s, addr, data, size);
|
||||
}
|
||||
}
|
||||
|
||||
void __wrap_qtest_bufread(QTestState *s, uint64_t addr, void *data, size_t size)
|
||||
{
|
||||
if (!serialize) {
|
||||
address_space_read(first_cpu->as, addr, MEMTXATTRS_UNSPECIFIED, data,
|
||||
size);
|
||||
} else {
|
||||
__real_qtest_bufread(s, addr, data, size);
|
||||
}
|
||||
}
|
||||
|
||||
void __wrap_qtest_memwrite(QTestState *s, uint64_t addr, const void *data,
|
||||
size_t size)
|
||||
{
|
||||
if (!serialize) {
|
||||
address_space_write(first_cpu->as, addr, MEMTXATTRS_UNSPECIFIED,
|
||||
data, size);
|
||||
} else {
|
||||
__real_qtest_memwrite(s, addr, data, size);
|
||||
}
|
||||
}
|
||||
|
||||
void __wrap_qtest_bufwrite(QTestState *s, uint64_t addr,
|
||||
const void *data, size_t size)
|
||||
{
|
||||
if (!serialize) {
|
||||
address_space_write(first_cpu->as, addr, MEMTXATTRS_UNSPECIFIED,
|
||||
data, size);
|
||||
} else {
|
||||
__real_qtest_bufwrite(s, addr, data, size);
|
||||
}
|
||||
}
|
||||
void __wrap_qtest_memset(QTestState *s, uint64_t addr,
|
||||
uint8_t patt, size_t size)
|
||||
{
|
||||
void *data;
|
||||
if (!serialize) {
|
||||
data = malloc(size);
|
||||
memset(data, patt, size);
|
||||
address_space_write(first_cpu->as, addr, MEMTXATTRS_UNSPECIFIED,
|
||||
data, size);
|
||||
} else {
|
||||
__real_qtest_memset(s, addr, patt, size);
|
||||
}
|
||||
}
|
||||
|
||||
void fuzz_qtest_set_serialize(bool option)
|
||||
{
|
||||
serialize = option;
|
||||
}
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
* License version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -7,7 +7,7 @@
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
* License version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -7,7 +7,7 @@
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
* License version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
* License version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
* License version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
* License version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
* License version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
* License version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
* License version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
* License version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
* License version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
* License version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
* License version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
* License version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
* License version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
* License version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
* License version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
* License version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
* License version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
* License version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
* License version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
* License version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
* License version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
* License version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
* License version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
* License version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
* License version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
* License version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
* License version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
* License version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
* License version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
* License version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
* License version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
* License version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
Loading…
Reference in New Issue
Block a user