meson: link emulators without Makefile.target

The binaries move to the root directory, e.g. qemu-system-i386 or
qemu-arm.  This requires changes to qtests, CI, etc.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Paolo Bonzini 2020-08-03 17:04:25 +02:00
parent f556b4a10d
commit 64ed6f92ff
32 changed files with 181 additions and 344 deletions

View File

@ -265,9 +265,9 @@ build-tci:
- make run-tcg-tests-x86_64-softmmu - make run-tcg-tests-x86_64-softmmu
- make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test
- for tg in $TARGETS ; do - for tg in $TARGETS ; do
export QTEST_QEMU_BINARY="${tg}-softmmu/qemu-system-${tg}" ; export QTEST_QEMU_BINARY="./qemu-system-${tg}" ;
./tests/qtest/boot-serial-test || exit 1 ; ./tests/qtest/boot-serial-test || exit 1 ;
./tests/qtest/cdrom-test || exit 1 ; ./tests/qtest/cdrom-test || exit 1 ;
done done
- QTEST_QEMU_BINARY="x86_64-softmmu/qemu-system-x86_64" ./tests/qtest/pxe-test - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test
- QTEST_QEMU_BINARY="s390x-softmmu/qemu-system-s390x" ./tests/qtest/pxe-test -m slow - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow

View File

