mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-27 05:20:50 +00:00
* configure and meson cleanups
* KVM_GET/SET_SREGS2 support for x86 -----BEGIN PGP SIGNATURE----- iQFIBAABCAAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAmHe0v8UHHBib256aW5p QHJlZGhhdC5jb20ACgkQv/vSX3jHroPPgQf/Usiph4SA/MjpqwmLP8ZL64ghWzUm ZjZRRDC12cApBE/P7/TdzHGwx6IiRu2hWt3wVLFWWEpN7xNwoelrhgLZcr8Dl80P 1b2Pe/BHe1xXI+xC/BgK4qt8sxhSvb9hdFwgz2J4mPSgN64d0sXszm/r56rJ/PXq T2/M/o6wyFexPhYMQcN/ssQIeQzL8uXTifd7GqpcfRM4iivW1KAFVv9zr+SWqE+7 QavIoRTpBiAb7r0EtuxLrPdgiqkx0OKXE93mwrjM0Anci33hdVHLqe8Zs4gmRzyM sLqArJwG/kdy2fL8Pc3ncPOxKsBgXDIqfucAJ8Tong1hwLJXiyZnJTxMSg== =Q2aI -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/bonzini-gitlab/tags/for-upstream' into staging * configure and meson cleanups * KVM_GET/SET_SREGS2 support for x86 # gpg: Signature made Wed 12 Jan 2022 13:09:19 GMT # gpg: using RSA key F13338574B662389866C7682BFFBD25F78C7AE83 # gpg: issuer "pbonzini@redhat.com" # gpg: Good signature from "Paolo Bonzini <bonzini@gnu.org>" [full] # gpg: aka "Paolo Bonzini <pbonzini@redhat.com>" [full] # Primary key fingerprint: 46F5 9FBD 57D6 12E7 BFD4 E2F7 7E15 100C CD36 69B1 # Subkey fingerprint: F133 3857 4B66 2389 866C 7682 BFFB D25F 78C7 AE83 * remotes/bonzini-gitlab/tags/for-upstream: meson: reenable filemonitor-inotify compilation meson: build all modules by default configure: do not create roms/seabios/config.mak if SeaBIOS not present tests/tcg: Fix target-specific Makefile variables path for user-mode KVM: x86: ignore interrupt_bitmap field of KVM_GET/SET_SREGS KVM: use KVM_{GET|SET}_SREGS2 when supported. meson: add comments in the target-specific flags section configure, meson: move config-poison.h to meson meson: build contrib/ executables after generated headers configure: move non-command-line variables away from command-line parsing section configure: parse --enable/--disable-strip automatically, flip default configure, makefile: remove traces of really old files configure: do not set bsd_user/linux_user early configure: simplify creation of plugin symbol list block/file-posix: Simplify the XFS_IOC_DIOINFO handling meson: cleanup common-user/ build user: move common-user includes to a subdirectory of {bsd,linux}-user/ meson: reuse common_user_inc when building files specific to user-mode emulators Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
67b6526cf0
11
Makefile
11
Makefile
@ -206,14 +206,11 @@ recurse-clean: $(addsuffix /clean, $(ROM_DIRS))
|
||||
clean: recurse-clean
|
||||
-$(quiet-@)test -f build.ninja && $(NINJA) $(NINJAFLAGS) -t clean || :
|
||||
-$(quiet-@)test -f build.ninja && $(NINJA) $(NINJAFLAGS) clean-ctlist || :
|
||||
# avoid old build problems by removing potentially incorrect old files
|
||||
rm -f config.mak op-i386.h opc-i386.h gen-op-i386.h op-arm.h opc-arm.h gen-op-arm.h
|
||||
find . \( -name '*.so' -o -name '*.dll' -o -name '*.[oda]' \) -type f \
|
||||
! -path ./roms/edk2/ArmPkg/Library/GccLto/liblto-aarch64.a \
|
||||
! -path ./roms/edk2/ArmPkg/Library/GccLto/liblto-arm.a \
|
||||
-exec rm {} +
|
||||
rm -f TAGS cscope.* *.pod *~ */*~
|
||||
rm -f fsdev/*.pod scsi/*.pod
|
||||
rm -f TAGS cscope.* *~ */*~
|
||||
|
||||
VERSION = $(shell cat $(SRC_PATH)/VERSION)
|
||||
|
||||
@ -224,10 +221,10 @@ qemu-%.tar.bz2:
|
||||
|
||||
distclean: clean
|
||||
-$(quiet-@)test -f build.ninja && $(NINJA) $(NINJAFLAGS) -t clean -g || :
|
||||
rm -f config-host.mak config-host.h* config-poison.h
|
||||
rm -f config-host.mak
|
||||
rm -f tests/tcg/config-*.mak
|
||||
rm -f config-all-disas.mak config.status
|
||||
rm -f roms/seabios/config.mak roms/vgabios/config.mak
|
||||
rm -f config.status
|
||||
rm -f roms/seabios/config.mak
|
||||
rm -f qemu-plugins-ld.symbols qemu-plugins-ld64.symbols
|
||||
rm -f *-config-target.h *-config-devices.mak *-config-devices.h
|
||||
rm -rf meson-private meson-logs meson-info compile_commands.json
|
||||
|
@ -106,10 +106,6 @@
|
||||
#include <sys/diskslice.h>
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_XFS
|
||||
#include <xfs/xfs.h>
|
||||
#endif
|
||||
|
||||
/* OS X does not have O_DSYNC */
|
||||
#ifndef O_DSYNC
|
||||
#ifdef O_SYNC
|
||||
@ -156,9 +152,6 @@ typedef struct BDRVRawState {
|
||||
int perm_change_flags;
|
||||
BDRVReopenState *reopen_state;
|
||||
|
||||
#ifdef CONFIG_XFS
|
||||
bool is_xfs:1;
|
||||
#endif
|
||||
bool has_discard:1;
|
||||
bool has_write_zeroes:1;
|
||||
bool discard_zeroes:1;
|
||||
@ -409,14 +402,22 @@ static void raw_probe_alignment(BlockDriverState *bs, int fd, Error **errp)
|
||||
if (probe_logical_blocksize(fd, &bs->bl.request_alignment) < 0) {
|
||||
bs->bl.request_alignment = 0;
|
||||
}
|
||||
#ifdef CONFIG_XFS
|
||||
if (s->is_xfs) {
|
||||
struct dioattr da;
|
||||
if (xfsctl(NULL, fd, XFS_IOC_DIOINFO, &da) >= 0) {
|
||||
bs->bl.request_alignment = da.d_miniosz;
|
||||
/* The kernel returns wrong information for d_mem */
|
||||
/* s->buf_align = da.d_mem; */
|
||||
}
|
||||
|
||||
#ifdef __linux__
|
||||
/*
|
||||
* The XFS ioctl definitions are shipped in extra packages that might
|
||||
* not always be available. Since we just need the XFS_IOC_DIOINFO ioctl
|
||||
* here, we simply use our own definition instead:
|
||||
*/
|
||||
struct xfs_dioattr {
|
||||
uint32_t d_mem;
|
||||
uint32_t d_miniosz;
|
||||
uint32_t d_maxiosz;
|
||||
} da;
|
||||
if (ioctl(fd, _IOR('X', 30, struct xfs_dioattr), &da) >= 0) {
|
||||
bs->bl.request_alignment = da.d_miniosz;
|
||||
/* The kernel returns wrong information for d_mem */
|
||||
/* s->buf_align = da.d_mem; */
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -798,12 +799,6 @@ static int raw_open_common(BlockDriverState *bs, QDict *options,
|
||||
#endif
|
||||
s->needs_alignment = raw_needs_alignment(bs);
|
||||
|
||||
#ifdef CONFIG_XFS
|
||||
if (platform_test_xfs_fd(s->fd)) {
|
||||
s->is_xfs = true;
|
||||
}
|
||||
#endif
|
||||
|
||||
bs->supported_zero_flags = BDRV_REQ_MAY_UNMAP | BDRV_REQ_NO_FALLBACK;
|
||||
if (S_ISREG(st.st_mode)) {
|
||||
/* When extending regular files, we get zeros from the OS */
|
||||
|
@ -4,7 +4,7 @@ endif
|
||||
|
||||
bsd_user_ss = ss.source_set()
|
||||
|
||||
common_user_inc += include_directories('.')
|
||||
common_user_inc += include_directories('include')
|
||||
|
||||
bsd_user_ss.add(files(
|
||||
'bsdload.c',
|
||||
|
@ -1,6 +1,6 @@
|
||||
common_user_inc += include_directories('host/' / host_arch)
|
||||
|
||||
common_user_ss.add(files(
|
||||
user_ss.add(files(
|
||||
'safe-syscall.S',
|
||||
'safe-syscall-error.c',
|
||||
))
|
||||
|
189
configure
vendored
189
configure
vendored
@ -78,7 +78,6 @@ TMPC="${TMPDIR1}/${TMPB}.c"
|
||||
TMPO="${TMPDIR1}/${TMPB}.o"
|
||||
TMPCXX="${TMPDIR1}/${TMPB}.cxx"
|
||||
TMPE="${TMPDIR1}/${TMPB}.exe"
|
||||
TMPTXT="${TMPDIR1}/${TMPB}.txt"
|
||||
|
||||
rm -f config.log
|
||||
|
||||
@ -291,7 +290,6 @@ EXTRA_CXXFLAGS=""
|
||||
EXTRA_LDFLAGS=""
|
||||
|
||||
xen_ctrl_version="$default_feature"
|
||||
xfs="$default_feature"
|
||||
membarrier="$default_feature"
|
||||
vhost_kernel="$default_feature"
|
||||
vhost_net="$default_feature"
|
||||
@ -309,21 +307,16 @@ debug="no"
|
||||
sanitizers="no"
|
||||
tsan="no"
|
||||
fortify_source="$default_feature"
|
||||
strip_opt="yes"
|
||||
mingw32="no"
|
||||
gcov="no"
|
||||
EXESUF=""
|
||||
modules="no"
|
||||
module_upgrades="no"
|
||||
prefix="/usr/local"
|
||||
qemu_suffix="qemu"
|
||||
bsd="no"
|
||||
linux="no"
|
||||
solaris="no"
|
||||
profiler="no"
|
||||
softmmu="yes"
|
||||
linux_user="no"
|
||||
bsd_user="no"
|
||||
linux_user=""
|
||||
bsd_user=""
|
||||
pkgversion=""
|
||||
pie=""
|
||||
qom_cast_debug="yes"
|
||||
@ -333,8 +326,6 @@ opengl="$default_feature"
|
||||
cpuid_h="no"
|
||||
avx2_opt="$default_feature"
|
||||
guest_agent="$default_feature"
|
||||
guest_agent_with_vss="no"
|
||||
guest_agent_ntddscsi="no"
|
||||
vss_win32_sdk="$default_feature"
|
||||
win_sdk="no"
|
||||
want_tools="$default_feature"
|
||||
@ -529,6 +520,10 @@ fi
|
||||
|
||||
# OS specific
|
||||
|
||||
mingw32="no"
|
||||
bsd="no"
|
||||
linux="no"
|
||||
solaris="no"
|
||||
case $targetos in
|
||||
windows)
|
||||
mingw32="yes"
|
||||
@ -540,7 +535,6 @@ gnu/kfreebsd)
|
||||
;;
|
||||
freebsd)
|
||||
bsd="yes"
|
||||
bsd_user="yes"
|
||||
make="${MAKE-gmake}"
|
||||
# needed for kinfo_getvmmap(3) in libutil.h
|
||||
;;
|
||||
@ -585,7 +579,6 @@ haiku)
|
||||
;;
|
||||
linux)
|
||||
linux="yes"
|
||||
linux_user="yes"
|
||||
vhost_user=${default_feature:-yes}
|
||||
;;
|
||||
esac
|
||||
@ -896,7 +889,6 @@ for opt do
|
||||
debug_tcg="yes"
|
||||
debug_mutex="yes"
|
||||
debug="yes"
|
||||
strip_opt="no"
|
||||
fortify_source="no"
|
||||
;;
|
||||
--enable-sanitizers) sanitizers="yes"
|
||||
@ -907,8 +899,6 @@ for opt do
|
||||
;;
|
||||
--disable-tsan) tsan="no"
|
||||
;;
|
||||
--disable-strip) strip_opt="no"
|
||||
;;
|
||||
--disable-slirp) slirp="disabled"
|
||||
;;
|
||||
--enable-slirp) slirp="enabled"
|
||||
@ -1021,10 +1011,6 @@ for opt do
|
||||
;;
|
||||
--enable-opengl) opengl="yes"
|
||||
;;
|
||||
--disable-xfsctl) xfs="no"
|
||||
;;
|
||||
--enable-xfsctl) xfs="yes"
|
||||
;;
|
||||
--disable-zlib-test)
|
||||
;;
|
||||
--enable-guest-agent) guest_agent="yes"
|
||||
@ -1265,18 +1251,26 @@ if eval test -z "\${cross_cc_$cpu}"; then
|
||||
cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
|
||||
fi
|
||||
|
||||
# For user-mode emulation the host arch has to be one we explicitly
|
||||
# support, even if we're using TCI.
|
||||
if [ "$ARCH" = "unknown" ]; then
|
||||
bsd_user="no"
|
||||
linux_user="no"
|
||||
fi
|
||||
|
||||
default_target_list=""
|
||||
deprecated_targets_list=ppc64abi32-linux-user
|
||||
deprecated_features=""
|
||||
mak_wilds=""
|
||||
|
||||
if [ "$linux_user" != no ]; then
|
||||
if [ "$targetos" = linux ] && [ -d $source_path/linux-user/include/host/$cpu ]; then
|
||||
linux_user=yes
|
||||
elif [ "$linux_user" = yes ]; then
|
||||
error_exit "linux-user not supported on this architecture"
|
||||
fi
|
||||
fi
|
||||
if [ "$bsd_user" != no ]; then
|
||||
if [ "$bsd_user" = "" ]; then
|
||||
test $targetos = freebsd && bsd_user=yes
|
||||
fi
|
||||
if [ "$bsd_user" = yes ] && ! [ -d $source_path/bsd-user/$targetos ]; then
|
||||
error_exit "bsd-user not supported on this host OS"
|
||||
fi
|
||||
fi
|
||||
if [ "$softmmu" = "yes" ]; then
|
||||
mak_wilds="${mak_wilds} $source_path/configs/targets/*-softmmu.mak"
|
||||
fi
|
||||
@ -1367,7 +1361,6 @@ Advanced options (experts only):
|
||||
--enable-debug enable common debug build options
|
||||
--enable-sanitizers enable default sanitizers
|
||||
--enable-tsan enable thread sanitizer
|
||||
--disable-strip disable stripping binaries
|
||||
--disable-werror disable compilation abort on warning
|
||||
--disable-stack-protector disable compiler-provided stack protection
|
||||
--audio-drv-list=LIST set audio drivers to try if -audiodev is not used
|
||||
@ -1431,7 +1424,6 @@ cat << EOF
|
||||
avx512f AVX512F optimization support
|
||||
replication replication support
|
||||
opengl opengl support
|
||||
xfsctl xfsctl support
|
||||
qom-cast-debug cast debugging support
|
||||
tools build qemu-io, qemu-nbd and qemu-img tools
|
||||
bochs bochs image format support
|
||||
@ -1702,6 +1694,7 @@ if test "$static" = "yes" ; then
|
||||
plugins="no"
|
||||
fi
|
||||
fi
|
||||
test "$plugins" = "" && plugins=yes
|
||||
|
||||
cat > $TMPC << EOF
|
||||
|
||||
@ -2323,91 +2316,6 @@ EOF
|
||||
fi
|
||||
fi
|
||||
|
||||
##########################################
|
||||
# xfsctl() probe, used for file-posix.c
|
||||
if test "$xfs" != "no" ; then
|
||||
cat > $TMPC << EOF
|
||||
#include <stddef.h> /* NULL */
|
||||
#include <xfs/xfs.h>
|
||||
int main(void)
|
||||
{
|
||||
xfsctl(NULL, 0, 0, NULL);
|
||||
return 0;
|
||||
}
|
||||
EOF
|
||||
if compile_prog "" "" ; then
|
||||
xfs="yes"
|
||||
else
|
||||
if test "$xfs" = "yes" ; then
|
||||
feature_not_found "xfs" "Install xfsprogs/xfslibs devel"
|
||||
fi
|
||||
xfs=no
|
||||
fi
|
||||
fi
|
||||
|
||||
##########################################
|
||||
# plugin linker support probe
|
||||
|
||||
if test "$plugins" != "no"; then
|
||||
|
||||
#########################################
|
||||
# See if --dynamic-list is supported by the linker
|
||||
|
||||
ld_dynamic_list="no"
|
||||
cat > $TMPTXT <<EOF
|
||||
{
|
||||
foo;
|
||||
};
|
||||
EOF
|
||||
|
||||
cat > $TMPC <<EOF
|
||||
#include <stdio.h>
|
||||
void foo(void);
|
||||
|
||||
void foo(void)
|
||||
{
|
||||
printf("foo\n");
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
foo();
|
||||
return 0;
|
||||
}
|
||||
EOF
|
||||
|
||||
if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
|
||||
ld_dynamic_list="yes"
|
||||
fi
|
||||
|
||||
#########################################
|
||||
# See if -exported_symbols_list is supported by the linker
|
||||
|
||||
ld_exported_symbols_list="no"
|
||||
cat > $TMPTXT <<EOF
|
||||
_foo
|
||||
EOF
|
||||
|
||||
if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
|
||||
ld_exported_symbols_list="yes"
|
||||
fi
|
||||
|
||||
if test "$ld_dynamic_list" = "no" &&
|
||||
test "$ld_exported_symbols_list" = "no" ; then
|
||||
if test "$plugins" = "yes"; then
|
||||
error_exit \
|
||||
"Plugin support requires dynamic linking and specifying a set of symbols " \
|
||||
"that are exported to plugins. Unfortunately your linker doesn't " \
|
||||
"support the flag (--dynamic-list or -exported_symbols_list) used " \
|
||||
"for this purpose."
|
||||
else
|
||||
plugins="no"
|
||||
fi
|
||||
else
|
||||
plugins="yes"
|
||||
fi
|
||||
fi
|
||||
|
||||
##########################################
|
||||
# glib support probe
|
||||
|
||||
@ -2639,6 +2547,7 @@ fi
|
||||
##########################################
|
||||
# check if we have VSS SDK headers for win
|
||||
|
||||
guest_agent_with_vss="no"
|
||||
if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
|
||||
test "$vss_win32_sdk" != "no" ; then
|
||||
case "$vss_win32_sdk" in
|
||||
@ -2669,7 +2578,6 @@ EOF
|
||||
echo "ERROR: The headers are extracted in the directory \`inc'."
|
||||
feature_not_found "VSS support"
|
||||
fi
|
||||
guest_agent_with_vss="no"
|
||||
fi
|
||||
fi
|
||||
|
||||
@ -2696,6 +2604,7 @@ fi
|
||||
|
||||
##########################################
|
||||
# check if mingw environment provides a recent ntddscsi.h
|
||||
guest_agent_ntddscsi="no"
|
||||
if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
|
||||
cat > $TMPC << EOF
|
||||
#include <windows.h>
|
||||
@ -3400,9 +3309,6 @@ echo "GIT_SUBMODULES_ACTION=$git_submodules_action" >> $config_host_mak
|
||||
if test "$debug_tcg" = "yes" ; then
|
||||
echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
|
||||
fi
|
||||
if test "$strip_opt" = "yes" ; then
|
||||
echo "STRIP=${strip}" >> $config_host_mak
|
||||
fi
|
||||
if test "$mingw32" = "yes" ; then
|
||||
echo "CONFIG_WIN32=y" >> $config_host_mak
|
||||
if test "$guest_agent_with_vss" = "yes" ; then
|
||||
@ -3456,9 +3362,6 @@ echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
|
||||
if test "$block_drv_whitelist_tools" = "yes" ; then
|
||||
echo "CONFIG_BDRV_WHITELIST_TOOLS=y" >> $config_host_mak
|
||||
fi
|
||||
if test "$xfs" = "yes" ; then
|
||||
echo "CONFIG_XFS=y" >> $config_host_mak
|
||||
fi
|
||||
qemu_version=$(head $source_path/VERSION)
|
||||
echo "PKGVERSION=$pkgversion" >>$config_host_mak
|
||||
echo "SRC_PATH=$source_path" >> $config_host_mak
|
||||
@ -3645,22 +3548,6 @@ fi
|
||||
|
||||
if test "$plugins" = "yes" ; then
|
||||
echo "CONFIG_PLUGIN=y" >> $config_host_mak
|
||||
# Copy the export object list to the build dir
|
||||
if test "$ld_dynamic_list" = "yes" ; then
|
||||
echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
|
||||
ld_symbols=qemu-plugins-ld.symbols
|
||||
cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
|
||||
elif test "$ld_exported_symbols_list" = "yes" ; then
|
||||
echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
|
||||
ld64_symbols=qemu-plugins-ld64.symbols
|
||||
echo "# Automatically generated by configure - do not modify" > $ld64_symbols
|
||||
grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
|
||||
sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
|
||||
else
|
||||
error_exit \
|
||||
"If \$plugins=yes, either \$ld_dynamic_list or " \
|
||||
"\$ld_exported_symbols_list should have been set to 'yes'."
|
||||
fi
|
||||
fi
|
||||
|
||||
if test -n "$gdb_bin"; then
|
||||
@ -3699,6 +3586,7 @@ echo "GLIB_LIBS=$glib_libs" >> $config_host_mak
|
||||
echo "GLIB_VERSION=$(pkg-config --modversion glib-2.0)" >> $config_host_mak
|
||||
echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
|
||||
echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
|
||||
echo "STRIP=$strip" >> $config_host_mak
|
||||
echo "EXESUF=$EXESUF" >> $config_host_mak
|
||||
echo "LIBS_QGA=$libs_qga" >> $config_host_mak
|
||||
|
||||
@ -3776,9 +3664,6 @@ 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.
|
||||
LINKS="Makefile"
|
||||
LINKS="$LINKS tests/tcg/Makefile.target"
|
||||
LINKS="$LINKS pc-bios/optionrom/Makefile"
|
||||
@ -3790,7 +3675,6 @@ LINKS="$LINKS tests/avocado 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 \
|
||||
$source_path/pc-bios/*.elf \
|
||||
@ -3812,11 +3696,6 @@ 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
|
||||
@ -3825,7 +3704,8 @@ export target_list source_path use_containers cpu
|
||||
$source_path/tests/tcg/configure.sh)
|
||||
|
||||
# temporary config to build submodules
|
||||
for rom in seabios; do
|
||||
if test -f $source_path/roms/seabios/Makefile; then
|
||||
for rom in seabios; do
|
||||
config_mak=roms/$rom/config.mak
|
||||
echo "# Automatically generated by configure - do not modify" > $config_mak
|
||||
echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
|
||||
@ -3838,7 +3718,8 @@ for rom in seabios; do
|
||||
echo "IASL=$iasl" >> $config_mak
|
||||
echo "LD=$ld" >> $config_mak
|
||||
echo "RANLIB=$ranlib" >> $config_mak
|
||||
done
|
||||
done
|
||||
fi
|
||||
|
||||
config_mak=pc-bios/optionrom/config.mak
|
||||
echo "# Automatically generated by configure - do not modify" > $config_mak
|
||||
@ -3925,7 +3806,6 @@ if test "$skip_meson" = no; then
|
||||
-Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
|
||||
-Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \
|
||||
-Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
|
||||
-Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \
|
||||
-Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
|
||||
-Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
|
||||
-Db_lto=$lto -Dcfi=$cfi -Dtcg=$tcg -Dxen=$xen \
|
||||
@ -3956,17 +3836,6 @@ if test -n "${deprecated_features}"; then
|
||||
echo " features: ${deprecated_features}"
|
||||
fi
|
||||
|
||||
# Create list of config switches that should be poisoned in common code...
|
||||
# but filter out CONFIG_TCG and CONFIG_USER_ONLY which are special.
|
||||
target_configs_h=$(ls *-config-devices.h *-config-target.h 2>/dev/null)
|
||||
if test -n "$target_configs_h" ; then
|
||||
sed -n -e '/CONFIG_TCG/d' -e '/CONFIG_USER_ONLY/d' \
|
||||
-e '/^#define / { s///; s/ .*//; s/^/#pragma GCC poison /p; }' \
|
||||
$target_configs_h | sort -u > config-poison.h
|
||||
else
|
||||
:> config-poison.h
|
||||
fi
|
||||
|
||||
# Save the configure command line for later reuse.
|
||||
cat <<EOD >config.status
|
||||
#!/bin/sh
|
||||
|
@ -1,5 +1,5 @@
|
||||
if curl.found()
|
||||
executable('elf2dmp', files('main.c', 'addrspace.c', 'download.c', 'pdb.c', 'qemu_elf.c'),
|
||||
executable('elf2dmp', files('main.c', 'addrspace.c', 'download.c', 'pdb.c', 'qemu_elf.c'), genh,
|
||||
dependencies: [glib, curl],
|
||||
install: true)
|
||||
endif
|
||||
|
@ -1,4 +1,4 @@
|
||||
executable('ivshmem-client', files('ivshmem-client.c', 'main.c'),
|
||||
executable('ivshmem-client', files('ivshmem-client.c', 'main.c'), genh,
|
||||
dependencies: glib,
|
||||
build_by_default: targetos == 'linux',
|
||||
install: false)
|
||||
|
@ -1,4 +1,4 @@
|
||||
executable('ivshmem-server', files('ivshmem-server.c', 'main.c'),
|
||||
executable('ivshmem-server', files('ivshmem-server.c', 'main.c'), genh,
|
||||
dependencies: [qemuutil, rt],
|
||||
build_by_default: targetos == 'linux',
|
||||
install: false)
|
||||
|
@ -2,7 +2,7 @@ if 'CONFIG_PVRDMA' in config_host
|
||||
# if not found, CONFIG_PVRDMA should not be set
|
||||
# FIXME: broken on big endian architectures
|
||||
libumad = cc.find_library('ibumad', required: true)
|
||||
executable('rdmacm-mux', files('main.c'),
|
||||
executable('rdmacm-mux', files('main.c'), genh,
|
||||
dependencies: [glib, libumad],
|
||||
build_by_default: false,
|
||||
install: false)
|
||||
|
@ -4,8 +4,8 @@ endif
|
||||
|
||||
linux_user_ss = ss.source_set()
|
||||
|
||||
common_user_inc += include_directories('host/' / host_arch)
|
||||
common_user_inc += include_directories('.')
|
||||
common_user_inc += include_directories('include/host/' / host_arch)
|
||||
common_user_inc += include_directories('include')
|
||||
|
||||
linux_user_ss.add(files(
|
||||
'elfload.c',
|
||||
|
37
meson.build
37
meson.build
@ -238,6 +238,7 @@ endif
|
||||
# Target-specific checks and dependencies #
|
||||
###########################################
|
||||
|
||||
# Fuzzing
|
||||
if get_option('fuzzing') and get_option('fuzzing_engine') == '' and \
|
||||
not cc.links('''
|
||||
#include <stdint.h>
|
||||
@ -249,6 +250,7 @@ if get_option('fuzzing') and get_option('fuzzing_engine') == '' and \
|
||||
error('Your compiler does not support -fsanitize=fuzzer')
|
||||
endif
|
||||
|
||||
# Tracing backends
|
||||
if 'ftrace' in get_option('trace_backends') and targetos != 'linux'
|
||||
error('ftrace is supported only on Linux')
|
||||
endif
|
||||
@ -262,6 +264,7 @@ if 'syslog' in get_option('trace_backends') and not cc.compiles('''
|
||||
error('syslog is not supported on this system')
|
||||
endif
|
||||
|
||||
# Miscellaneous Linux-only features
|
||||
if targetos != 'linux' and get_option('mpath').enabled()
|
||||
error('Multipath is supported only on Linux')
|
||||
endif
|
||||
@ -271,6 +274,7 @@ if targetos != 'linux' and get_option('multiprocess').enabled()
|
||||
endif
|
||||
multiprocess_allowed = targetos == 'linux' and not get_option('multiprocess').disabled()
|
||||
|
||||
# Target-specific libraries and flags
|
||||
libm = cc.find_library('m', required: false)
|
||||
threads = dependency('threads')
|
||||
util = cc.find_library('util', required: false)
|
||||
@ -311,6 +315,7 @@ elif targetos == 'openbsd'
|
||||
endif
|
||||
endif
|
||||
|
||||
# Target-specific configuration of accelerators
|
||||
accelerators = []
|
||||
if not get_option('kvm').disabled() and targetos == 'linux'
|
||||
accelerators += 'CONFIG_KVM'
|
||||
@ -2028,6 +2033,18 @@ config_all += {
|
||||
'CONFIG_ALL': true,
|
||||
}
|
||||
|
||||
target_configs_h = []
|
||||
foreach target: target_dirs
|
||||
target_configs_h += config_target_h[target]
|
||||
target_configs_h += config_devices_h.get(target, [])
|
||||
endforeach
|
||||
genh += custom_target('config-poison.h',
|
||||
input: [target_configs_h],
|
||||
output: 'config-poison.h',
|
||||
capture: true,
|
||||
command: [find_program('scripts/make-config-poison.sh'),
|
||||
target_configs_h])
|
||||
|
||||
##############
|
||||
# Submodules #
|
||||
##############
|
||||
@ -2399,7 +2416,6 @@ blockdev_ss = ss.source_set()
|
||||
block_ss = ss.source_set()
|
||||
chardev_ss = ss.source_set()
|
||||
common_ss = ss.source_set()
|
||||
common_user_ss = ss.source_set()
|
||||
crypto_ss = ss.source_set()
|
||||
hwcore_ss = ss.source_set()
|
||||
io_ss = ss.source_set()
|
||||
@ -2651,17 +2667,6 @@ subdir('common-user')
|
||||
subdir('bsd-user')
|
||||
subdir('linux-user')
|
||||
|
||||
common_user_ss = common_user_ss.apply(config_all, strict: false)
|
||||
common_user = static_library('common-user',
|
||||
sources: common_user_ss.sources(),
|
||||
dependencies: common_user_ss.dependencies(),
|
||||
include_directories: common_user_inc,
|
||||
name_suffix: 'fa',
|
||||
build_by_default: false)
|
||||
common_user = declare_dependency(link_with: common_user)
|
||||
|
||||
user_ss.add(common_user)
|
||||
|
||||
# needed for fuzzing binaries
|
||||
subdir('tests/qtest/libqos')
|
||||
subdir('tests/qtest/fuzz')
|
||||
@ -2861,8 +2866,10 @@ common_ss.add(hwcore)
|
||||
# Targets #
|
||||
###########
|
||||
|
||||
emulator_modules = []
|
||||
foreach m : block_mods + softmmu_mods
|
||||
shared_module(m.name(),
|
||||
emulator_modules += shared_module(m.name(),
|
||||
build_by_default: true,
|
||||
name_prefix: '',
|
||||
link_whole: m,
|
||||
install: true,
|
||||
@ -2879,6 +2886,7 @@ common_all = common_ss.apply(config_all, strict: false)
|
||||
common_all = static_library('common',
|
||||
build_by_default: false,
|
||||
sources: common_all.sources() + genh,
|
||||
include_directories: common_user_inc,
|
||||
implicit_include_directories: false,
|
||||
dependencies: common_all.dependencies(),
|
||||
name_suffix: 'fa')
|
||||
@ -2919,6 +2927,7 @@ foreach target : target_dirs
|
||||
else
|
||||
abi = config_target['TARGET_ABI_DIR']
|
||||
target_type='user'
|
||||
target_inc += common_user_inc
|
||||
qemu_target_name = 'qemu-' + target_name
|
||||
if target_base_arch in target_user_arch
|
||||
t = target_user_arch[target_base_arch].apply(config_target, strict: false)
|
||||
@ -2927,7 +2936,6 @@ foreach target : target_dirs
|
||||
endif
|
||||
if 'CONFIG_LINUX_USER' in config_target
|
||||
base_dir = 'linux-user'
|
||||
target_inc += include_directories('linux-user/host/' / host_arch)
|
||||
endif
|
||||
if 'CONFIG_BSD_USER' in config_target
|
||||
base_dir = 'bsd-user'
|
||||
@ -3456,7 +3464,6 @@ if spice_protocol.found()
|
||||
summary_info += {' spice server support': spice}
|
||||
endif
|
||||
summary_info += {'rbd support': rbd}
|
||||
summary_info += {'xfsctl support': config_host.has_key('CONFIG_XFS')}
|
||||
summary_info += {'smartcard support': cacard}
|
||||
summary_info += {'U2F support': u2f}
|
||||
summary_info += {'libusb': libusb}
|
||||
|
@ -44,8 +44,6 @@ build-all: s390-ccw.img s390-netboot.img
|
||||
s390-ccw.elf: $(OBJECTS)
|
||||
$(call quiet-command,$(CC) $(LDFLAGS) -o $@ $(OBJECTS),"BUILD","$(TARGET_DIR)$@")
|
||||
|
||||
STRIP ?= strip
|
||||
|
||||
s390-ccw.img: s390-ccw.elf
|
||||
$(call quiet-command,$(STRIP) --strip-unneeded $< -o $@,"STRIP","$(TARGET_DIR)$@")
|
||||
|
||||
|
@ -1,10 +1,15 @@
|
||||
plugin_ldflags = []
|
||||
# Modules need more symbols than just those in plugins/qemu-plugins.symbols
|
||||
if not enable_modules
|
||||
if 'CONFIG_HAS_LD_DYNAMIC_LIST' in config_host
|
||||
plugin_ldflags = ['-Wl,--dynamic-list=qemu-plugins-ld.symbols']
|
||||
elif 'CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST' in config_host
|
||||
plugin_ldflags = ['-Wl,-exported_symbols_list,qemu-plugins-ld64.symbols']
|
||||
if targetos == 'darwin'
|
||||
qemu_plugins_symbols_list = configure_file(
|
||||
input: files('qemu-plugins.symbols'),
|
||||
output: 'qemu-plugins-ld64.symbols',
|
||||
capture: true,
|
||||
command: ['sed', '-ne', 's/^[[:space:]]*\\(qemu_.*\\);/_\\1/p', '@INPUT@'])
|
||||
plugin_ldflags = ['-Wl,-exported_symbols_list,plugins/qemu-plugins-ld64.symbols']
|
||||
else
|
||||
plugin_ldflags = ['-Xlinker', '--dynamic-list=' + (meson.project_source_root() / 'plugins/qemu-plugins.symbols')]
|
||||
endif
|
||||
endif
|
||||
|
||||
|
@ -151,7 +151,6 @@
|
||||
--disable-whpx \
|
||||
--disable-xen \
|
||||
--disable-xen-pci-passthrough \
|
||||
--disable-xfsctl \
|
||||
--disable-xkbcommon \
|
||||
--disable-zstd \
|
||||
--enable-attr \
|
||||
|
@ -398,7 +398,7 @@ echo "Configuring..."
|
||||
--enable-xen --enable-brlapi \
|
||||
--enable-linux-aio --enable-attr \
|
||||
--enable-cap-ng --enable-trace-backends=log --enable-spice --enable-rbd \
|
||||
--enable-xfsctl --enable-libusb --enable-usb-redir \
|
||||
--enable-libusb --enable-usb-redir \
|
||||
--enable-libiscsi --enable-libnfs --enable-seccomp \
|
||||
--enable-tpm --enable-libssh --enable-lzo --enable-snappy --enable-bzip2 \
|
||||
--enable-numa --enable-rdma --enable-smartcard --enable-virglrenderer \
|
||||
|
16
scripts/make-config-poison.sh
Executable file
16
scripts/make-config-poison.sh
Executable file
@ -0,0 +1,16 @@
|
||||
#! /bin/sh
|
||||
|
||||
if test $# = 0; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Create list of config switches that should be poisoned in common code...
|
||||
# but filter out CONFIG_TCG and CONFIG_USER_ONLY which are special.
|
||||
exec sed -n \
|
||||
-e' /CONFIG_TCG/d' \
|
||||
-e '/CONFIG_USER_ONLY/d' \
|
||||
-e '/^#define / {' \
|
||||
-e 's///' \
|
||||
-e 's/ .*//' \
|
||||
-e 's/^/#pragma GCC poison /p' \
|
||||
-e '}' "$@"
|
@ -36,6 +36,10 @@ SKIP_OPTIONS = {
|
||||
"trace_file",
|
||||
}
|
||||
|
||||
BUILTIN_OPTIONS = {
|
||||
"strip",
|
||||
}
|
||||
|
||||
LINE_WIDTH = 76
|
||||
|
||||
|
||||
@ -90,14 +94,17 @@ def allow_arg(opt):
|
||||
return not (set(opt["choices"]) <= {"auto", "disabled", "enabled"})
|
||||
|
||||
|
||||
def filter_options(json):
|
||||
if ":" in json["name"]:
|
||||
return False
|
||||
if json["section"] == "user":
|
||||
return json["name"] not in SKIP_OPTIONS
|
||||
else:
|
||||
return json["name"] in BUILTIN_OPTIONS
|
||||
|
||||
|
||||
def load_options(json):
|
||||
json = [
|
||||
x
|
||||
for x in json
|
||||
if x["section"] == "user"
|
||||
and ":" not in x["name"]
|
||||
and x["name"] not in SKIP_OPTIONS
|
||||
]
|
||||
json = [x for x in json if filter_options(x)]
|
||||
return sorted(json, key=lambda x: x["name"])
|
||||
|
||||
|
||||
|
@ -13,6 +13,7 @@ meson_options_help() {
|
||||
printf "%s\n" ' jemalloc/system/tcmalloc)'
|
||||
printf "%s\n" ' --enable-slirp[=CHOICE] Whether and how to find the slirp library'
|
||||
printf "%s\n" ' (choices: auto/disabled/enabled/internal/system)'
|
||||
printf "%s\n" ' --enable-strip Strip targets on install'
|
||||
printf "%s\n" ' --enable-tcg-interpreter TCG with bytecode interpreter (slow)'
|
||||
printf "%s\n" ' --enable-trace-backends=CHOICE'
|
||||
printf "%s\n" ' Set available tracing backends [log] (choices:'
|
||||
@ -237,6 +238,8 @@ _meson_option_parse() {
|
||||
--disable-spice) printf "%s" -Dspice=disabled ;;
|
||||
--enable-spice-protocol) printf "%s" -Dspice_protocol=enabled ;;
|
||||
--disable-spice-protocol) printf "%s" -Dspice_protocol=disabled ;;
|
||||
--enable-strip) printf "%s" -Dstrip=true ;;
|
||||
--disable-strip) printf "%s" -Dstrip=false ;;
|
||||
--enable-tcg) printf "%s" -Dtcg=enabled ;;
|
||||
--disable-tcg) printf "%s" -Dtcg=disabled ;;
|
||||
--enable-tcg-interpreter) printf "%s" -Dtcg_interpreter=true ;;
|
||||
|
@ -1455,6 +1455,9 @@ typedef struct CPUX86State {
|
||||
SegmentCache idt; /* only base and limit are used */
|
||||
|
||||
target_ulong cr[5]; /* NOTE: cr1 is unused */
|
||||
|
||||
bool pdptrs_valid;
|
||||
uint64_t pdptrs[4];
|
||||
int32_t a20_mask;
|
||||
|
||||
BNDReg bnd_regs[4];
|
||||
|
@ -124,6 +124,7 @@ static uint32_t num_architectural_pmu_fixed_counters;
|
||||
static int has_xsave;
|
||||
static int has_xcrs;
|
||||
static int has_pit_state2;
|
||||
static int has_sregs2;
|
||||
static int has_exception_payload;
|
||||
|
||||
static bool has_msr_mcg_ext_ctl;
|
||||
@ -2324,6 +2325,7 @@ int kvm_arch_init(MachineState *ms, KVMState *s)
|
||||
has_xsave = kvm_check_extension(s, KVM_CAP_XSAVE);
|
||||
has_xcrs = kvm_check_extension(s, KVM_CAP_XCRS);
|
||||
has_pit_state2 = kvm_check_extension(s, KVM_CAP_PIT_STATE2);
|
||||
has_sregs2 = kvm_check_extension(s, KVM_CAP_SREGS2) > 0;
|
||||
|
||||
hv_vpindex_settable = kvm_check_extension(s, KVM_CAP_HYPERV_VP_INDEX);
|
||||
|
||||
@ -2605,11 +2607,11 @@ static int kvm_put_sregs(X86CPU *cpu)
|
||||
CPUX86State *env = &cpu->env;
|
||||
struct kvm_sregs sregs;
|
||||
|
||||
/*
|
||||
* The interrupt_bitmap is ignored because KVM_SET_SREGS is
|
||||
* always followed by KVM_SET_VCPU_EVENTS.
|
||||
*/
|
||||
memset(sregs.interrupt_bitmap, 0, sizeof(sregs.interrupt_bitmap));
|
||||
if (env->interrupt_injected >= 0) {
|
||||
sregs.interrupt_bitmap[env->interrupt_injected / 64] |=
|
||||
(uint64_t)1 << (env->interrupt_injected % 64);
|
||||
}
|
||||
|
||||
if ((env->eflags & VM_MASK)) {
|
||||
set_v8086_seg(&sregs.cs, &env->segs[R_CS]);
|
||||
@ -2650,6 +2652,61 @@ static int kvm_put_sregs(X86CPU *cpu)
|
||||
return kvm_vcpu_ioctl(CPU(cpu), KVM_SET_SREGS, &sregs);
|
||||
}
|
||||
|
||||
static int kvm_put_sregs2(X86CPU *cpu)
|
||||
{
|
||||
CPUX86State *env = &cpu->env;
|
||||
struct kvm_sregs2 sregs;
|
||||
int i;
|
||||
|
||||
sregs.flags = 0;
|
||||
|
||||
if ((env->eflags & VM_MASK)) {
|
||||
set_v8086_seg(&sregs.cs, &env->segs[R_CS]);
|
||||
set_v8086_seg(&sregs.ds, &env->segs[R_DS]);
|
||||
set_v8086_seg(&sregs.es, &env->segs[R_ES]);
|
||||
set_v8086_seg(&sregs.fs, &env->segs[R_FS]);
|
||||
set_v8086_seg(&sregs.gs, &env->segs[R_GS]);
|
||||
set_v8086_seg(&sregs.ss, &env->segs[R_SS]);
|
||||
} else {
|
||||
set_seg(&sregs.cs, &env->segs[R_CS]);
|
||||
set_seg(&sregs.ds, &env->segs[R_DS]);
|
||||
set_seg(&sregs.es, &env->segs[R_ES]);
|
||||
set_seg(&sregs.fs, &env->segs[R_FS]);
|
||||
set_seg(&sregs.gs, &env->segs[R_GS]);
|
||||
set_seg(&sregs.ss, &env->segs[R_SS]);
|
||||
}
|
||||
|
||||
set_seg(&sregs.tr, &env->tr);
|
||||
set_seg(&sregs.ldt, &env->ldt);
|
||||
|
||||
sregs.idt.limit = env->idt.limit;
|
||||
sregs.idt.base = env->idt.base;
|
||||
memset(sregs.idt.padding, 0, sizeof sregs.idt.padding);
|
||||
sregs.gdt.limit = env->gdt.limit;
|
||||
sregs.gdt.base = env->gdt.base;
|
||||
memset(sregs.gdt.padding, 0, sizeof sregs.gdt.padding);
|
||||
|
||||
sregs.cr0 = env->cr[0];
|
||||
sregs.cr2 = env->cr[2];
|
||||
sregs.cr3 = env->cr[3];
|
||||
sregs.cr4 = env->cr[4];
|
||||
|
||||
sregs.cr8 = cpu_get_apic_tpr(cpu->apic_state);
|
||||
sregs.apic_base = cpu_get_apic_base(cpu->apic_state);
|
||||
|
||||
sregs.efer = env->efer;
|
||||
|
||||
if (env->pdptrs_valid) {
|
||||
for (i = 0; i < 4; i++) {
|
||||
sregs.pdptrs[i] = env->pdptrs[i];
|
||||
}
|
||||
sregs.flags |= KVM_SREGS2_FLAGS_PDPTRS_VALID;
|
||||
}
|
||||
|
||||
return kvm_vcpu_ioctl(CPU(cpu), KVM_SET_SREGS2, &sregs);
|
||||
}
|
||||
|
||||
|
||||
static void kvm_msr_buf_reset(X86CPU *cpu)
|
||||
{
|
||||
memset(cpu->kvm_msr_buf, 0, MSR_BUF_SIZE);
|
||||
@ -3284,22 +3341,55 @@ static int kvm_get_sregs(X86CPU *cpu)
|
||||
{
|
||||
CPUX86State *env = &cpu->env;
|
||||
struct kvm_sregs sregs;
|
||||
int bit, i, ret;
|
||||
int ret;
|
||||
|
||||
ret = kvm_vcpu_ioctl(CPU(cpu), KVM_GET_SREGS, &sregs);
|
||||
if (ret < 0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* There can only be one pending IRQ set in the bitmap at a time, so try
|
||||
to find it and save its number instead (-1 for none). */
|
||||
env->interrupt_injected = -1;
|
||||
for (i = 0; i < ARRAY_SIZE(sregs.interrupt_bitmap); i++) {
|
||||
if (sregs.interrupt_bitmap[i]) {
|
||||
bit = ctz64(sregs.interrupt_bitmap[i]);
|
||||
env->interrupt_injected = i * 64 + bit;
|
||||
break;
|
||||
}
|
||||
/*
|
||||
* The interrupt_bitmap is ignored because KVM_GET_SREGS is
|
||||
* always preceded by KVM_GET_VCPU_EVENTS.
|
||||
*/
|
||||
|
||||
get_seg(&env->segs[R_CS], &sregs.cs);
|
||||
get_seg(&env->segs[R_DS], &sregs.ds);
|
||||
get_seg(&env->segs[R_ES], &sregs.es);
|
||||
get_seg(&env->segs[R_FS], &sregs.fs);
|
||||
get_seg(&env->segs[R_GS], &sregs.gs);
|
||||
get_seg(&env->segs[R_SS], &sregs.ss);
|
||||
|
||||
get_seg(&env->tr, &sregs.tr);
|
||||
get_seg(&env->ldt, &sregs.ldt);
|
||||
|
||||
env->idt.limit = sregs.idt.limit;
|
||||
env->idt.base = sregs.idt.base;
|
||||
env->gdt.limit = sregs.gdt.limit;
|
||||
env->gdt.base = sregs.gdt.base;
|
||||
|
||||
env->cr[0] = sregs.cr0;
|
||||
env->cr[2] = sregs.cr2;
|
||||
env->cr[3] = sregs.cr3;
|
||||
env->cr[4] = sregs.cr4;
|
||||
|
||||
env->efer = sregs.efer;
|
||||
|
||||
/* changes to apic base and cr8/tpr are read back via kvm_arch_post_run */
|
||||
x86_update_hflags(env);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int kvm_get_sregs2(X86CPU *cpu)
|
||||
{
|
||||
CPUX86State *env = &cpu->env;
|
||||
struct kvm_sregs2 sregs;
|
||||
int i, ret;
|
||||
|
||||
ret = kvm_vcpu_ioctl(CPU(cpu), KVM_GET_SREGS2, &sregs);
|
||||
if (ret < 0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
get_seg(&env->segs[R_CS], &sregs.cs);
|
||||
@ -3324,6 +3414,14 @@ static int kvm_get_sregs(X86CPU *cpu)
|
||||
|
||||
env->efer = sregs.efer;
|
||||
|
||||
env->pdptrs_valid = sregs.flags & KVM_SREGS2_FLAGS_PDPTRS_VALID;
|
||||
|
||||
if (env->pdptrs_valid) {
|
||||
for (i = 0; i < 4; i++) {
|
||||
env->pdptrs[i] = sregs.pdptrs[i];
|
||||
}
|
||||
}
|
||||
|
||||
/* changes to apic base and cr8/tpr are read back via kvm_arch_post_run */
|
||||
x86_update_hflags(env);
|
||||
|
||||
@ -4173,7 +4271,7 @@ int kvm_arch_put_registers(CPUState *cpu, int level)
|
||||
assert(cpu_is_stopped(cpu) || qemu_cpu_is_self(cpu));
|
||||
|
||||
/* must be before kvm_put_nested_state so that EFER.SVME is set */
|
||||
ret = kvm_put_sregs(x86_cpu);
|
||||
ret = has_sregs2 ? kvm_put_sregs2(x86_cpu) : kvm_put_sregs(x86_cpu);
|
||||
if (ret < 0) {
|
||||
return ret;
|
||||
}
|
||||
@ -4278,7 +4376,7 @@ int kvm_arch_get_registers(CPUState *cs)
|
||||
if (ret < 0) {
|
||||
goto out;
|
||||
}
|
||||
ret = kvm_get_sregs(cpu);
|
||||
ret = has_sregs2 ? kvm_get_sregs2(cpu) : kvm_get_sregs(cpu);
|
||||
if (ret < 0) {
|
||||
goto out;
|
||||
}
|
||||
|
@ -1451,6 +1451,34 @@ static const VMStateDescription vmstate_msr_intel_sgx = {
|
||||
.needed = intel_sgx_msrs_needed,
|
||||
.fields = (VMStateField[]) {
|
||||
VMSTATE_UINT64_ARRAY(env.msr_ia32_sgxlepubkeyhash, X86CPU, 4),
|
||||
VMSTATE_END_OF_LIST()
|
||||
}
|
||||
};
|
||||
|
||||
static bool pdptrs_needed(void *opaque)
|
||||
{
|
||||
X86CPU *cpu = opaque;
|
||||
CPUX86State *env = &cpu->env;
|
||||
return env->pdptrs_valid;
|
||||
}
|
||||
|
||||
static int pdptrs_post_load(void *opaque, int version_id)
|
||||
{
|
||||
X86CPU *cpu = opaque;
|
||||
CPUX86State *env = &cpu->env;
|
||||
env->pdptrs_valid = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static const VMStateDescription vmstate_pdptrs = {
|
||||
.name = "cpu/pdptrs",
|
||||
.version_id = 1,
|
||||
.minimum_version_id = 1,
|
||||
.needed = pdptrs_needed,
|
||||
.post_load = pdptrs_post_load,
|
||||
.fields = (VMStateField[]) {
|
||||
VMSTATE_UINT64_ARRAY(env.pdptrs, X86CPU, 4),
|
||||
VMSTATE_END_OF_LIST()
|
||||
}
|
||||
};
|
||||
@ -1593,6 +1621,7 @@ const VMStateDescription vmstate_x86_cpu = {
|
||||
#endif
|
||||
&vmstate_msr_tsx_ctrl,
|
||||
&vmstate_msr_intel_sgx,
|
||||
&vmstate_pdptrs,
|
||||
NULL
|
||||
}
|
||||
};
|
||||
|
@ -335,10 +335,9 @@ foreach dir : target_dirs
|
||||
test: executable(test, src, dependencies: deps)
|
||||
}
|
||||
endif
|
||||
# FIXME: missing dependency on the emulator binary and qemu-img
|
||||
test('qtest-@0@/@1@'.format(target_base, test),
|
||||
qtest_executables[test],
|
||||
depends: [test_deps, qtest_emulator],
|
||||
depends: [test_deps, qtest_emulator, emulator_modules],
|
||||
env: qtest_env,
|
||||
args: ['--tap', '-k'],
|
||||
protocol: 'tap',
|
||||
|
@ -33,7 +33,7 @@ all:
|
||||
-include ../../../config-host.mak
|
||||
-include ../config-$(TARGET).mak
|
||||
ifeq ($(CONFIG_USER_ONLY),y)
|
||||
-include $(SRC_PATH)/default-configs/targets/$(TARGET).mak
|
||||
-include $(SRC_PATH)/configs/targets/$(TARGET)/default.mak
|
||||
endif
|
||||
|
||||
# for including , in command strings
|
||||
|
@ -129,7 +129,7 @@ if have_system
|
||||
'test-vmstate': [migration, io],
|
||||
'test-yank': ['socket-helpers.c', qom, io, chardev]
|
||||
}
|
||||
if 'CONFIG_INOTIFY1' in config_host
|
||||
if config_host_data.get('CONFIG_INOTIFY1')
|
||||
tests += {'test-util-filemonitor': []}
|
||||
endif
|
||||
|
||||
|
@ -84,7 +84,10 @@ if have_block
|
||||
util_ss.add(files('readline.c'))
|
||||
util_ss.add(files('throttle.c'))
|
||||
util_ss.add(files('timed-average.c'))
|
||||
util_ss.add(when: 'CONFIG_INOTIFY1', if_true: files('filemonitor-inotify.c'),
|
||||
if_false: files('filemonitor-stub.c'))
|
||||
if config_host_data.get('CONFIG_INOTIFY1')
|
||||
util_ss.add(files('filemonitor-inotify.c'))
|
||||
else
|
||||
util_ss.add(files('filemonitor-stub.c'))
|
||||
endif
|
||||
util_ss.add(when: 'CONFIG_LINUX', if_true: files('vfio-helpers.c'))
|
||||
endif
|
||||
|
Loading…
Reference in New Issue
Block a user