* 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
|
clean: recurse-clean
|
||||||
-$(quiet-@)test -f build.ninja && $(NINJA) $(NINJAFLAGS) -t clean || :
|
-$(quiet-@)test -f build.ninja && $(NINJA) $(NINJAFLAGS) -t clean || :
|
||||||
-$(quiet-@)test -f build.ninja && $(NINJA) $(NINJAFLAGS) clean-ctlist || :
|
-$(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 \
|
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-aarch64.a \
|
||||||
! -path ./roms/edk2/ArmPkg/Library/GccLto/liblto-arm.a \
|
! -path ./roms/edk2/ArmPkg/Library/GccLto/liblto-arm.a \
|
||||||
-exec rm {} +
|
-exec rm {} +
|
||||||
rm -f TAGS cscope.* *.pod *~ */*~
|
rm -f TAGS cscope.* *~ */*~
|
||||||
rm -f fsdev/*.pod scsi/*.pod
|
|
||||||
|
|
||||||
VERSION = $(shell cat $(SRC_PATH)/VERSION)
|
VERSION = $(shell cat $(SRC_PATH)/VERSION)
|
||||||
|
|
||||||
@ -224,10 +221,10 @@ qemu-%.tar.bz2:
|
|||||||
|
|
||||||
distclean: clean
|
distclean: clean
|
||||||
-$(quiet-@)test -f build.ninja && $(NINJA) $(NINJAFLAGS) -t clean -g || :
|
-$(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 tests/tcg/config-*.mak
|
||||||
rm -f config-all-disas.mak config.status
|
rm -f config.status
|
||||||
rm -f roms/seabios/config.mak roms/vgabios/config.mak
|
rm -f roms/seabios/config.mak
|
||||||
rm -f qemu-plugins-ld.symbols qemu-plugins-ld64.symbols
|
rm -f qemu-plugins-ld.symbols qemu-plugins-ld64.symbols
|
||||||
rm -f *-config-target.h *-config-devices.mak *-config-devices.h
|
rm -f *-config-target.h *-config-devices.mak *-config-devices.h
|
||||||
rm -rf meson-private meson-logs meson-info compile_commands.json
|
rm -rf meson-private meson-logs meson-info compile_commands.json
|
||||||
|
@ -106,10 +106,6 @@
|
|||||||
#include <sys/diskslice.h>
|
#include <sys/diskslice.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_XFS
|
|
||||||
#include <xfs/xfs.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* OS X does not have O_DSYNC */
|
/* OS X does not have O_DSYNC */
|
||||||
#ifndef O_DSYNC
|
#ifndef O_DSYNC
|
||||||
#ifdef O_SYNC
|
#ifdef O_SYNC
|
||||||
@ -156,9 +152,6 @@ typedef struct BDRVRawState {
|
|||||||
int perm_change_flags;
|
int perm_change_flags;
|
||||||
BDRVReopenState *reopen_state;
|
BDRVReopenState *reopen_state;
|
||||||
|
|
||||||
#ifdef CONFIG_XFS
|
|
||||||
bool is_xfs:1;
|
|
||||||
#endif
|
|
||||||
bool has_discard:1;
|
bool has_discard:1;
|
||||||
bool has_write_zeroes:1;
|
bool has_write_zeroes:1;
|
||||||
bool discard_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) {
|
if (probe_logical_blocksize(fd, &bs->bl.request_alignment) < 0) {
|
||||||
bs->bl.request_alignment = 0;
|
bs->bl.request_alignment = 0;
|
||||||
}
|
}
|
||||||
#ifdef CONFIG_XFS
|
|
||||||
if (s->is_xfs) {
|
#ifdef __linux__
|
||||||
struct dioattr da;
|
/*
|
||||||
if (xfsctl(NULL, fd, XFS_IOC_DIOINFO, &da) >= 0) {
|
* The XFS ioctl definitions are shipped in extra packages that might
|
||||||
bs->bl.request_alignment = da.d_miniosz;
|
* not always be available. Since we just need the XFS_IOC_DIOINFO ioctl
|
||||||
/* The kernel returns wrong information for d_mem */
|
* here, we simply use our own definition instead:
|
||||||
/* s->buf_align = da.d_mem; */
|
*/
|
||||||
}
|
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
|
#endif
|
||||||
|
|
||||||
@ -798,12 +799,6 @@ static int raw_open_common(BlockDriverState *bs, QDict *options,
|
|||||||
#endif
|
#endif
|
||||||
s->needs_alignment = raw_needs_alignment(bs);
|
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;
|
bs->supported_zero_flags = BDRV_REQ_MAY_UNMAP | BDRV_REQ_NO_FALLBACK;
|
||||||
if (S_ISREG(st.st_mode)) {
|
if (S_ISREG(st.st_mode)) {
|
||||||
/* When extending regular files, we get zeros from the OS */
|
/* When extending regular files, we get zeros from the OS */
|
||||||
|
@ -4,7 +4,7 @@ endif
|
|||||||
|
|
||||||
bsd_user_ss = ss.source_set()
|
bsd_user_ss = ss.source_set()
|
||||||
|
|
||||||
common_user_inc += include_directories('.')
|
common_user_inc += include_directories('include')
|
||||||
|
|
||||||
bsd_user_ss.add(files(
|
bsd_user_ss.add(files(
|
||||||
'bsdload.c',
|
'bsdload.c',
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
common_user_inc += include_directories('host/' / host_arch)
|
common_user_inc += include_directories('host/' / host_arch)
|
||||||
|
|
||||||
common_user_ss.add(files(
|
user_ss.add(files(
|
||||||
'safe-syscall.S',
|
'safe-syscall.S',
|
||||||
'safe-syscall-error.c',
|
'safe-syscall-error.c',
|
||||||
))
|
))
|
||||||
|
189
configure
vendored
189
configure
vendored
@ -78,7 +78,6 @@ TMPC="${TMPDIR1}/${TMPB}.c"
|
|||||||
TMPO="${TMPDIR1}/${TMPB}.o"
|
TMPO="${TMPDIR1}/${TMPB}.o"
|
||||||
TMPCXX="${TMPDIR1}/${TMPB}.cxx"
|
TMPCXX="${TMPDIR1}/${TMPB}.cxx"
|
||||||
TMPE="${TMPDIR1}/${TMPB}.exe"
|
TMPE="${TMPDIR1}/${TMPB}.exe"
|
||||||
TMPTXT="${TMPDIR1}/${TMPB}.txt"
|
|
||||||
|
|
||||||
rm -f config.log
|
rm -f config.log
|
||||||
|
|
||||||
@ -291,7 +290,6 @@ EXTRA_CXXFLAGS=""
|
|||||||
EXTRA_LDFLAGS=""
|
EXTRA_LDFLAGS=""
|
||||||
|
|
||||||
xen_ctrl_version="$default_feature"
|
xen_ctrl_version="$default_feature"
|
||||||
xfs="$default_feature"
|
|
||||||
membarrier="$default_feature"
|
membarrier="$default_feature"
|
||||||
vhost_kernel="$default_feature"
|
vhost_kernel="$default_feature"
|
||||||
vhost_net="$default_feature"
|
vhost_net="$default_feature"
|
||||||
@ -309,21 +307,16 @@ debug="no"
|
|||||||
sanitizers="no"
|
sanitizers="no"
|
||||||
tsan="no"
|
tsan="no"
|
||||||
fortify_source="$default_feature"
|
fortify_source="$default_feature"
|
||||||
strip_opt="yes"
|
|
||||||
mingw32="no"
|
|
||||||
gcov="no"
|
gcov="no"
|
||||||
EXESUF=""
|
EXESUF=""
|
||||||
modules="no"
|
modules="no"
|
||||||
module_upgrades="no"
|
module_upgrades="no"
|
||||||
prefix="/usr/local"
|
prefix="/usr/local"
|
||||||
qemu_suffix="qemu"
|
qemu_suffix="qemu"
|
||||||
bsd="no"
|
|
||||||
linux="no"
|
|
||||||
solaris="no"
|
|
||||||
profiler="no"
|
profiler="no"
|
||||||
softmmu="yes"
|
softmmu="yes"
|
||||||
linux_user="no"
|
linux_user=""
|
||||||
bsd_user="no"
|
bsd_user=""
|
||||||
pkgversion=""
|
pkgversion=""
|
||||||
pie=""
|
pie=""
|
||||||
qom_cast_debug="yes"
|
qom_cast_debug="yes"
|
||||||
@ -333,8 +326,6 @@ opengl="$default_feature"
|
|||||||
cpuid_h="no"
|
cpuid_h="no"
|
||||||
avx2_opt="$default_feature"
|
avx2_opt="$default_feature"
|
||||||
guest_agent="$default_feature"
|
guest_agent="$default_feature"
|
||||||
guest_agent_with_vss="no"
|
|
||||||
guest_agent_ntddscsi="no"
|
|
||||||
vss_win32_sdk="$default_feature"
|
vss_win32_sdk="$default_feature"
|
||||||
win_sdk="no"
|
win_sdk="no"
|
||||||
want_tools="$default_feature"
|
want_tools="$default_feature"
|
||||||
@ -529,6 +520,10 @@ fi
|
|||||||
|
|
||||||
# OS specific
|
# OS specific
|
||||||
|
|
||||||
|
mingw32="no"
|
||||||
|
bsd="no"
|
||||||
|
linux="no"
|
||||||
|
solaris="no"
|
||||||
case $targetos in
|
case $targetos in
|
||||||
windows)
|
windows)
|
||||||
mingw32="yes"
|
mingw32="yes"
|
||||||
@ -540,7 +535,6 @@ gnu/kfreebsd)
|
|||||||
;;
|
;;
|
||||||
freebsd)
|
freebsd)
|
||||||
bsd="yes"
|
bsd="yes"
|
||||||
bsd_user="yes"
|
|
||||||
make="${MAKE-gmake}"
|
make="${MAKE-gmake}"
|
||||||
# needed for kinfo_getvmmap(3) in libutil.h
|
# needed for kinfo_getvmmap(3) in libutil.h
|
||||||
;;
|
;;
|
||||||
@ -585,7 +579,6 @@ haiku)
|
|||||||
;;
|
;;
|
||||||
linux)
|
linux)
|
||||||
linux="yes"
|
linux="yes"
|
||||||
linux_user="yes"
|
|
||||||
vhost_user=${default_feature:-yes}
|
vhost_user=${default_feature:-yes}
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@ -896,7 +889,6 @@ for opt do
|
|||||||
debug_tcg="yes"
|
debug_tcg="yes"
|
||||||
debug_mutex="yes"
|
debug_mutex="yes"
|
||||||
debug="yes"
|
debug="yes"
|
||||||
strip_opt="no"
|
|
||||||
fortify_source="no"
|
fortify_source="no"
|
||||||
;;
|
;;
|
||||||
--enable-sanitizers) sanitizers="yes"
|
--enable-sanitizers) sanitizers="yes"
|
||||||
@ -907,8 +899,6 @@ for opt do
|
|||||||
;;
|
;;
|
||||||
--disable-tsan) tsan="no"
|
--disable-tsan) tsan="no"
|
||||||
;;
|
;;
|
||||||
--disable-strip) strip_opt="no"
|
|
||||||
;;
|
|
||||||
--disable-slirp) slirp="disabled"
|
--disable-slirp) slirp="disabled"
|
||||||
;;
|
;;
|
||||||
--enable-slirp) slirp="enabled"
|
--enable-slirp) slirp="enabled"
|
||||||
@ -1021,10 +1011,6 @@ for opt do
|
|||||||
;;
|
;;
|
||||||
--enable-opengl) opengl="yes"
|
--enable-opengl) opengl="yes"
|
||||||
;;
|
;;
|
||||||
--disable-xfsctl) xfs="no"
|
|
||||||
;;
|
|
||||||
--enable-xfsctl) xfs="yes"
|
|
||||||
;;
|
|
||||||
--disable-zlib-test)
|
--disable-zlib-test)
|
||||||
;;
|
;;
|
||||||
--enable-guest-agent) guest_agent="yes"
|
--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}"
|
cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
|
||||||
fi
|
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=""
|
default_target_list=""
|
||||||
deprecated_targets_list=ppc64abi32-linux-user
|
deprecated_targets_list=ppc64abi32-linux-user
|
||||||
deprecated_features=""
|
deprecated_features=""
|
||||||
mak_wilds=""
|
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
|
if [ "$softmmu" = "yes" ]; then
|
||||||
mak_wilds="${mak_wilds} $source_path/configs/targets/*-softmmu.mak"
|
mak_wilds="${mak_wilds} $source_path/configs/targets/*-softmmu.mak"
|
||||||
fi
|
fi
|
||||||
@ -1367,7 +1361,6 @@ Advanced options (experts only):
|
|||||||
--enable-debug enable common debug build options
|
--enable-debug enable common debug build options
|
||||||
--enable-sanitizers enable default sanitizers
|
--enable-sanitizers enable default sanitizers
|
||||||
--enable-tsan enable thread sanitizer
|
--enable-tsan enable thread sanitizer
|
||||||
--disable-strip disable stripping binaries
|
|
||||||
--disable-werror disable compilation abort on warning
|
--disable-werror disable compilation abort on warning
|
||||||
--disable-stack-protector disable compiler-provided stack protection
|
--disable-stack-protector disable compiler-provided stack protection
|
||||||
--audio-drv-list=LIST set audio drivers to try if -audiodev is not used
|
--audio-drv-list=LIST set audio drivers to try if -audiodev is not used
|
||||||
@ -1431,7 +1424,6 @@ cat << EOF
|
|||||||
avx512f AVX512F optimization support
|
avx512f AVX512F optimization support
|
||||||
replication replication support
|
replication replication support
|
||||||
opengl opengl support
|
opengl opengl support
|
||||||
xfsctl xfsctl support
|
|
||||||
qom-cast-debug cast debugging support
|
qom-cast-debug cast debugging support
|
||||||
tools build qemu-io, qemu-nbd and qemu-img tools
|
tools build qemu-io, qemu-nbd and qemu-img tools
|
||||||
bochs bochs image format support
|
bochs bochs image format support
|
||||||
@ -1702,6 +1694,7 @@ if test "$static" = "yes" ; then
|
|||||||
plugins="no"
|
plugins="no"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
test "$plugins" = "" && plugins=yes
|
||||||
|
|
||||||
cat > $TMPC << EOF
|
cat > $TMPC << EOF
|
||||||
|
|
||||||
@ -2323,91 +2316,6 @@ EOF
|
|||||||
fi
|
fi
|
||||||
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
|
# glib support probe
|
||||||
|
|
||||||
@ -2639,6 +2547,7 @@ fi
|
|||||||
##########################################
|
##########################################
|
||||||
# check if we have VSS SDK headers for win
|
# check if we have VSS SDK headers for win
|
||||||
|
|
||||||
|
guest_agent_with_vss="no"
|
||||||
if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
|
if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
|
||||||
test "$vss_win32_sdk" != "no" ; then
|
test "$vss_win32_sdk" != "no" ; then
|
||||||
case "$vss_win32_sdk" in
|
case "$vss_win32_sdk" in
|
||||||
@ -2669,7 +2578,6 @@ EOF
|
|||||||
echo "ERROR: The headers are extracted in the directory \`inc'."
|
echo "ERROR: The headers are extracted in the directory \`inc'."
|
||||||
feature_not_found "VSS support"
|
feature_not_found "VSS support"
|
||||||
fi
|
fi
|
||||||
guest_agent_with_vss="no"
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -2696,6 +2604,7 @@ fi
|
|||||||
|
|
||||||
##########################################
|
##########################################
|
||||||
# check if mingw environment provides a recent ntddscsi.h
|
# check if mingw environment provides a recent ntddscsi.h
|
||||||
|
guest_agent_ntddscsi="no"
|
||||||
if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
|
if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
|
||||||
cat > $TMPC << EOF
|
cat > $TMPC << EOF
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
@ -3400,9 +3309,6 @@ echo "GIT_SUBMODULES_ACTION=$git_submodules_action" >> $config_host_mak
|
|||||||
if test "$debug_tcg" = "yes" ; then
|
if test "$debug_tcg" = "yes" ; then
|
||||||
echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
|
echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
|
||||||
fi
|
fi
|
||||||
if test "$strip_opt" = "yes" ; then
|
|
||||||
echo "STRIP=${strip}" >> $config_host_mak
|
|
||||||
fi
|
|
||||||
if test "$mingw32" = "yes" ; then
|
if test "$mingw32" = "yes" ; then
|
||||||
echo "CONFIG_WIN32=y" >> $config_host_mak
|
echo "CONFIG_WIN32=y" >> $config_host_mak
|
||||||
if test "$guest_agent_with_vss" = "yes" ; then
|
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
|
if test "$block_drv_whitelist_tools" = "yes" ; then
|
||||||
echo "CONFIG_BDRV_WHITELIST_TOOLS=y" >> $config_host_mak
|
echo "CONFIG_BDRV_WHITELIST_TOOLS=y" >> $config_host_mak
|
||||||
fi
|
fi
|
||||||
if test "$xfs" = "yes" ; then
|
|
||||||
echo "CONFIG_XFS=y" >> $config_host_mak
|
|
||||||
fi
|
|
||||||
qemu_version=$(head $source_path/VERSION)
|
qemu_version=$(head $source_path/VERSION)
|
||||||
echo "PKGVERSION=$pkgversion" >>$config_host_mak
|
echo "PKGVERSION=$pkgversion" >>$config_host_mak
|
||||||
echo "SRC_PATH=$source_path" >> $config_host_mak
|
echo "SRC_PATH=$source_path" >> $config_host_mak
|
||||||
@ -3645,22 +3548,6 @@ fi
|
|||||||
|
|
||||||
if test "$plugins" = "yes" ; then
|
if test "$plugins" = "yes" ; then
|
||||||
echo "CONFIG_PLUGIN=y" >> $config_host_mak
|
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
|
fi
|
||||||
|
|
||||||
if test -n "$gdb_bin"; then
|
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 "GLIB_VERSION=$(pkg-config --modversion glib-2.0)" >> $config_host_mak
|
||||||
echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
|
echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
|
||||||
echo "LD_I386_EMULATION=$ld_i386_emulation" >> $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 "EXESUF=$EXESUF" >> $config_host_mak
|
||||||
echo "LIBS_QGA=$libs_qga" >> $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
|
# 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
|
# tests might fail. Prefer to keep the relevant files in their own
|
||||||
# directory and symlink the directory instead.
|
# 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="Makefile"
|
||||||
LINKS="$LINKS tests/tcg/Makefile.target"
|
LINKS="$LINKS tests/tcg/Makefile.target"
|
||||||
LINKS="$LINKS pc-bios/optionrom/Makefile"
|
LINKS="$LINKS pc-bios/optionrom/Makefile"
|
||||||
@ -3790,7 +3675,6 @@ LINKS="$LINKS tests/avocado tests/data"
|
|||||||
LINKS="$LINKS tests/qemu-iotests/check"
|
LINKS="$LINKS tests/qemu-iotests/check"
|
||||||
LINKS="$LINKS python"
|
LINKS="$LINKS python"
|
||||||
LINKS="$LINKS contrib/plugins/Makefile "
|
LINKS="$LINKS contrib/plugins/Makefile "
|
||||||
UNLINK="pc-bios/keymaps"
|
|
||||||
for bios_file in \
|
for bios_file in \
|
||||||
$source_path/pc-bios/*.bin \
|
$source_path/pc-bios/*.bin \
|
||||||
$source_path/pc-bios/*.elf \
|
$source_path/pc-bios/*.elf \
|
||||||
@ -3812,11 +3696,6 @@ for f in $LINKS ; do
|
|||||||
symlink "$source_path/$f" "$f"
|
symlink "$source_path/$f" "$f"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
for f in $UNLINK ; do
|
|
||||||
if [ -L "$f" ]; then
|
|
||||||
rm -f "$f"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
(for i in $cross_cc_vars; do
|
(for i in $cross_cc_vars; do
|
||||||
export $i
|
export $i
|
||||||
@ -3825,7 +3704,8 @@ export target_list source_path use_containers cpu
|
|||||||
$source_path/tests/tcg/configure.sh)
|
$source_path/tests/tcg/configure.sh)
|
||||||
|
|
||||||
# temporary config to build submodules
|
# 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
|
config_mak=roms/$rom/config.mak
|
||||||
echo "# Automatically generated by configure - do not modify" > $config_mak
|
echo "# Automatically generated by configure - do not modify" > $config_mak
|
||||||
echo "SRC_PATH=$source_path/roms/$rom" >> $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 "IASL=$iasl" >> $config_mak
|
||||||
echo "LD=$ld" >> $config_mak
|
echo "LD=$ld" >> $config_mak
|
||||||
echo "RANLIB=$ranlib" >> $config_mak
|
echo "RANLIB=$ranlib" >> $config_mak
|
||||||
done
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
config_mak=pc-bios/optionrom/config.mak
|
config_mak=pc-bios/optionrom/config.mak
|
||||||
echo "# Automatically generated by configure - do not modify" > $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) \
|
-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) \
|
-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) \
|
-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_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_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
|
||||||
-Db_lto=$lto -Dcfi=$cfi -Dtcg=$tcg -Dxen=$xen \
|
-Db_lto=$lto -Dcfi=$cfi -Dtcg=$tcg -Dxen=$xen \
|
||||||
@ -3956,17 +3836,6 @@ if test -n "${deprecated_features}"; then
|
|||||||
echo " features: ${deprecated_features}"
|
echo " features: ${deprecated_features}"
|
||||||
fi
|
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.
|
# Save the configure command line for later reuse.
|
||||||
cat <<EOD >config.status
|
cat <<EOD >config.status
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
if curl.found()
|
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],
|
dependencies: [glib, curl],
|
||||||
install: true)
|
install: true)
|
||||||
endif
|
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,
|
dependencies: glib,
|
||||||
build_by_default: targetos == 'linux',
|
build_by_default: targetos == 'linux',
|
||||||
install: false)
|
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],
|
dependencies: [qemuutil, rt],
|
||||||
build_by_default: targetos == 'linux',
|
build_by_default: targetos == 'linux',
|
||||||
install: false)
|
install: false)
|
||||||
|
@ -2,7 +2,7 @@ if 'CONFIG_PVRDMA' in config_host
|
|||||||
# if not found, CONFIG_PVRDMA should not be set
|
# if not found, CONFIG_PVRDMA should not be set
|
||||||
# FIXME: broken on big endian architectures
|
# FIXME: broken on big endian architectures
|
||||||
libumad = cc.find_library('ibumad', required: true)
|
libumad = cc.find_library('ibumad', required: true)
|
||||||
executable('rdmacm-mux', files('main.c'),
|
executable('rdmacm-mux', files('main.c'), genh,
|
||||||
dependencies: [glib, libumad],
|
dependencies: [glib, libumad],
|
||||||
build_by_default: false,
|
build_by_default: false,
|
||||||
install: false)
|
install: false)
|
||||||
|
@ -4,8 +4,8 @@ endif
|
|||||||
|
|
||||||
linux_user_ss = ss.source_set()
|
linux_user_ss = ss.source_set()
|
||||||
|
|
||||||
common_user_inc += include_directories('host/' / host_arch)
|
common_user_inc += include_directories('include/host/' / host_arch)
|
||||||
common_user_inc += include_directories('.')
|
common_user_inc += include_directories('include')
|
||||||
|
|
||||||
linux_user_ss.add(files(
|
linux_user_ss.add(files(
|
||||||
'elfload.c',
|
'elfload.c',
|
||||||
|
37
meson.build
37
meson.build
@ -238,6 +238,7 @@ endif
|
|||||||
# Target-specific checks and dependencies #
|
# Target-specific checks and dependencies #
|
||||||
###########################################
|
###########################################
|
||||||
|
|
||||||
|
# Fuzzing
|
||||||
if get_option('fuzzing') and get_option('fuzzing_engine') == '' and \
|
if get_option('fuzzing') and get_option('fuzzing_engine') == '' and \
|
||||||
not cc.links('''
|
not cc.links('''
|
||||||
#include <stdint.h>
|
#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')
|
error('Your compiler does not support -fsanitize=fuzzer')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# Tracing backends
|
||||||
if 'ftrace' in get_option('trace_backends') and targetos != 'linux'
|
if 'ftrace' in get_option('trace_backends') and targetos != 'linux'
|
||||||
error('ftrace is supported only on Linux')
|
error('ftrace is supported only on Linux')
|
||||||
endif
|
endif
|
||||||
@ -262,6 +264,7 @@ if 'syslog' in get_option('trace_backends') and not cc.compiles('''
|
|||||||
error('syslog is not supported on this system')
|
error('syslog is not supported on this system')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# Miscellaneous Linux-only features
|
||||||
if targetos != 'linux' and get_option('mpath').enabled()
|
if targetos != 'linux' and get_option('mpath').enabled()
|
||||||
error('Multipath is supported only on Linux')
|
error('Multipath is supported only on Linux')
|
||||||
endif
|
endif
|
||||||
@ -271,6 +274,7 @@ if targetos != 'linux' and get_option('multiprocess').enabled()
|
|||||||
endif
|
endif
|
||||||
multiprocess_allowed = targetos == 'linux' and not get_option('multiprocess').disabled()
|
multiprocess_allowed = targetos == 'linux' and not get_option('multiprocess').disabled()
|
||||||
|
|
||||||
|
# Target-specific libraries and flags
|
||||||
libm = cc.find_library('m', required: false)
|
libm = cc.find_library('m', required: false)
|
||||||
threads = dependency('threads')
|
threads = dependency('threads')
|
||||||
util = cc.find_library('util', required: false)
|
util = cc.find_library('util', required: false)
|
||||||
@ -311,6 +315,7 @@ elif targetos == 'openbsd'
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# Target-specific configuration of accelerators
|
||||||
accelerators = []
|
accelerators = []
|
||||||
if not get_option('kvm').disabled() and targetos == 'linux'
|
if not get_option('kvm').disabled() and targetos == 'linux'
|
||||||
accelerators += 'CONFIG_KVM'
|
accelerators += 'CONFIG_KVM'
|
||||||
@ -2028,6 +2033,18 @@ config_all += {
|
|||||||
'CONFIG_ALL': true,
|
'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 #
|
# Submodules #
|
||||||
##############
|
##############
|
||||||
@ -2399,7 +2416,6 @@ blockdev_ss = ss.source_set()
|
|||||||
block_ss = ss.source_set()
|
block_ss = ss.source_set()
|
||||||
chardev_ss = ss.source_set()
|
chardev_ss = ss.source_set()
|
||||||
common_ss = ss.source_set()
|
common_ss = ss.source_set()
|
||||||
common_user_ss = ss.source_set()
|
|
||||||
crypto_ss = ss.source_set()
|
crypto_ss = ss.source_set()
|
||||||
hwcore_ss = ss.source_set()
|
hwcore_ss = ss.source_set()
|
||||||
io_ss = ss.source_set()
|
io_ss = ss.source_set()
|
||||||
@ -2651,17 +2667,6 @@ subdir('common-user')
|
|||||||
subdir('bsd-user')
|
subdir('bsd-user')
|
||||||
subdir('linux-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
|
# needed for fuzzing binaries
|
||||||
subdir('tests/qtest/libqos')
|
subdir('tests/qtest/libqos')
|
||||||
subdir('tests/qtest/fuzz')
|
subdir('tests/qtest/fuzz')
|
||||||
@ -2861,8 +2866,10 @@ common_ss.add(hwcore)
|
|||||||
# Targets #
|
# Targets #
|
||||||
###########
|
###########
|
||||||
|
|
||||||
|
emulator_modules = []
|
||||||
foreach m : block_mods + softmmu_mods
|
foreach m : block_mods + softmmu_mods
|
||||||
shared_module(m.name(),
|
emulator_modules += shared_module(m.name(),
|
||||||
|
build_by_default: true,
|
||||||
name_prefix: '',
|
name_prefix: '',
|
||||||
link_whole: m,
|
link_whole: m,
|
||||||
install: true,
|
install: true,
|
||||||
@ -2879,6 +2886,7 @@ common_all = common_ss.apply(config_all, strict: false)
|
|||||||
common_all = static_library('common',
|
common_all = static_library('common',
|
||||||
build_by_default: false,
|
build_by_default: false,
|
||||||
sources: common_all.sources() + genh,
|
sources: common_all.sources() + genh,
|
||||||
|
include_directories: common_user_inc,
|
||||||
implicit_include_directories: false,
|
implicit_include_directories: false,
|
||||||
dependencies: common_all.dependencies(),
|
dependencies: common_all.dependencies(),
|
||||||
name_suffix: 'fa')
|
name_suffix: 'fa')
|
||||||
@ -2919,6 +2927,7 @@ foreach target : target_dirs
|
|||||||
else
|
else
|
||||||
abi = config_target['TARGET_ABI_DIR']
|
abi = config_target['TARGET_ABI_DIR']
|
||||||
target_type='user'
|
target_type='user'
|
||||||
|
target_inc += common_user_inc
|
||||||
qemu_target_name = 'qemu-' + target_name
|
qemu_target_name = 'qemu-' + target_name
|
||||||
if target_base_arch in target_user_arch
|
if target_base_arch in target_user_arch
|
||||||
t = target_user_arch[target_base_arch].apply(config_target, strict: false)
|
t = target_user_arch[target_base_arch].apply(config_target, strict: false)
|
||||||
@ -2927,7 +2936,6 @@ foreach target : target_dirs
|
|||||||
endif
|
endif
|
||||||
if 'CONFIG_LINUX_USER' in config_target
|
if 'CONFIG_LINUX_USER' in config_target
|
||||||
base_dir = 'linux-user'
|
base_dir = 'linux-user'
|
||||||
target_inc += include_directories('linux-user/host/' / host_arch)
|
|
||||||
endif
|
endif
|
||||||
if 'CONFIG_BSD_USER' in config_target
|
if 'CONFIG_BSD_USER' in config_target
|
||||||
base_dir = 'bsd-user'
|
base_dir = 'bsd-user'
|
||||||
@ -3456,7 +3464,6 @@ if spice_protocol.found()
|
|||||||
summary_info += {' spice server support': spice}
|
summary_info += {' spice server support': spice}
|
||||||
endif
|
endif
|
||||||
summary_info += {'rbd support': rbd}
|
summary_info += {'rbd support': rbd}
|
||||||
summary_info += {'xfsctl support': config_host.has_key('CONFIG_XFS')}
|
|
||||||
summary_info += {'smartcard support': cacard}
|
summary_info += {'smartcard support': cacard}
|
||||||
summary_info += {'U2F support': u2f}
|
summary_info += {'U2F support': u2f}
|
||||||
summary_info += {'libusb': libusb}
|
summary_info += {'libusb': libusb}
|
||||||
|
@ -44,8 +44,6 @@ build-all: s390-ccw.img s390-netboot.img
|
|||||||
s390-ccw.elf: $(OBJECTS)
|
s390-ccw.elf: $(OBJECTS)
|
||||||
$(call quiet-command,$(CC) $(LDFLAGS) -o $@ $(OBJECTS),"BUILD","$(TARGET_DIR)$@")
|
$(call quiet-command,$(CC) $(LDFLAGS) -o $@ $(OBJECTS),"BUILD","$(TARGET_DIR)$@")
|
||||||
|
|
||||||
STRIP ?= strip
|
|
||||||
|
|
||||||
s390-ccw.img: s390-ccw.elf
|
s390-ccw.img: s390-ccw.elf
|
||||||
$(call quiet-command,$(STRIP) --strip-unneeded $< -o $@,"STRIP","$(TARGET_DIR)$@")
|
$(call quiet-command,$(STRIP) --strip-unneeded $< -o $@,"STRIP","$(TARGET_DIR)$@")
|
||||||
|
|
||||||
|
@ -1,10 +1,15 @@
|
|||||||
plugin_ldflags = []
|
plugin_ldflags = []
|
||||||
# Modules need more symbols than just those in plugins/qemu-plugins.symbols
|
# Modules need more symbols than just those in plugins/qemu-plugins.symbols
|
||||||
if not enable_modules
|
if not enable_modules
|
||||||
if 'CONFIG_HAS_LD_DYNAMIC_LIST' in config_host
|
if targetos == 'darwin'
|
||||||
plugin_ldflags = ['-Wl,--dynamic-list=qemu-plugins-ld.symbols']
|
qemu_plugins_symbols_list = configure_file(
|
||||||
elif 'CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST' in config_host
|
input: files('qemu-plugins.symbols'),
|
||||||
plugin_ldflags = ['-Wl,-exported_symbols_list,qemu-plugins-ld64.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
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -151,7 +151,6 @@
|
|||||||
--disable-whpx \
|
--disable-whpx \
|
||||||
--disable-xen \
|
--disable-xen \
|
||||||
--disable-xen-pci-passthrough \
|
--disable-xen-pci-passthrough \
|
||||||
--disable-xfsctl \
|
|
||||||
--disable-xkbcommon \
|
--disable-xkbcommon \
|
||||||
--disable-zstd \
|
--disable-zstd \
|
||||||
--enable-attr \
|
--enable-attr \
|
||||||
|
@ -398,7 +398,7 @@ echo "Configuring..."
|
|||||||
--enable-xen --enable-brlapi \
|
--enable-xen --enable-brlapi \
|
||||||
--enable-linux-aio --enable-attr \
|
--enable-linux-aio --enable-attr \
|
||||||
--enable-cap-ng --enable-trace-backends=log --enable-spice --enable-rbd \
|
--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-libiscsi --enable-libnfs --enable-seccomp \
|
||||||
--enable-tpm --enable-libssh --enable-lzo --enable-snappy --enable-bzip2 \
|
--enable-tpm --enable-libssh --enable-lzo --enable-snappy --enable-bzip2 \
|
||||||
--enable-numa --enable-rdma --enable-smartcard --enable-virglrenderer \
|
--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",
|
"trace_file",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BUILTIN_OPTIONS = {
|
||||||
|
"strip",
|
||||||
|
}
|
||||||
|
|
||||||
LINE_WIDTH = 76
|
LINE_WIDTH = 76
|
||||||
|
|
||||||
|
|
||||||
@ -90,14 +94,17 @@ def allow_arg(opt):
|
|||||||
return not (set(opt["choices"]) <= {"auto", "disabled", "enabled"})
|
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):
|
def load_options(json):
|
||||||
json = [
|
json = [x for x in json if filter_options(x)]
|
||||||
x
|
|
||||||
for x in json
|
|
||||||
if x["section"] == "user"
|
|
||||||
and ":" not in x["name"]
|
|
||||||
and x["name"] not in SKIP_OPTIONS
|
|
||||||
]
|
|
||||||
return sorted(json, key=lambda x: x["name"])
|
return sorted(json, key=lambda x: x["name"])
|
||||||
|
|
||||||
|
|
||||||
|
@ -13,6 +13,7 @@ meson_options_help() {
|
|||||||
printf "%s\n" ' jemalloc/system/tcmalloc)'
|
printf "%s\n" ' jemalloc/system/tcmalloc)'
|
||||||
printf "%s\n" ' --enable-slirp[=CHOICE] Whether and how to find the slirp library'
|
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" ' (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-tcg-interpreter TCG with bytecode interpreter (slow)'
|
||||||
printf "%s\n" ' --enable-trace-backends=CHOICE'
|
printf "%s\n" ' --enable-trace-backends=CHOICE'
|
||||||
printf "%s\n" ' Set available tracing backends [log] (choices:'
|
printf "%s\n" ' Set available tracing backends [log] (choices:'
|
||||||
@ -237,6 +238,8 @@ _meson_option_parse() {
|
|||||||
--disable-spice) printf "%s" -Dspice=disabled ;;
|
--disable-spice) printf "%s" -Dspice=disabled ;;
|
||||||
--enable-spice-protocol) printf "%s" -Dspice_protocol=enabled ;;
|
--enable-spice-protocol) printf "%s" -Dspice_protocol=enabled ;;
|
||||||
--disable-spice-protocol) printf "%s" -Dspice_protocol=disabled ;;
|
--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 ;;
|
--enable-tcg) printf "%s" -Dtcg=enabled ;;
|
||||||
--disable-tcg) printf "%s" -Dtcg=disabled ;;
|
--disable-tcg) printf "%s" -Dtcg=disabled ;;
|
||||||
--enable-tcg-interpreter) printf "%s" -Dtcg_interpreter=true ;;
|
--enable-tcg-interpreter) printf "%s" -Dtcg_interpreter=true ;;
|
||||||
|
@ -1455,6 +1455,9 @@ typedef struct CPUX86State {
|
|||||||
SegmentCache idt; /* only base and limit are used */
|
SegmentCache idt; /* only base and limit are used */
|
||||||
|
|
||||||
target_ulong cr[5]; /* NOTE: cr1 is unused */
|
target_ulong cr[5]; /* NOTE: cr1 is unused */
|
||||||
|
|
||||||
|
bool pdptrs_valid;
|
||||||
|
uint64_t pdptrs[4];
|
||||||
int32_t a20_mask;
|
int32_t a20_mask;
|
||||||
|
|
||||||
BNDReg bnd_regs[4];
|
BNDReg bnd_regs[4];
|
||||||
|
@ -124,6 +124,7 @@ static uint32_t num_architectural_pmu_fixed_counters;
|
|||||||
static int has_xsave;
|
static int has_xsave;
|
||||||
static int has_xcrs;
|
static int has_xcrs;
|
||||||
static int has_pit_state2;
|
static int has_pit_state2;
|
||||||
|
static int has_sregs2;
|
||||||
static int has_exception_payload;
|
static int has_exception_payload;
|
||||||
|
|
||||||
static bool has_msr_mcg_ext_ctl;
|
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_xsave = kvm_check_extension(s, KVM_CAP_XSAVE);
|
||||||
has_xcrs = kvm_check_extension(s, KVM_CAP_XCRS);
|
has_xcrs = kvm_check_extension(s, KVM_CAP_XCRS);
|
||||||
has_pit_state2 = kvm_check_extension(s, KVM_CAP_PIT_STATE2);
|
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);
|
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;
|
CPUX86State *env = &cpu->env;
|
||||||
struct kvm_sregs sregs;
|
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));
|
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)) {
|
if ((env->eflags & VM_MASK)) {
|
||||||
set_v8086_seg(&sregs.cs, &env->segs[R_CS]);
|
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);
|
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)
|
static void kvm_msr_buf_reset(X86CPU *cpu)
|
||||||
{
|
{
|
||||||
memset(cpu->kvm_msr_buf, 0, MSR_BUF_SIZE);
|
memset(cpu->kvm_msr_buf, 0, MSR_BUF_SIZE);
|
||||||
@ -3284,22 +3341,55 @@ static int kvm_get_sregs(X86CPU *cpu)
|
|||||||
{
|
{
|
||||||
CPUX86State *env = &cpu->env;
|
CPUX86State *env = &cpu->env;
|
||||||
struct kvm_sregs sregs;
|
struct kvm_sregs sregs;
|
||||||
int bit, i, ret;
|
int ret;
|
||||||
|
|
||||||
ret = kvm_vcpu_ioctl(CPU(cpu), KVM_GET_SREGS, &sregs);
|
ret = kvm_vcpu_ioctl(CPU(cpu), KVM_GET_SREGS, &sregs);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
return ret;
|
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). */
|
* The interrupt_bitmap is ignored because KVM_GET_SREGS is
|
||||||
env->interrupt_injected = -1;
|
* always preceded by KVM_GET_VCPU_EVENTS.
|
||||||
for (i = 0; i < ARRAY_SIZE(sregs.interrupt_bitmap); i++) {
|
*/
|
||||||
if (sregs.interrupt_bitmap[i]) {
|
|
||||||
bit = ctz64(sregs.interrupt_bitmap[i]);
|
get_seg(&env->segs[R_CS], &sregs.cs);
|
||||||
env->interrupt_injected = i * 64 + bit;
|
get_seg(&env->segs[R_DS], &sregs.ds);
|
||||||
break;
|
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);
|
get_seg(&env->segs[R_CS], &sregs.cs);
|
||||||
@ -3324,6 +3414,14 @@ static int kvm_get_sregs(X86CPU *cpu)
|
|||||||
|
|
||||||
env->efer = sregs.efer;
|
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 */
|
/* changes to apic base and cr8/tpr are read back via kvm_arch_post_run */
|
||||||
x86_update_hflags(env);
|
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));
|
assert(cpu_is_stopped(cpu) || qemu_cpu_is_self(cpu));
|
||||||
|
|
||||||
/* must be before kvm_put_nested_state so that EFER.SVME is set */
|
/* 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) {
|
if (ret < 0) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -4278,7 +4376,7 @@ int kvm_arch_get_registers(CPUState *cs)
|
|||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
ret = kvm_get_sregs(cpu);
|
ret = has_sregs2 ? kvm_get_sregs2(cpu) : kvm_get_sregs(cpu);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
@ -1451,6 +1451,34 @@ static const VMStateDescription vmstate_msr_intel_sgx = {
|
|||||||
.needed = intel_sgx_msrs_needed,
|
.needed = intel_sgx_msrs_needed,
|
||||||
.fields = (VMStateField[]) {
|
.fields = (VMStateField[]) {
|
||||||
VMSTATE_UINT64_ARRAY(env.msr_ia32_sgxlepubkeyhash, X86CPU, 4),
|
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()
|
VMSTATE_END_OF_LIST()
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -1593,6 +1621,7 @@ const VMStateDescription vmstate_x86_cpu = {
|
|||||||
#endif
|
#endif
|
||||||
&vmstate_msr_tsx_ctrl,
|
&vmstate_msr_tsx_ctrl,
|
||||||
&vmstate_msr_intel_sgx,
|
&vmstate_msr_intel_sgx,
|
||||||
|
&vmstate_pdptrs,
|
||||||
NULL
|
NULL
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -335,10 +335,9 @@ foreach dir : target_dirs
|
|||||||
test: executable(test, src, dependencies: deps)
|
test: executable(test, src, dependencies: deps)
|
||||||
}
|
}
|
||||||
endif
|
endif
|
||||||
# FIXME: missing dependency on the emulator binary and qemu-img
|
|
||||||
test('qtest-@0@/@1@'.format(target_base, test),
|
test('qtest-@0@/@1@'.format(target_base, test),
|
||||||
qtest_executables[test],
|
qtest_executables[test],
|
||||||
depends: [test_deps, qtest_emulator],
|
depends: [test_deps, qtest_emulator, emulator_modules],
|
||||||
env: qtest_env,
|
env: qtest_env,
|
||||||
args: ['--tap', '-k'],
|
args: ['--tap', '-k'],
|
||||||
protocol: 'tap',
|
protocol: 'tap',
|
||||||
|
@ -33,7 +33,7 @@ all:
|
|||||||
-include ../../../config-host.mak
|
-include ../../../config-host.mak
|
||||||
-include ../config-$(TARGET).mak
|
-include ../config-$(TARGET).mak
|
||||||
ifeq ($(CONFIG_USER_ONLY),y)
|
ifeq ($(CONFIG_USER_ONLY),y)
|
||||||
-include $(SRC_PATH)/default-configs/targets/$(TARGET).mak
|
-include $(SRC_PATH)/configs/targets/$(TARGET)/default.mak
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# for including , in command strings
|
# for including , in command strings
|
||||||
|
@ -129,7 +129,7 @@ if have_system
|
|||||||
'test-vmstate': [migration, io],
|
'test-vmstate': [migration, io],
|
||||||
'test-yank': ['socket-helpers.c', qom, io, chardev]
|
'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': []}
|
tests += {'test-util-filemonitor': []}
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -84,7 +84,10 @@ if have_block
|
|||||||
util_ss.add(files('readline.c'))
|
util_ss.add(files('readline.c'))
|
||||||
util_ss.add(files('throttle.c'))
|
util_ss.add(files('throttle.c'))
|
||||||
util_ss.add(files('timed-average.c'))
|
util_ss.add(files('timed-average.c'))
|
||||||
util_ss.add(when: 'CONFIG_INOTIFY1', if_true: files('filemonitor-inotify.c'),
|
if config_host_data.get('CONFIG_INOTIFY1')
|
||||||
if_false: files('filemonitor-stub.c'))
|
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'))
|
util_ss.add(when: 'CONFIG_LINUX', if_true: files('vfio-helpers.c'))
|
||||||
endif
|
endif
|
||||||
|
Loading…
Reference in New Issue
Block a user