@ -121,9 +121,6 @@ include $(SRC_PATH)/rules.mak
# lor is defined in rules.mak # lor is defined in rules.mak
CONFIG_BLOCK := $(call lor,$(CONFIG_SOFTMMU),$(CONFIG_TOOLS)) CONFIG_BLOCK := $(call lor,$(CONFIG_SOFTMMU),$(CONFIG_TOOLS))
generated-files-y += target/s390x/gen-features.h
target/s390x/gen-features.h: Makefile.ninja
generated-files-y += .git-submodule-status generated-files-y += .git-submodule-status
# Don't try to regenerate Makefile or configure # Don't try to regenerate Makefile or configure
@ -187,29 +184,6 @@ config-host.h-timestamp: config-host.mak
TARGET_DIRS_RULES := $(foreach t, all fuzz clean install, $(addsuffix /$(t), $(TARGET_DIRS))) TARGET_DIRS_RULES := $(foreach t, all fuzz clean install, $(addsuffix /$(t), $(TARGET_DIRS)))
SOFTMMU_ALL_RULES=$(filter %-softmmu/all, $(TARGET_DIRS_RULES))
$(SOFTMMU_ALL_RULES): $(authz-obj-y)
$(SOFTMMU_ALL_RULES): $(block-obj-y)
$(SOFTMMU_ALL_RULES): $(chardev-obj-y)
$(SOFTMMU_ALL_RULES): $(crypto-obj-y)
$(SOFTMMU_ALL_RULES): $(io-obj-y)
$(SOFTMMU_ALL_RULES): $(qom-obj-y)
$(SOFTMMU_ALL_RULES): config-all-devices.mak
SOFTMMU_FUZZ_RULES=$(filter %-softmmu/fuzz, $(TARGET_DIRS_RULES))
$(SOFTMMU_FUZZ_RULES): $(authz-obj-y)
$(SOFTMMU_FUZZ_RULES): $(block-obj-y)
$(SOFTMMU_FUZZ_RULES): $(chardev-obj-y)
$(SOFTMMU_FUZZ_RULES): $(crypto-obj-y)
$(SOFTMMU_FUZZ_RULES): $(io-obj-y)
$(SOFTMMU_FUZZ_RULES): config-all-devices.mak
$(SOFTMMU_FUZZ_RULES): $(edk2-decompressed)
# meson: this is sub-optimal but going away after conversion
TARGET_DEPS = $(patsubst %,%-config-target.h, $(TARGET_DIRS))
TARGET_DEPS += $(patsubst %,%-config-devices.h, $(filter %-softmmu,$(TARGET_DIRS)))
TARGET_DEPS += $(patsubst %,libqemu-%.fa, $(TARGET_DIRS))
.PHONY: $(TARGET_DIRS_RULES) .PHONY: $(TARGET_DIRS_RULES)
# The $(TARGET_DIRS_RULES) are of the form SUBDIR/GOAL, so that # The $(TARGET_DIRS_RULES) are of the form SUBDIR/GOAL, so that
# $(dir $@) yields the sub-directory, and $(notdir $@) yields the sub-goal # $(dir $@) yields the sub-directory, and $(notdir $@) yields the sub-goal
@ -252,11 +226,7 @@ slirp/all: .git-submodule-status
CC="$(CC)" AR="$(AR)" LD="$(LD)" RANLIB="$(RANLIB)" \ CC="$(CC)" AR="$(AR)" LD="$(LD)" RANLIB="$(RANLIB)" \
CFLAGS="$(QEMU_CFLAGS) $(CFLAGS)" LDFLAGS="$(QEMU_LDFLAGS)") CFLAGS="$(QEMU_CFLAGS) $(CFLAGS)" LDFLAGS="$(QEMU_LDFLAGS)")
$(filter %/all, $(TARGET_DIRS_RULES)): libqemuutil.a $(common-obj-y) \ $(filter %/all, $(TARGET_DIRS_RULES)):
$(qom-obj-y) block.syms qemu.syms
$(filter %/fuzz, $(TARGET_DIRS_RULES)): libqemuutil.a $(common-obj-y) \
$(qom-obj-y) $(crypto-user-obj-$(CONFIG_USER_ONLY))
ROM_DIRS = $(addprefix pc-bios/, $(ROMS)) ROM_DIRS = $(addprefix pc-bios/, $(ROMS))
ROM_DIRS_RULES=$(foreach t, all clean, $(addsuffix /$(t), $(ROM_DIRS))) ROM_DIRS_RULES=$(foreach t, all clean, $(addsuffix /$(t), $(ROM_DIRS)))
@ -278,8 +248,6 @@ Makefile: $(version-obj-y)
###################################################################### ######################################################################
COMMON_LDADDS = libqemuutil.a
clean: recurse-clean ninja-clean clean-ctlist clean: recurse-clean ninja-clean clean-ctlist
-test -f ninjatool && ./ninjatool $(if $(V),-v,) -t clean -test -f ninjatool && ./ninjatool $(if $(V),-v,) -t clean
# avoid old build problems by removing potentially incorrect old files # avoid old build problems by removing potentially incorrect old files
@ -313,6 +281,7 @@ distclean: clean ninja-distclean
rm -f po/*.mo tests/qemu-iotests/common.env rm -f po/*.mo tests/qemu-iotests/common.env
rm -f roms/seabios/config.mak roms/vgabios/config.mak rm -f roms/seabios/config.mak roms/vgabios/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 -rf meson-private meson-logs meson-info compile_commands.json rm -rf meson-private meson-logs meson-info compile_commands.json
rm -f Makefile.ninja ninjatool ninjatool.stamp Makefile.mtest rm -f Makefile.ninja ninjatool ninjatool.stamp Makefile.mtest
rm -f config.log rm -f config.log

View File

@ -33,38 +33,6 @@ io-obj-y = io/libio.fa
endif # CONFIG_SOFTMMU or CONFIG_TOOLS endif # CONFIG_SOFTMMU or CONFIG_TOOLS
######################################################################
# Target independent part of system emulation. The long term path is to
# suppress *all* target specific code in case of system emulation, i.e. a
# single QEMU executable should support all CPUs and machines.
ifeq ($(CONFIG_SOFTMMU),y)
common-obj-y =
common-obj-$(CONFIG_AUDIO_ALSA) += audio-alsa$(DSOSUF)
common-obj-$(CONFIG_AUDIO_OSS) += audio-oss$(DSOSUF)
common-obj-$(CONFIG_AUDIO_PA) += audio-pa$(DSOSUF)
common-obj-$(CONFIG_AUDIO_SDL) += audio-sdl$(DSOSUF)
common-obj-$(if $(CONFIG_CURSES),m) += ui-curses$(DSOSUF)
common-obj-$(if $(CONFIG_GTK),m) += ui-gtk$(DSOSUF)
common-obj-$(if $(CONFIG_SDL),m) += ui-sdl$(DSOSUF)
common-obj-$(if $(CONFIG_SPICE),m) += ui-spice-app$(DSOSUF)
common-obj-$(if $(CONFIG_CURL),m) += block-curl$(DSOSUF)
common-obj-$(if $(CONFIG_GLUSTERFS),m) += block-gluster$(DSOSUF)
common-obj-$(if $(CONFIG_LIBISCSI),m) += block-iscsi$(DSOSUF)
common-obj-$(if $(CONFIG_LIBNFS),m) += block-nfs$(DSOSUF)
common-obj-$(if $(CONFIG_LIBSSH),m) += block-ssh$(DSOSUF)
common-obj-$(if $(CONFIG_RBD),m) += block-rbd$(DSOSUF)
common-obj-$(if $(CONFIG_LZFSE),m) += block-dmg-lzfse$(DSOSUF)
common-obj-$(if $(and $(CONFIG_BZIP2),$(CONFIG_DMG)),m) += block-dmg-bz2$(DSOSUF)
common-obj-y += libqmp.fa
endif # CONFIG_SOFTMMU
###################################################################### ######################################################################
# Resource file for Windows executables # Resource file for Windows executables
version-obj-$(CONFIG_WIN32) += $(BUILD_DIR)/version.o version-obj-$(CONFIG_WIN32) += $(BUILD_DIR)/version.o

View File

@ -6,43 +6,16 @@ include ../config-host.mak
include config-target.mak include config-target.mak
include $(SRC_PATH)/rules.mak include $(SRC_PATH)/rules.mak
FULL_TARGET_NAME=$(TARGET_NAME)-$(if $(CONFIG_SOFTMMU),softmmu,linux-user)
ifdef CONFIG_SOFTMMU
include ../$(FULL_TARGET_NAME)-config-devices.mak
endif
$(call set-vpath, $(SRC_PATH):$(BUILD_DIR)) $(call set-vpath, $(SRC_PATH):$(BUILD_DIR))
ifdef CONFIG_LINUX
QEMU_CFLAGS += -isystem ../linux-headers
endif
QEMU_CFLAGS += -iquote .. -iquote $(SRC_PATH)/target/$(TARGET_BASE_ARCH) -DNEED_CPU_H
QEMU_CFLAGS+=-iquote $(SRC_PATH)/include
QEMU_CFLAGS += -DCONFIG_TARGET=\"../$(FULL_TARGET_NAME)-config-target.h\"
QEMU_CFLAGS += -DCONFIG_DEVICES=\"../$(FULL_TARGET_NAME)-config-devices.h\"
ifdef CONFIG_USER_ONLY ifdef CONFIG_USER_ONLY
# user emulator name # user emulator name
QEMU_PROG=qemu-$(TARGET_NAME) QEMU_PROG=qemu-$(TARGET_NAME)
QEMU_PROG_BUILD = $(QEMU_PROG)
else else
# system emulator name # system emulator name
QEMU_PROG=qemu-system-$(TARGET_NAME)$(EXESUF) QEMU_PROG=qemu-system-$(TARGET_NAME)$(EXESUF)
ifneq (,$(findstring -mwindows,$(SDL_LIBS)))
# Terminate program name with a 'w' because the linker builds a windows executable.
QEMU_PROGW=qemu-system-$(TARGET_NAME)w$(EXESUF)
$(QEMU_PROG): $(QEMU_PROGW)
$(call quiet-command,$(OBJCOPY) --subsystem console $(QEMU_PROGW) $(QEMU_PROG),"GEN","$(TARGET_DIR)$(QEMU_PROG)")
QEMU_PROG_BUILD = $(QEMU_PROGW)
else
QEMU_PROG_BUILD = $(QEMU_PROG)
endif
endif endif
LIBQEMU = ../libqemu-$(FULL_TARGET_NAME).fa
PROGS=$(QEMU_PROG) $(QEMU_PROGW)
STPFILES= STPFILES=
ifdef CONFIG_TRACE_SYSTEMTAP ifdef CONFIG_TRACE_SYSTEMTAP
@ -98,109 +71,10 @@ stap:
endif endif
.PHONY: stap .PHONY: stap
all: $(PROGS) stap all: stap
# Dummy command so that make thinks it has done something clean:
@true rm -f *.a *~
obj-y += $(LIBQEMU)
obj-y += trace/
#########################################################
LIBS := $(libs_cpu) $(LIBS)
#########################################################
# Linux user emulator target
ifdef CONFIG_LINUX_USER
QEMU_CFLAGS+=-I$(SRC_PATH)/linux-user/$(TARGET_ABI_DIR) \
-I$(SRC_PATH)/linux-user/host/$(ARCH) \
-I$(SRC_PATH)/linux-user \
-Ilinux-user/$(TARGET_ABI_DIR)
endif #CONFIG_LINUX_USER
#########################################################
# BSD user emulator target
ifdef CONFIG_BSD_USER
QEMU_CFLAGS+=-I$(SRC_PATH)/bsd-user -I$(SRC_PATH)/bsd-user/$(TARGET_ABI_DIR) \
-I$(SRC_PATH)/bsd-user/$(HOST_VARIANT_DIR)
endif #CONFIG_BSD_USER
#########################################################
# System emulator target
ifdef CONFIG_SOFTMMU
obj-y += softmmu/
obj-y += gdbstub.o
LIBS := $(libs_softmmu) $(LIBS)
# Temporary until emulators are linked by Meson
LIBS := $(LIBS) @../block.syms @../qemu.syms
ifneq ($(CONFIG_MODULES),y)
LIBS := $(LIBS) $(ALSA_LIBS) $(OSS_LIBS) $(PULSE_LIBS) $(SDL_LIBS)
LIBS := $(LIBS) $(GTK_LIBS) $(VTE_LIBS) $(X11_LIBS) $(CURSES_LIBS) $(ICONV_LIBS) $(GIO_LIBS)
endif
LIBS := $(LIBS) $(BRLAPI_LIBS) $(SDL_LIBS) $(SPICE_LIBS) $(OPENGL_LIBS) $(SECCOMP_LIBS)
LIBS := $(LIBS) $(COREAUDIO_LIBS) $(DSOUND_LIBS)
LIBS := $(LIBS) $(VDE_LIBS) $(SLIRP_LIBS)
LIBS := $(LIBS) $(LIBUSB_LIBS) $(SMARTCARD_LIBS) $(USB_REDIR_LIBS)
LIBS := $(LIBS) $(VIRGL_LIBS) $(CURSES_LIBS)
ifeq ($(CONFIG_PLUGIN),y)
ifdef CONFIG_HAS_LD_DYNAMIC_LIST
LIBS += -Wl,--dynamic-list=$(BUILD_DIR)/qemu-plugins-ld.symbols
else
ifdef CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST
LIBS += -Wl,-exported_symbols_list,$(BUILD_DIR)/qemu-plugins-ld64.symbols
endif
endif
endif
generated-files-y += hmp-commands.h hmp-commands-info.h
endif # CONFIG_SOFTMMU
dummy := $(call unnest-vars,,obj-y)
all-obj-y := $(obj-y)
include $(SRC_PATH)/Makefile.objs
dummy := $(call fix-paths,../,, \
authz-obj-y \
block-obj-y \
chardev-obj-y \
crypto-obj-y \
io-obj-y \
qom-obj-y)
dummy := $(call unnest-vars,..,common-obj-y)
all-obj-y += $(common-obj-y)
all-obj-y += $(qom-obj-y)
all-obj-$(CONFIG_SOFTMMU) += $(authz-obj-y)
all-obj-$(CONFIG_SOFTMMU) += $(block-obj-y) $(chardev-obj-y)
all-obj-$(CONFIG_SOFTMMU) += $(crypto-obj-y)
all-obj-$(CONFIG_SOFTMMU) += $(io-obj-y)
ifdef CONFIG_SOFTMMU
$(QEMU_PROG_BUILD): ../$(FULL_TARGET_NAME)-config-devices.mak
endif
COMMON_LDADDS = ../libqemuutil.a
# build either PROG or PROGW
$(QEMU_PROG_BUILD): $(all-obj-y) $(COMMON_LDADDS) $(softmmu-main-y)
$(call LINK, $(filter-out %.mak, $^))
ifdef CONFIG_DARWIN
$(call quiet-command,Rez -append $(SRC_PATH)/pc-bios/qemu.rsrc -o $@,"REZ","$(TARGET_DIR)$@")
$(call quiet-command,SetFile -a C $@,"SETFILE","$(TARGET_DIR)$@")
endif
clean: clean-target
rm -f *.a *~ $(PROGS)
rm -f $(shell find . -name '*.[od]') rm -f $(shell find . -name '*.[od]')
rm -f hmp-commands.h gdbstub-xml.c rm -f hmp-commands.h gdbstub-xml.c
rm -f trace/generated-helpers.c trace/generated-helpers.c-timestamp rm -f trace/generated-helpers.c trace/generated-helpers.c-timestamp
@ -208,26 +82,7 @@ ifdef CONFIG_TRACE_SYSTEMTAP
rm -f *.stp rm -f *.stp
endif endif
ifdef CONFIG_FUZZ
include $(SRC_PATH)/tests/qtest/fuzz/Makefile.include
include $(SRC_PATH)/tests/qtest/Makefile.include
fuzz: fuzz-vars
fuzz-vars: QEMU_CFLAGS := $(FUZZ_CFLAGS) $(QEMU_CFLAGS)
fuzz-vars: QEMU_LDFLAGS := $(FUZZ_LDFLAGS) $(QEMU_LDFLAGS)
fuzz-vars: $(QEMU_PROG_FUZZ)
dummy := $(call unnest-vars,, fuzz-obj-y)
$(QEMU_PROG_FUZZ): config-devices.mak $(all-obj-y) $(COMMON_LDADDS) $(fuzz-obj-y)
$(call LINK, $(filter-out %.mak, $^))
endif
install: all install: all
ifneq ($(PROGS),)
$(call install-prog,$(PROGS),$(DESTDIR)$(bindir))
endif
ifdef CONFIG_TRACE_SYSTEMTAP ifdef CONFIG_TRACE_SYSTEMTAP
$(INSTALL_DIR) "$(DESTDIR)$(qemu_datadir)/../systemtap/tapset" $(INSTALL_DIR) "$(DESTDIR)$(qemu_datadir)/../systemtap/tapset"
$(INSTALL_DATA) $(QEMU_PROG).stp-installed "$(DESTDIR)$(qemu_datadir)/../systemtap/tapset/$(QEMU_PROG).stp" $(INSTALL_DATA) $(QEMU_PROG).stp-installed "$(DESTDIR)$(qemu_datadir)/../systemtap/tapset/$(QEMU_PROG).stp"
@ -235,4 +90,4 @@ ifdef CONFIG_TRACE_SYSTEMTAP
$(INSTALL_DATA) $(QEMU_PROG)-log.stp "$(DESTDIR)$(qemu_datadir)/../systemtap/tapset/$(QEMU_PROG)-log.stp" $(INSTALL_DATA) $(QEMU_PROG)-log.stp "$(DESTDIR)$(qemu_datadir)/../systemtap/tapset/$(QEMU_PROG)-log.stp"
endif endif
Makefile: $(generated-files-y) .PHONY: all clean install

39
configure vendored
View File

@ -362,7 +362,6 @@ audio_drv_list=""
block_drv_rw_whitelist="" block_drv_rw_whitelist=""
block_drv_ro_whitelist="" block_drv_ro_whitelist=""
host_cc="cc" host_cc="cc"
libs_cpu=""
libs_softmmu="" libs_softmmu=""
libs_tools="" libs_tools=""
audio_win_int="" audio_win_int=""
@ -5477,7 +5476,6 @@ case "$capstone" in
else else
LIBCAPSTONE=libcapstone.a LIBCAPSTONE=libcapstone.a
fi fi
libs_cpu="-L$PWD/capstone -lcapstone $libs_cpu"
capstone_libs="-L$PWD/capstone -lcapstone" capstone_libs="-L$PWD/capstone -lcapstone"
capstone_cflags="-I${source_path}/capstone/include" capstone_cflags="-I${source_path}/capstone/include"
;; ;;
@ -5486,7 +5484,6 @@ case "$capstone" in
capstone_libs="$($pkg_config --libs capstone)" capstone_libs="$($pkg_config --libs capstone)"
capstone_cflags="$($pkg_config --cflags capstone)" capstone_cflags="$($pkg_config --cflags capstone)"
QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)" QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
libs_cpu="$($pkg_config --libs capstone) $libs_cpu"
;; ;;
no) no)
@ -6404,6 +6401,9 @@ if test "$fuzzing" = "yes" ; then
write_c_fuzzer_skeleton write_c_fuzzer_skeleton
if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then
have_fuzzer=yes have_fuzzer=yes
else
error_exit "Your compiler doesn't support -fsanitize=fuzzer"
exit 1
fi fi
fi fi
@ -6915,7 +6915,6 @@ echo "qemu_helperdir=$libexecdir" >> $config_host_mak
echo "qemu_localedir=$qemu_localedir" >> $config_host_mak echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
echo "qemu_icondir=$qemu_icondir" >> $config_host_mak echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
echo "libs_cpu=$libs_cpu" >> $config_host_mak
echo "libs_softmmu=$libs_softmmu" >> $config_host_mak echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
echo "GIT=$git" >> $config_host_mak echo "GIT=$git" >> $config_host_mak
echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
@ -7780,14 +7779,7 @@ if test "$have_mlockall" = "yes" ; then
echo "HAVE_MLOCKALL=y" >> $config_host_mak echo "HAVE_MLOCKALL=y" >> $config_host_mak
fi fi
if test "$fuzzing" = "yes" ; then if test "$fuzzing" = "yes" ; then
if test "$have_fuzzer" = "yes"; then
FUZZ_LDFLAGS=" -fsanitize=fuzzer"
FUZZ_CFLAGS=" -fsanitize=fuzzer"
QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link" QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link"
else
error_exit "Your compiler doesn't support -fsanitize=fuzzer"
exit 1
fi
fi fi
if test "$plugins" = "yes" ; then if test "$plugins" = "yes" ; then
@ -7902,8 +7894,6 @@ if test "$libudev" != "no"; then
fi fi
if test "$fuzzing" != "no"; then if test "$fuzzing" != "no"; then
echo "CONFIG_FUZZ=y" >> $config_host_mak echo "CONFIG_FUZZ=y" >> $config_host_mak
echo "FUZZ_CFLAGS=$FUZZ_CFLAGS" >> $config_host_mak
echo "FUZZ_LDFLAGS=$FUZZ_LDFLAGS" >> $config_host_mak
fi fi
if test "$edk2_blobs" = "yes" ; then if test "$edk2_blobs" = "yes" ; then
@ -8176,8 +8166,6 @@ if [ "$TARGET_SYSTBL_ABI" != "" ] && [ "$TARGET_SYSTBL" = "" ]; then
TARGET_SYSTBL=syscall.tbl TARGET_SYSTBL=syscall.tbl
fi fi
symlink "$source_path/Makefile.target" "$target_dir/Makefile"
upper() { upper() {
echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]' echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
} }
@ -8253,9 +8241,6 @@ fi
# generate QEMU_CFLAGS/QEMU_LDFLAGS for targets # generate QEMU_CFLAGS/QEMU_LDFLAGS for targets
cflags=""
ldflags=""
disas_config() { disas_config() {
echo "CONFIG_${1}_DIS=y" >> $config_target_mak echo "CONFIG_${1}_DIS=y" >> $config_target_mak
echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
@ -8340,24 +8325,6 @@ if test "$tcg_interpreter" = "yes" ; then
disas_config "TCI" disas_config "TCI"
fi fi
# Newer kernels on s390 check for an S390_PGSTE program header and
# enable the pgste page table extensions in that case. This makes
# the vm.allocate_pgste sysctl unnecessary. We enable this program
# header if
# - we build on s390x
# - we build the system emulation for s390x (qemu-system-s390x)
# - KVM is enabled
# - the linker supports --s390-pgste
if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
if ld_has --s390-pgste ; then
ldflags="-Wl,--s390-pgste $ldflags"
fi
fi
echo "QEMU_LDFLAGS+=$ldflags" >> $config_target_mak
echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
done # for target in $targets done # for target in $targets
echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak

View File

@ -62,7 +62,7 @@ A more realistic scenario is verifying the installation of a guest OS:
$ ./qemu-img create raw.img 16G $ ./qemu-img create raw.img 16G
$ ./qemu-img create -f qcow2 test.qcow2 16G $ ./qemu-img create -f qcow2 test.qcow2 16G
$ x86_64-softmmu/qemu-system-x86_64 -cdrom debian.iso \ $ ./qemu-system-x86_64 -cdrom debian.iso \
-drive file=blkverify:raw.img:test.qcow2 -drive file=blkverify:raw.img:test.qcow2
If the installation is aborted when blkverify detects corruption, use qemu-io If the installation is aborted when blkverify detects corruption, use qemu-io

View File

@ -819,7 +819,7 @@ the following approaches:
1) Set ``qemu_bin``, and use the given binary 1) Set ``qemu_bin``, and use the given binary
2) Do not set ``qemu_bin``, and use a QEMU binary named like 2) Do not set ``qemu_bin``, and use a QEMU binary named like
"${arch}-softmmu/qemu-system-${arch}", either in the current "qemu-system-${arch}", either in the current
working directory, or in the current source tree. working directory, or in the current source tree.
The resulting ``qemu_bin`` value will be preserved in the The resulting ``qemu_bin`` value will be preserved in the
@ -886,7 +886,7 @@ like the following:
.. code:: .. code::
PARAMS (key=qemu_bin, path=*, default=x86_64-softmmu/qemu-system-x86_64) => 'x86_64-softmmu/qemu-system-x86_64 PARAMS (key=qemu_bin, path=*, default=./qemu-system-x86_64) => './qemu-system-x86_64
arch arch
~~~~ ~~~~

View File

@ -129,7 +129,7 @@ To show some example invocations of command-line, we will use the
following invocation of QEMU, with a QMP server running over UNIX following invocation of QEMU, with a QMP server running over UNIX
socket:: socket::
$ ./x86_64-softmmu/qemu-system-x86_64 -display none -no-user-config \ $ ./qemu-system-x86_64 -display none -no-user-config \
-M q35 -nodefaults -m 512 \ -M q35 -nodefaults -m 512 \
-blockdev node-name=node-A,driver=qcow2,file.driver=file,file.node-name=file,file.filename=./a.qcow2 \ -blockdev node-name=node-A,driver=qcow2,file.driver=file,file.node-name=file,file.filename=./a.qcow2 \
-device virtio-blk,drive=node-A,id=virtio0 \ -device virtio-blk,drive=node-A,id=virtio0 \
@ -694,7 +694,7 @@ instance, with the following invocation. (As noted earlier, for
simplicity's sake, the destination QEMU is started on the same host, but simplicity's sake, the destination QEMU is started on the same host, but
it could be located elsewhere):: it could be located elsewhere)::
$ ./x86_64-softmmu/qemu-system-x86_64 -display none -no-user-config \ $ ./qemu-system-x86_64 -display none -no-user-config \
-M q35 -nodefaults -m 512 \ -M q35 -nodefaults -m 512 \
-blockdev node-name=node-TargetDisk,driver=qcow2,file.driver=file,file.node-name=file,file.filename=./target-disk.qcow2 \ -blockdev node-name=node-TargetDisk,driver=qcow2,file.driver=file,file.node-name=file,file.filename=./target-disk.qcow2 \
-device virtio-blk,drive=node-TargetDisk,id=virtio0 \ -device virtio-blk,drive=node-TargetDisk,id=virtio0 \

View File

@ -215,10 +215,12 @@ brlapi = not_found
if 'CONFIG_BRLAPI' in config_host if 'CONFIG_BRLAPI' in config_host
brlapi = declare_dependency(link_args: config_host['BRLAPI_LIBS'].split()) brlapi = declare_dependency(link_args: config_host['BRLAPI_LIBS'].split())
endif endif
sdlwindows = false
sdl = not_found sdl = not_found
if 'CONFIG_SDL' in config_host if 'CONFIG_SDL' in config_host
sdl = declare_dependency(compile_args: config_host['SDL_CFLAGS'].split(), sdl = declare_dependency(compile_args: config_host['SDL_CFLAGS'].split(),
link_args: config_host['SDL_LIBS'].split()) link_args: config_host['SDL_LIBS'].split())
sdlwindows = config_host['SDL_LIBS'].contains('-mwindows')
endif endif
rbd = not_found rbd = not_found
if 'CONFIG_RBD' in config_host if 'CONFIG_RBD' in config_host
@ -529,6 +531,7 @@ user_ss = ss.source_set()
bsd_user_ss = ss.source_set() bsd_user_ss = ss.source_set()
linux_user_ss = ss.source_set() linux_user_ss = ss.source_set()
specific_ss = ss.source_set() specific_ss = ss.source_set()
specific_fuzz_ss = ss.source_set()
modules = {} modules = {}
hw_arch = {} hw_arch = {}
@ -743,6 +746,7 @@ specific_ss.add_all(when: 'CONFIG_LINUX_USER', if_true: linux_user_ss)
# needed for fuzzing binaries # needed for fuzzing binaries
subdir('tests/qtest/libqos') subdir('tests/qtest/libqos')
subdir('tests/qtest/fuzz')
block_mods = [] block_mods = []
softmmu_mods = [] softmmu_mods = []
@ -805,7 +809,10 @@ foreach m : block_mods + softmmu_mods
install_dir: config_host['qemu_moddir']) install_dir: config_host['qemu_moddir'])
endforeach endforeach
common_ss.add_all(when: 'CONFIG_SOFTMMU', if_true: softmmu_ss) softmmu_ss.add(authz, block, chardev, crypto, io, qmp)
common_ss.add(qom, qemuutil)
common_ss.add_all(when: 'CONFIG_SOFTMMU', if_true: [softmmu_ss])
common_ss.add_all(when: 'CONFIG_USER_ONLY', if_true: user_ss) common_ss.add_all(when: 'CONFIG_USER_ONLY', if_true: user_ss)
common_all = common_ss.apply(config_all, strict: false) common_all = common_ss.apply(config_all, strict: false)
@ -817,11 +824,17 @@ common_all = static_library('common',
feature_to_c = find_program('scripts/feature_to_c.sh') feature_to_c = find_program('scripts/feature_to_c.sh')
emulators = []
foreach target : target_dirs foreach target : target_dirs
config_target = config_target_mak[target] config_target = config_target_mak[target]
target_name = config_target['TARGET_NAME'] target_name = config_target['TARGET_NAME']
arch = config_target['TARGET_BASE_ARCH'] arch = config_target['TARGET_BASE_ARCH']
arch_srcs = [] arch_srcs = []
arch_deps = []
c_args = ['-DNEED_CPU_H',
'-DCONFIG_TARGET="@0@-config-target.h"'.format(target),
'-DCONFIG_DEVICES="@0@-config-devices.h"'.format(target)]
link_args = []
target_inc = [include_directories('target' / config_target['TARGET_BASE_ARCH'])] target_inc = [include_directories('target' / config_target['TARGET_BASE_ARCH'])]
if targetos == 'linux' if targetos == 'linux'
@ -832,12 +845,15 @@ foreach target : target_dirs
target_type='system' target_type='system'
t = target_softmmu_arch[arch].apply(config_target, strict: false) t = target_softmmu_arch[arch].apply(config_target, strict: false)
arch_srcs += t.sources() arch_srcs += t.sources()
arch_deps += t.dependencies()
hw_dir = target_name == 'sparc64' ? 'sparc64' : arch hw_dir = target_name == 'sparc64' ? 'sparc64' : arch
hw = hw_arch[hw_dir].apply(config_target, strict: false) hw = hw_arch[hw_dir].apply(config_target, strict: false)
arch_srcs += hw.sources() arch_srcs += hw.sources()
arch_deps += hw.dependencies()
arch_srcs += config_devices_h[target] arch_srcs += config_devices_h[target]
link_args += ['@block.syms', '@qemu.syms']
else else
abi = config_target['TARGET_ABI_DIR'] abi = config_target['TARGET_ABI_DIR']
target_type='user' target_type='user'
@ -874,9 +890,11 @@ foreach target : target_dirs
t = target_arch[arch].apply(config_target, strict: false) t = target_arch[arch].apply(config_target, strict: false)
arch_srcs += t.sources() arch_srcs += t.sources()
arch_deps += t.dependencies()
target_common = common_ss.apply(config_target, strict: false) target_common = common_ss.apply(config_target, strict: false)
objects = common_all.extract_objects(target_common.sources()) objects = common_all.extract_objects(target_common.sources())
deps = target_common.dependencies()
# TODO: Change to generator once obj-y goes away # TODO: Change to generator once obj-y goes away
config_target_h = custom_target(target + '-config-target.h', config_target_h = custom_target(target + '-config-target.h',
@ -887,15 +905,60 @@ foreach target : target_dirs
target_specific = specific_ss.apply(config_target, strict: false) target_specific = specific_ss.apply(config_target, strict: false)
arch_srcs += target_specific.sources() arch_srcs += target_specific.sources()
arch_deps += target_specific.dependencies()
static_library('qemu-' + target, lib = static_library('qemu-' + target,
sources: arch_srcs + [config_target_h] + genh, sources: arch_srcs + [config_target_h] + genh,
objects: objects, objects: objects,
include_directories: target_inc, include_directories: target_inc,
c_args: ['-DNEED_CPU_H', c_args: c_args,
'-DCONFIG_TARGET="@0@-config-target.h"'.format(target), build_by_default: false,
'-DCONFIG_DEVICES="@0@-config-devices.h"'.format(target)],
name_suffix: 'fa') name_suffix: 'fa')
if target.endswith('-softmmu')
execs = [{
'name': 'qemu-system-' + target_name,
'gui': false,
'sources': files('softmmu/main.c'),
'dependencies': []
}]
if sdlwindows
execs += [{
'name': 'qemu-system-' + target_name + 'w',
'gui': true,
'sources': files('softmmu/main.c'),
'dependencies': []
}]
endif
if config_host.has_key('CONFIG_FUZZ')
specific_fuzz = specific_fuzz_ss.apply(config_target, strict: false)
execs += [{
'name': 'qemu-fuzz-' + target_name,
'gui': false,
'sources': specific_fuzz.sources(),
'dependencies': specific_fuzz.dependencies(),
'link_depends': [files('tests/qtest/fuzz/fork_fuzz.ld')],
}]
endif
else
execs = [{
'name': 'qemu-' + target_name,
'gui': false,
'sources': [],
'dependencies': []
}]
endif
foreach exe: execs
emulators += executable(exe['name'], exe['sources'],
install: true,
c_args: c_args,
dependencies: arch_deps + deps + exe['dependencies'],
objects: lib.extract_all_objects(recursive: true),
link_language: link_language,
link_depends: [block_syms, qemu_syms] + exe.get('link_depends', []),
link_args: link_args,
gui_app: exe['gui'])
endforeach
endforeach endforeach
# Other build targets # Other build targets

View File

@ -82,7 +82,7 @@ void os_setup_signal_handling(void)
/* /*
* Find a likely location for support files using the location of the binary. * Find a likely location for support files using the location of the binary.
* When running from the build tree this will be "$bindir/../pc-bios". * When running from the build tree this will be "$bindir/pc-bios".
* Otherwise, this is CONFIG_QEMU_DATADIR. * Otherwise, this is CONFIG_QEMU_DATADIR.
* *
* The caller must use g_free() to free the returned data when it is * The caller must use g_free() to free the returned data when it is
@ -96,7 +96,7 @@ char *os_find_datadir(void)
exec_dir = qemu_get_exec_dir(); exec_dir = qemu_get_exec_dir();
g_return_val_if_fail(exec_dir != NULL, NULL); g_return_val_if_fail(exec_dir != NULL, NULL);
dir = g_build_filename(exec_dir, "..", "pc-bios", NULL); dir = g_build_filename(exec_dir, "pc-bios", NULL);
if (g_file_test(dir, G_FILE_TEST_IS_DIR)) { if (g_file_test(dir, G_FILE_TEST_IS_DIR)) {
return g_steal_pointer(&dir); return g_steal_pointer(&dir);
} }

View File

@ -1,5 +1,13 @@
if 'CONFIG_HAS_LD_DYNAMIC_LIST' in config_host
plugin_ldflags = ['-Wl,--dynamic-list=' + (meson.build_root() / 'qemu-plugins-ld.symbols')]
elif 'CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST' in config_host
plugin_ldflags = ['-Wl,-exported_symbols_list,' + (meson.build_root() / 'qemu-plugins-ld64.symbols')]
else
plugin_ldflags = []
endif
specific_ss.add(when: 'CONFIG_PLUGIN', if_true: [files( specific_ss.add(when: 'CONFIG_PLUGIN', if_true: [files(
'loader.c', 'loader.c',
'core.c', 'core.c',
'api.c', 'api.c',
)]) ), declare_dependency(link_args: plugin_ldflags)])

View File

@ -21,7 +21,6 @@ MAKEFLAGS += -rR
%.cpp: %.cpp:
%.m: %.m:
%.mak: %.mak:
clean-target:
# Flags for dependency generation # Flags for dependency generation
QEMU_DGFLAGS += -MMD -MP -MT $@ -MF $(@D)/$(*F).d QEMU_DGFLAGS += -MMD -MP -MT $@ -MF $(@D)/$(*F).d

View File

@ -383,7 +383,7 @@ def binariesToTest(args, testcase):
if args.qemu: if args.qemu:
r = args.qemu r = args.qemu
else: else:
r = glob.glob('./*-softmmu/qemu-system-*') r = glob.glob('./qemu-system-*')
return r return r

View File

@ -64,24 +64,26 @@ mkdir -p "$DEST_DIR/lib/" # Copy the shared libraries here
# Build once to get the list of dynamic lib paths, and copy them over # Build once to get the list of dynamic lib paths, and copy them over
../configure --disable-werror --cc="$CC" --cxx="$CXX" --enable-fuzzing \ ../configure --disable-werror --cc="$CC" --cxx="$CXX" --enable-fuzzing \
--prefix="$DEST_DIR" --bindir="$DEST_DIR" --datadir="$DEST_DIR/data/" \
--extra-cflags="$EXTRA_CFLAGS" --target-list="i386-softmmu" --extra-cflags="$EXTRA_CFLAGS" --target-list="i386-softmmu"
if ! make "-j$(nproc)" i386-softmmu/fuzz; then if ! make "-j$(nproc)" qemu-fuzz-i386; then
fatal "Build failed. Please specify a compiler with fuzzing support"\ fatal "Build failed. Please specify a compiler with fuzzing support"\
"using the \$CC and \$CXX environemnt variables"\ "using the \$CC and \$CXX environemnt variables"\
"\nFor example: CC=clang CXX=clang++ $0" "\nFor example: CC=clang CXX=clang++ $0"
fi fi
for i in $(ldd ./i386-softmmu/qemu-fuzz-i386 | cut -f3 -d' '); do for i in $(ldd ./qemu-fuzz-i386 | cut -f3 -d' '); do
cp "$i" "$DEST_DIR/lib/" cp "$i" "$DEST_DIR/lib/"
done done
rm ./i386-softmmu/qemu-fuzz-i386 rm qemu-fuzz-i386
# Build a second time to build the final binary with correct rpath # Build a second time to build the final binary with correct rpath
../configure --bindir="$DEST_DIR" --datadir="$DEST_DIR/data/" --disable-werror \ ../configure --disable-werror --cc="$CC" --cxx="$CXX" --enable-fuzzing \
--cc="$CC" --cxx="$CXX" --extra-cflags="$EXTRA_CFLAGS" \ --prefix="$DEST_DIR" --bindir="$DEST_DIR" --datadir="$DEST_DIR/data/" \
--extra-ldflags="-Wl,-rpath,'\$\$ORIGIN/lib'" --extra-cflags="$EXTRA_CFLAGS" --extra-ldflags="-Wl,-rpath,'\$\$ORIGIN/lib'" \
make "-j$(nproc)" i386-softmmu/fuzz --target-list="i386-softmmu"
make "-j$(nproc)" qemu-fuzz-i386 V=1
# Copy over the datadir # Copy over the datadir
cp -r ../pc-bios/ "$DEST_DIR/pc-bios" cp -r ../pc-bios/ "$DEST_DIR/pc-bios"
@ -90,9 +92,9 @@ cp -r ../pc-bios/ "$DEST_DIR/pc-bios"
# of available fuzz-targets. Copy over the qemu-fuzz-i386, naming it according # of available fuzz-targets. Copy over the qemu-fuzz-i386, naming it according
# to each available fuzz target (See 05509c8e6d fuzz: select fuzz target using # to each available fuzz target (See 05509c8e6d fuzz: select fuzz target using
# executable name) # executable name)
for target in $(./i386-softmmu/qemu-fuzz-i386 | awk '$1 ~ /\*/ {print $2}'); for target in $(./qemu-fuzz-i386 | awk '$1 ~ /\*/ {print $2}');
do do
cp ./i386-softmmu/qemu-fuzz-i386 "$DEST_DIR/qemu-fuzz-i386-target-$target" cp qemu-fuzz-i386 "$DEST_DIR/qemu-fuzz-i386-target-$target"
done done
echo "Done. The fuzzers are located in $DEST_DIR" echo "Done. The fuzzers are located in $DEST_DIR"

View File

@ -1,2 +0,0 @@
softmmu-main-y = softmmu/main.o
main.o-cflags := $(SDL_CFLAGS)

View File

@ -45,5 +45,18 @@ s390x_softmmu_ss.add(files(
'sigp.c', 'sigp.c',
)) ))
# Newer kernels on s390 check for an S390_PGSTE program header and
# enable the pgste page table extensions in that case. This makes
# the vm.allocate_pgste sysctl unnecessary. We enable this program
# header if
# - we build on s390x
# - we build the system emulation for s390x (qemu-system-s390x)
# - KVM is enabled
# - the linker supports --s390-pgste
if host_machine.cpu_family() == 's390x' and cc.has_link_argument('-Wl,--s390-pgste')
s390x_softmmu_ss.add(when: 'CONFIG_KVM',
if_true: declare_dependency(link_args: ['-Wl,--s390-pgste']))
endif
target_arch += {'s390x': s390x_ss} target_arch += {'s390x': s390x_ss}
target_softmmu_arch += {'s390x': s390x_softmmu_ss} target_softmmu_arch += {'s390x': s390x_softmmu_ss}

View File

@ -457,7 +457,7 @@ build-tcg-tests-%: $(if $(CONFIG_PLUGIN),plugins)
V="$(V)" TARGET="$*" guest-tests, \ V="$(V)" TARGET="$*" guest-tests, \
"BUILD", "TCG tests for $*") "BUILD", "TCG tests for $*")
run-tcg-tests-%: build-tcg-tests-% %/all run-tcg-tests-%: build-tcg-tests-% all
$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) \ $(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) \
-f $(SRC_PATH)/tests/tcg/Makefile.qemu \ -f $(SRC_PATH)/tests/tcg/Makefile.qemu \
SRC_PATH=$(SRC_PATH) SPEED="$(SPEED)" \ SRC_PATH=$(SRC_PATH) SPEED="$(SPEED)" \
@ -485,7 +485,7 @@ QEMU_IOTESTS_HELPERS-$(call land,$(CONFIG_SOFTMMU),$(CONFIG_LINUX)) = tests/qemu
.PHONY: check-tests/check-block.sh .PHONY: check-tests/check-block.sh
check-tests/check-block.sh: tests/check-block.sh qemu-img$(EXESUF) \ check-tests/check-block.sh: tests/check-block.sh qemu-img$(EXESUF) \
qemu-io$(EXESUF) qemu-nbd$(EXESUF) $(QEMU_IOTESTS_HELPERS-y) \ qemu-io$(EXESUF) qemu-nbd$(EXESUF) $(QEMU_IOTESTS_HELPERS-y) \
$(patsubst %,%/all,$(filter %-softmmu,$(TARGET_DIRS))) $(patsubst %-softmmu,qemu-system-%,$(filter %-softmmu,$(TARGET_DIRS)))
@$< @$<
# Python venv for running tests # Python venv for running tests

View File

@ -57,8 +57,7 @@ def pick_default_qemu_bin(arch=None):
# qemu binary path does not match arch for powerpc, handle it # qemu binary path does not match arch for powerpc, handle it
if 'ppc64le' in arch: if 'ppc64le' in arch:
arch = 'ppc64' arch = 'ppc64'
qemu_bin_relative_path = os.path.join("%s-softmmu" % arch, qemu_bin_relative_path = "./qemu-system-%s" % arch
"qemu-system-%s" % arch)
if is_readable_executable_file(qemu_bin_relative_path): if is_readable_executable_file(qemu_bin_relative_path):
return qemu_bin_relative_path return qemu_bin_relative_path

View File

@ -12,7 +12,7 @@
# This work is licensed under the terms of the GNU GPLv2. # This work is licensed under the terms of the GNU GPLv2.
# See the COPYING.LIB file in the top-level directory. # See the COPYING.LIB file in the top-level directory.
qemu_bins="x86_64-softmmu/qemu-system-x86_64 aarch64-softmmu/qemu-system-aarch64" qemu_bins="./qemu-system-x86_64 ./qemu-system-aarch64"
if [ ! -e "tests/qtest/bios-tables-test" ]; then if [ ! -e "tests/qtest/bios-tables-test" ]; then
echo "Test: bios-tables-test is required! Run make check before this script." echo "Test: bios-tables-test is required! Run make check before this script."

View File

@ -20,7 +20,7 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE. # THE SOFTWARE.
QEMU=${QEMU:-"../../x86_64-softmmu/qemu-system-x86_64"} QEMU=${QEMU:-"../../qemu-system-x86_64"}
run_qemu() { run_qemu() {
local kernel=$1 local kernel=$1

View File

@ -577,11 +577,11 @@ if [ -z "$QEMU_PROG" ]
then then
if [ -x "$build_iotests/qemu" ]; then if [ -x "$build_iotests/qemu" ]; then
export QEMU_PROG="$build_iotests/qemu" export QEMU_PROG="$build_iotests/qemu"
elif [ -x "$build_root/${qemu_arch}-softmmu/qemu-system-${qemu_arch}" ]; then elif [ -x "$build_root/qemu-system-${qemu_arch}" ]; then
export QEMU_PROG="$build_root/${qemu_arch}-softmmu/qemu-system-${qemu_arch}" export QEMU_PROG="$build_root/qemu-system-${qemu_arch}"
else else
pushd "$build_root" > /dev/null pushd "$build_root" > /dev/null
for binary in *-softmmu/qemu-system-* for binary in qemu-system-*
do do
if [ -x "$binary" ] if [ -x "$binary" ]
then then

View File

@ -1,39 +0,0 @@
QEMU_PROG_FUZZ=qemu-fuzz-$(TARGET_NAME)$(EXESUF)
fuzz-obj-y += tests/qtest/libqtest.o
fuzz-obj-y += $(libqos-obj-y)
fuzz-obj-y += tests/qtest/fuzz/fuzz.o # Fuzzer skeleton
fuzz-obj-y += tests/qtest/fuzz/fork_fuzz.o
fuzz-obj-y += tests/qtest/fuzz/qos_fuzz.o
fuzz-obj-y += tests/qtest/fuzz/qtest_wrappers.o
# Targets
fuzz-obj-$(CONFIG_PCI_I440FX) += tests/qtest/fuzz/i440fx_fuzz.o
fuzz-obj-$(CONFIG_VIRTIO_NET) += tests/qtest/fuzz/virtio_net_fuzz.o
fuzz-obj-$(CONFIG_SCSI) += tests/qtest/fuzz/virtio_scsi_fuzz.o
FUZZ_CFLAGS += -I$(SRC_PATH)/tests -I$(SRC_PATH)/tests/qtest
# Linker Script to force coverage-counters into known regions which we can mark
# shared
FUZZ_LDFLAGS += -Xlinker -T$(SRC_PATH)/tests/qtest/fuzz/fork_fuzz.ld
FUZZ_LDFLAGS += -Wl,-wrap,qtest_inb
FUZZ_LDFLAGS += -Wl,-wrap,qtest_inw
FUZZ_LDFLAGS += -Wl,-wrap,qtest_inl
FUZZ_LDFLAGS += -Wl,-wrap,qtest_outb
FUZZ_LDFLAGS += -Wl,-wrap,qtest_outw
FUZZ_LDFLAGS += -Wl,-wrap,qtest_outl
FUZZ_LDFLAGS += -Wl,-wrap,qtest_readb
FUZZ_LDFLAGS += -Wl,-wrap,qtest_readw
FUZZ_LDFLAGS += -Wl,-wrap,qtest_readl
FUZZ_LDFLAGS += -Wl,-wrap,qtest_readq
FUZZ_LDFLAGS += -Wl,-wrap,qtest_writeb
FUZZ_LDFLAGS += -Wl,-wrap,qtest_writew
FUZZ_LDFLAGS += -Wl,-wrap,qtest_writel
FUZZ_LDFLAGS += -Wl,-wrap,qtest_writeq
FUZZ_LDFLAGS += -Wl,-wrap,qtest_memread
FUZZ_LDFLAGS += -Wl,-wrap,qtest_bufread
FUZZ_LDFLAGS += -Wl,-wrap,qtest_memwrite
FUZZ_LDFLAGS += -Wl,-wrap,qtest_bufwrite
FUZZ_LDFLAGS += -Wl,-wrap,qtest_memset

View File

@ -17,8 +17,8 @@
#include "tests/qtest/libqos/pci.h" #include "tests/qtest/libqos/pci.h"
#include "tests/qtest/libqos/pci-pc.h" #include "tests/qtest/libqos/pci-pc.h"
#include "fuzz.h" #include "fuzz.h"
#include "fuzz/qos_fuzz.h" #include "qos_fuzz.h"
#include "fuzz/fork_fuzz.h" #include "fork_fuzz.h"
#define I440FX_PCI_HOST_BRIDGE_CFG 0xcf8 #define I440FX_PCI_HOST_BRIDGE_CFG 0xcf8

View File

@ -0,0 +1,35 @@
specific_fuzz_ss.add(files('fuzz.c', 'fork_fuzz.c', 'qos_fuzz.c',
'qtest_wrappers.c'), qos)
# Targets
specific_fuzz_ss.add(when: 'CONFIG_I440FX', if_true: files('i440fx_fuzz.c'))
specific_fuzz_ss.add(when: 'CONFIG_VIRTIO_NET', if_true: files('virtio_net_fuzz.c'))
specific_fuzz_ss.add(when: 'CONFIG_VIRTIO_SCSI', if_true: files('virtio_scsi_fuzz.c'))
# unfortunately declare_dependency does not support link_depends, so
# this will be duplicated in meson.build
fork_fuzz = declare_dependency(
link_args: ['-fsanitize=fuzzer',
'-Wl,-T,' + (meson.current_source_dir() / 'fork_fuzz.ld'),
'-Wl,-wrap,qtest_inb',
'-Wl,-wrap,qtest_inw',
'-Wl,-wrap,qtest_inl',
'-Wl,-wrap,qtest_outb',
'-Wl,-wrap,qtest_outw',
'-Wl,-wrap,qtest_outl',
'-Wl,-wrap,qtest_readb',
'-Wl,-wrap,qtest_readw',
'-Wl,-wrap,qtest_readl',
'-Wl,-wrap,qtest_readq',
'-Wl,-wrap,qtest_writeb',
'-Wl,-wrap,qtest_writew',
'-Wl,-wrap,qtest_writel',
'-Wl,-wrap,qtest_writeq',
'-Wl,-wrap,qtest_memread',
'-Wl,-wrap,qtest_bufread',
'-Wl,-wrap,qtest_memwrite',
'-Wl,-wrap,qtest_bufwrite',
'-Wl,-wrap,qtest_memset']
)
specific_fuzz_ss.add(fork_fuzz)

View File

@ -12,7 +12,7 @@
*/ */
#include "qemu/osdep.h" #include "qemu/osdep.h"
#include "cpu.h" #include "hw/core/cpu.h"
#include "exec/ioport.h" #include "exec/ioport.h"
#include "fuzz.h" #include "fuzz.h"

View File

@ -61,7 +61,8 @@ static void virtio_net_fuzz_multi(QTestState *s,
* backend. Otherwise, always place the input on a virtqueue. * backend. Otherwise, always place the input on a virtqueue.
*/ */
if (vqa.rx && sockfds_initialized) { if (vqa.rx && sockfds_initialized) {
write(sockfds[0], Data, vqa.length); int ignored = write(sockfds[0], Data, vqa.length);
(void) ignored;
} else { } else {
vqa.rx = 0; vqa.rx = 0;
uint64_t req_addr = guest_alloc(t_alloc, vqa.length); uint64_t req_addr = guest_alloc(t_alloc, vqa.length);

View File

@ -12,10 +12,10 @@
#include "qemu/osdep.h" #include "qemu/osdep.h"
#include "tests/qtest/libqtest.h" #include "tests/qtest/libqos/libqtest.h"
#include "libqos/virtio-scsi.h" #include "tests/qtest/libqos/virtio-scsi.h"
#include "libqos/virtio.h" #include "tests/qtest/libqos/virtio.h"
#include "libqos/virtio-pci.h" #include "tests/qtest/libqos/virtio-pci.h"
#include "standard-headers/linux/virtio_ids.h" #include "standard-headers/linux/virtio_ids.h"
#include "standard-headers/linux/virtio_pci.h" #include "standard-headers/linux/virtio_pci.h"
#include "standard-headers/linux/virtio_scsi.h" #include "standard-headers/linux/virtio_scsi.h"

View File

@ -226,7 +226,7 @@ typedef void *(*QOSBeforeTest) (GString *cmd_line, void *arg);
* my_test <--consumed_by-- my_interface <--produces--+ * my_test <--consumed_by-- my_interface <--produces--+
* *
* Assuming there the binary is * Assuming there the binary is
* QTEST_QEMU_BINARY=x86_64-softmmu/qemu-system-x86_64 * QTEST_QEMU_BINARY=./qemu-system-x86_64
* a valid test path will be: * a valid test path will be:
* "/x86_64/pc/other_node/my_driver/my_interface/my_test". * "/x86_64/pc/other_node/my_driver/my_interface/my_test".
* *

View File

@ -234,7 +234,7 @@ foreach dir : target_dirs
qtest_env = environment() qtest_env = environment()
qtest_env.set('QTEST_QEMU_IMG', './qemu-img') qtest_env.set('QTEST_QEMU_IMG', './qemu-img')
qtest_env.set('G_TEST_DBUS_DAEMON', meson.source_root() / 'tests/dbus-vmstate-daemon.sh') qtest_env.set('G_TEST_DBUS_DAEMON', meson.source_root() / 'tests/dbus-vmstate-daemon.sh')
qtest_env.set('QTEST_QEMU_BINARY', '@0@-softmmu/qemu-system-@0@'.format(target_base)) qtest_env.set('QTEST_QEMU_BINARY', './qemu-system-' + target_base)
foreach test : qtests foreach test : qtests
# Executables are shared across targets, declare them only the first time we # Executables are shared across targets, declare them only the first time we

View File

@ -31,7 +31,7 @@ int main(int argc, char *argv[])
g_test_init(&argc, &argv, NULL); g_test_init(&argc, &argv, NULL);
if (strcmp(arch, "ppc64")) { if (strcmp(arch, "ppc64")) {
g_printerr("RTAS requires ppc64-softmmu/qemu-system-ppc64\n"); g_printerr("RTAS requires qemu-system-ppc64\n");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
qtest_add_func("rtas/get-time-of-day", test_rtas_get_time_of_day); qtest_add_func("rtas/get-time-of-day", test_rtas_get_time_of_day);

View File

@ -193,11 +193,11 @@ for target in $target_list; do
case $target in case $target in
*-linux-user | *-bsd-user) *-linux-user | *-bsd-user)
echo "CONFIG_USER_ONLY=y" >> $config_target_mak echo "CONFIG_USER_ONLY=y" >> $config_target_mak
echo "QEMU=\$(BUILD_DIR)/$target/qemu-$arch" >> $config_target_mak echo "QEMU=\$(BUILD_DIR)/qemu-$arch" >> $config_target_mak
;; ;;
*-softmmu) *-softmmu)
echo "CONFIG_SOFTMMU=y" >> $config_target_mak echo "CONFIG_SOFTMMU=y" >> $config_target_mak
echo "QEMU=\$(BUILD_DIR)/$target/qemu-system-$arch" >> $config_target_mak echo "QEMU=\$(BUILD_DIR)/qemu-system-$arch" >> $config_target_mak
;; ;;
esac esac

View File

@ -205,7 +205,6 @@ bool module_load_one(const char *prefix, const char *lib_name)
dirs[n_dirs++] = g_strdup_printf("%s", search_dir); dirs[n_dirs++] = g_strdup_printf("%s", search_dir);
} }
dirs[n_dirs++] = g_strdup_printf("%s", CONFIG_QEMU_MODDIR); dirs[n_dirs++] = g_strdup_printf("%s", CONFIG_QEMU_MODDIR);
dirs[n_dirs++] = g_strdup_printf("%s/..", exec_dir ? : "");
dirs[n_dirs++] = g_strdup_printf("%s", exec_dir ? : ""); dirs[n_dirs++] = g_strdup_printf("%s", exec_dir ? : "");
#ifdef CONFIG_MODULE_UPGRADES #ifdef CONFIG_MODULE_UPGRADES