* [PULL 01/14] tests/vm: do not specify -bios option
2022-06-24 8:27 [PULL 00/14] (Mostly) build system changes for 2022-06-24 Paolo Bonzini
@ 2022-06-24 8:27 ` Paolo Bonzini
2022-06-24 8:27 ` [PULL 02/14] pc-bios/optionrom: use -m16 unconditionally Paolo Bonzini
` (13 subsequent siblings)
14 siblings, 0 replies; 20+ messages in thread
From: Paolo Bonzini @ 2022-06-24 8:27 UTC (permalink / raw)
To: qemu-devel
When running from the build tree, the executable is able to find
the BIOS on its own; when running from the source tree, a firmware
blob should already be installed and there is no guarantee that
the one in the source tree works with the QEMU that is being used for
the installation.
Just remove the -bios option, since it is unnecessary and in fact
there are other x86 VM tests that do not bother specifying it.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
tests/vm/fedora | 1 -
tests/vm/freebsd | 1 -
tests/vm/netbsd | 1 -
tests/vm/openbsd | 1 -
4 files changed, 4 deletions(-)
diff --git a/tests/vm/fedora b/tests/vm/fedora
index 92b78d6e2c..12eca919a0 100755
--- a/tests/vm/fedora
+++ b/tests/vm/fedora
@@ -79,7 +79,6 @@ class FedoraVM(basevm.BaseVM):
self.exec_qemu_img("create", "-f", "qcow2", img_tmp, self.size)
self.print_step("Booting installer")
self.boot(img_tmp, extra_args = [
- "-bios", "pc-bios/bios-256k.bin",
"-machine", "graphics=off",
"-device", "VGA",
"-cdrom", iso
diff --git a/tests/vm/freebsd b/tests/vm/freebsd
index 805db759d6..cd1fabde52 100755
--- a/tests/vm/freebsd
+++ b/tests/vm/freebsd
@@ -95,7 +95,6 @@ class FreeBSDVM(basevm.BaseVM):
self.print_step("Booting installer")
self.boot(img_tmp, extra_args = [
- "-bios", "pc-bios/bios-256k.bin",
"-machine", "graphics=off",
"-device", "VGA",
"-cdrom", iso
diff --git a/tests/vm/netbsd b/tests/vm/netbsd
index 45aa9a7fda..aa883ec23c 100755
--- a/tests/vm/netbsd
+++ b/tests/vm/netbsd
@@ -86,7 +86,6 @@ class NetBSDVM(basevm.BaseVM):
self.print_step("Booting installer")
self.boot(img_tmp, extra_args = [
- "-bios", "pc-bios/bios-256k.bin",
"-machine", "graphics=off",
"-cdrom", iso
])
diff --git a/tests/vm/openbsd b/tests/vm/openbsd
index 13c8254214..6f1b6f5b98 100755
--- a/tests/vm/openbsd
+++ b/tests/vm/openbsd
@@ -82,7 +82,6 @@ class OpenBSDVM(basevm.BaseVM):
self.print_step("Booting installer")
self.boot(img_tmp, extra_args = [
- "-bios", "pc-bios/bios-256k.bin",
"-machine", "graphics=off",
"-device", "VGA",
"-cdrom", iso
--
2.36.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PULL 02/14] pc-bios/optionrom: use -m16 unconditionally
2022-06-24 8:27 [PULL 00/14] (Mostly) build system changes for 2022-06-24 Paolo Bonzini
2022-06-24 8:27 ` [PULL 01/14] tests/vm: do not specify -bios option Paolo Bonzini
@ 2022-06-24 8:27 ` Paolo Bonzini
2022-06-24 8:27 ` [PULL 03/14] configure, pc-bios/optionrom: pass cross CFLAGS correctly Paolo Bonzini
` (12 subsequent siblings)
14 siblings, 0 replies; 20+ messages in thread
From: Paolo Bonzini @ 2022-06-24 8:27 UTC (permalink / raw)
To: qemu-devel; +Cc: Richard Henderson
Remove support for .code16gcc, all supported platforms have -m16.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
pc-bios/optionrom/Makefile | 15 +--------------
pc-bios/optionrom/code16gcc.h | 3 ---
2 files changed, 1 insertion(+), 17 deletions(-)
delete mode 100644 pc-bios/optionrom/code16gcc.h
diff --git a/pc-bios/optionrom/Makefile b/pc-bios/optionrom/Makefile
index f639915b4f..ea89ce9d59 100644
--- a/pc-bios/optionrom/Makefile
+++ b/pc-bios/optionrom/Makefile
@@ -11,7 +11,7 @@ CFLAGS = -O2 -g
quiet-command = $(if $(V),$1,$(if $(2),@printf " %-7s %s\n" $2 $3 && $1, @$1))
cc-option = $(if $(shell $(CC) $1 -c -o /dev/null -xc /dev/null >/dev/null 2>&1 && echo OK), $1, $2)
-override CFLAGS += -march=i486 -Wall
+override CFLAGS += -march=i486 -Wall -m16
# If -fcf-protection is enabled in flags or compiler defaults that will
# conflict with -march=i486
@@ -24,21 +24,8 @@ override CFLAGS += $(filter -W%, $(QEMU_CFLAGS))
override CFLAGS += $(call cc-option, -fno-pie)
override CFLAGS += -ffreestanding -I$(TOPSRC_DIR)/include
override CFLAGS += $(call cc-option, -fno-stack-protector)
-override CFLAGS += $(call cc-option, -m16)
override CFLAGS += $(call cc-option, -Wno-array-bounds)
-ifeq ($(filter -m16, $(CFLAGS)),)
-# Attempt to work around compilers that lack -m16 (GCC <= 4.8, clang <= ??)
-# On GCC we add -fno-toplevel-reorder to keep the order of asm blocks with
-# respect to the rest of the code. clang does not have -fno-toplevel-reorder,
-# but it places all asm blocks at the beginning and we're relying on it for
-# the option ROM header. So just force clang not to use the integrated
-# assembler, which doesn't support .code16gcc.
-override CFLAGS += $(call cc-option, -fno-toplevel-reorder)
-override CFLAGS += $(call cc-option, -no-integrated-as)
-override CFLAGS += -m32 -include $(SRC_DIR)/code16gcc.h
-endif
-
Wa = -Wa,
override ASFLAGS += -32
override CFLAGS += $(call cc-option, $(Wa)-32)
diff --git a/pc-bios/optionrom/code16gcc.h b/pc-bios/optionrom/code16gcc.h
deleted file mode 100644
index 9c8d25d508..0000000000
--- a/pc-bios/optionrom/code16gcc.h
+++ /dev/null
@@ -1,3 +0,0 @@
-asm(
-".code16gcc\n"
-);
--
2.36.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PULL 03/14] configure, pc-bios/optionrom: pass cross CFLAGS correctly
2022-06-24 8:27 [PULL 00/14] (Mostly) build system changes for 2022-06-24 Paolo Bonzini
2022-06-24 8:27 ` [PULL 01/14] tests/vm: do not specify -bios option Paolo Bonzini
2022-06-24 8:27 ` [PULL 02/14] pc-bios/optionrom: use -m16 unconditionally Paolo Bonzini
@ 2022-06-24 8:27 ` Paolo Bonzini
2022-06-24 8:27 ` [PULL 04/14] configure, pc-bios/s390-ccw: " Paolo Bonzini
` (11 subsequent siblings)
14 siblings, 0 replies; 20+ messages in thread
From: Paolo Bonzini @ 2022-06-24 8:27 UTC (permalink / raw)
To: qemu-devel
The optionrom build is disregarding the flags passed to the configure
script via --cross-cflags-i386. Pass it down and add it to the Makefile.
This will make it possible to get the -m32 flag from $target_cflags to
force a 32-bit build on 64-bit hosts, instead of supplying manually the
arcane -Wa,-32 and linker emulation options.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 32 ++++++++++++++++++--------------
pc-bios/optionrom/Makefile | 2 +-
2 files changed, 19 insertions(+), 15 deletions(-)
diff --git a/configure b/configure
index 76728b31f7..3d00b361d7 100755
--- a/configure
+++ b/configure
@@ -2057,19 +2057,22 @@ probe_target_compiler() {
compute_target_variable $1 target_objcopy objcopy
compute_target_variable $1 target_ranlib ranlib
compute_target_variable $1 target_strip strip
- if test "$1" = $cpu; then
- : ${target_cc:=$cc}
- : ${target_ccas:=$ccas}
- : ${target_as:=$as}
- : ${target_ld:=$ld}
- : ${target_ar:=$ar}
- : ${target_as:=$as}
- : ${target_ld:=$ld}
- : ${target_nm:=$nm}
- : ${target_objcopy:=$objcopy}
- : ${target_ranlib:=$ranlib}
- : ${target_strip:=$strip}
- fi
+ case "$1:$cpu" in
+ i386:x86_64 | \
+ "$cpu:$cpu")
+ : ${target_cc:=$cc}
+ : ${target_ccas:=$ccas}
+ : ${target_as:=$as}
+ : ${target_ld:=$ld}
+ : ${target_ar:=$ar}
+ : ${target_as:=$as}
+ : ${target_ld:=$ld}
+ : ${target_nm:=$nm}
+ : ${target_objcopy:=$objcopy}
+ : ${target_ranlib:=$ranlib}
+ : ${target_strip:=$strip}
+ ;;
+ esac
if test -n "$target_cc"; then
case $1 in
i386|x86_64)
@@ -2238,7 +2241,7 @@ done
# Mac OS X ships with a broken assembler
roms=
-probe_target_compilers i386 x86_64
+probe_target_compiler i386
if test -n "$target_cc" &&
test "$targetos" != "darwin" && test "$targetos" != "sunos" && \
test "$targetos" != "haiku" && test "$softmmu" = yes ; then
@@ -2257,6 +2260,7 @@ if test -n "$target_cc" &&
echo "# Automatically generated by configure - do not modify" > $config_mak
echo "TOPSRC_DIR=$source_path" >> $config_mak
echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_mak
+ echo "EXTRA_CFLAGS=$target_cflags" >> $config_mak
write_target_makefile >> $config_mak
fi
fi
diff --git a/pc-bios/optionrom/Makefile b/pc-bios/optionrom/Makefile
index ea89ce9d59..e90ca2e1c6 100644
--- a/pc-bios/optionrom/Makefile
+++ b/pc-bios/optionrom/Makefile
@@ -11,7 +11,7 @@ CFLAGS = -O2 -g
quiet-command = $(if $(V),$1,$(if $(2),@printf " %-7s %s\n" $2 $3 && $1, @$1))
cc-option = $(if $(shell $(CC) $1 -c -o /dev/null -xc /dev/null >/dev/null 2>&1 && echo OK), $1, $2)
-override CFLAGS += -march=i486 -Wall -m16
+override CFLAGS += -march=i486 -Wall $(EXTRA_CFLAGS) -m16
# If -fcf-protection is enabled in flags or compiler defaults that will
# conflict with -march=i486
--
2.36.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PULL 04/14] configure, pc-bios/s390-ccw: pass cross CFLAGS correctly
2022-06-24 8:27 [PULL 00/14] (Mostly) build system changes for 2022-06-24 Paolo Bonzini
` (2 preceding siblings ...)
2022-06-24 8:27 ` [PULL 03/14] configure, pc-bios/optionrom: pass cross CFLAGS correctly Paolo Bonzini
@ 2022-06-24 8:27 ` Paolo Bonzini
2022-06-24 8:27 ` [PULL 05/14] configure, pc-bios/vof: " Paolo Bonzini
` (10 subsequent siblings)
14 siblings, 0 replies; 20+ messages in thread
From: Paolo Bonzini @ 2022-06-24 8:27 UTC (permalink / raw)
To: qemu-devel; +Cc: Thomas Huth
QEMU_CFLAGS is not available in pc-bios/s390-ccw/netboot.mak, but the Makefile
needs to access the flags passed to the configure script for the s390x
cross compiler. Fix everything and rename QEMU_CFLAGS to EXTRA_CFLAGS for
consistency with tests/tcg.
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 1 +
pc-bios/s390-ccw/Makefile | 20 ++++++++++----------
pc-bios/s390-ccw/netboot.mak | 6 +++---
3 files changed, 14 insertions(+), 13 deletions(-)
diff --git a/configure b/configure
index 3d00b361d7..bf9282e2a1 100755
--- a/configure
+++ b/configure
@@ -2290,6 +2290,7 @@ if test -n "$target_cc" && test "$softmmu" = yes; then
config_mak=pc-bios/s390-ccw/config-host.mak
echo "# Automatically generated by configure - do not modify" > $config_mak
echo "SRC_PATH=$source_path/pc-bios/s390-ccw" >> $config_mak
+ echo "EXTRA_CFLAGS=$target_cflags" >> $config_mak
write_target_makefile >> $config_mak
# SLOF is required for building the s390-ccw firmware on s390x,
# since it is using the libnet code from SLOF for network booting.
diff --git a/pc-bios/s390-ccw/Makefile b/pc-bios/s390-ccw/Makefile
index 6eb713bf37..26ad40f94e 100644
--- a/pc-bios/s390-ccw/Makefile
+++ b/pc-bios/s390-ccw/Makefile
@@ -18,11 +18,11 @@ $(call set-vpath, $(SRC_PATH))
QEMU_DGFLAGS = -MMD -MP -MT $@ -MF $(@D)/$(*F).d
%.o: %.c
- $(call quiet-command,$(CC) $(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) \
+ $(call quiet-command,$(CC) $(EXTRA_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) \
-c -o $@ $<,"CC","$(TARGET_DIR)$@")
%.o: %.S
- $(call quiet-command,$(CCAS) $(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) \
+ $(call quiet-command,$(CCAS) $(EXTRA_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) \
-c -o $@ $<,"CCAS","$(TARGET_DIR)$@")
.PHONY : all clean build-all
@@ -30,14 +30,14 @@ QEMU_DGFLAGS = -MMD -MP -MT $@ -MF $(@D)/$(*F).d
OBJECTS = start.o main.o bootmap.o jump2ipl.o sclp.o menu.o \
virtio.o virtio-scsi.o virtio-blkdev.o libc.o cio.o dasd-ipl.o
-QEMU_CFLAGS := -Wall $(filter -W%, $(QEMU_CFLAGS))
-QEMU_CFLAGS += $(call cc-option,-Werror $(QEMU_CFLAGS),-Wno-stringop-overflow)
-QEMU_CFLAGS += -ffreestanding -fno-delete-null-pointer-checks -fno-common -fPIE
-QEMU_CFLAGS += -fwrapv -fno-strict-aliasing -fno-asynchronous-unwind-tables
-QEMU_CFLAGS += $(call cc-option, $(QEMU_CFLAGS), -fno-stack-protector)
-QEMU_CFLAGS += -msoft-float
-QEMU_CFLAGS += $(call cc-option, $(QEMU_CFLAGS),-march=z900,-march=z10)
-QEMU_CFLAGS += -std=gnu99
+EXTRA_CFLAGS := $(EXTRA_CFLAGS) -Wall
+EXTRA_CFLAGS += $(call cc-option,-Werror $(EXTRA_CFLAGS),-Wno-stringop-overflow)
+EXTRA_CFLAGS += -ffreestanding -fno-delete-null-pointer-checks -fno-common -fPIE
+EXTRA_CFLAGS += -fwrapv -fno-strict-aliasing -fno-asynchronous-unwind-tables
+EXTRA_CFLAGS += $(call cc-option, $(EXTRA_CFLAGS), -fno-stack-protector)
+EXTRA_CFLAGS += -msoft-float
+EXTRA_CFLAGS += $(call cc-option, $(EXTRA_CFLAGS),-march=z900,-march=z10)
+EXTRA_CFLAGS += -std=gnu99
LDFLAGS += -Wl,-pie -nostdlib
build-all: s390-ccw.img s390-netboot.img
diff --git a/pc-bios/s390-ccw/netboot.mak b/pc-bios/s390-ccw/netboot.mak
index 1a06befa4b..ee59a5f4de 100644
--- a/pc-bios/s390-ccw/netboot.mak
+++ b/pc-bios/s390-ccw/netboot.mak
@@ -8,7 +8,7 @@ LIBNET_INC := -I$(SLOF_DIR)/lib/libnet
NETLDFLAGS := $(LDFLAGS) -Wl,-Ttext=0x7800000
-$(NETOBJS): QEMU_CFLAGS += $(LIBC_INC) $(LIBNET_INC)
+$(NETOBJS): EXTRA_CFLAGS += $(LIBC_INC) $(LIBNET_INC)
s390-netboot.elf: $(NETOBJS) libnet.a libc.a
$(call quiet-command,$(CC) $(NETLDFLAGS) -o $@ $^,"BUILD","$(TARGET_DIR)$@")
@@ -18,7 +18,7 @@ s390-netboot.img: s390-netboot.elf
# libc files:
-LIBC_CFLAGS = $(QEMU_CFLAGS) $(CFLAGS) $(LIBC_INC) $(LIBNET_INC) \
+LIBC_CFLAGS = $(EXTRA_CFLAGS) $(CFLAGS) $(LIBC_INC) $(LIBNET_INC) \
-MMD -MP -MT $@ -MF $(@:%.o=%.d)
CTYPE_OBJS = isdigit.o isxdigit.o toupper.o
@@ -52,7 +52,7 @@ libc.a: $(LIBCOBJS)
LIBNETOBJS := args.o dhcp.o dns.o icmpv6.o ipv6.o tcp.o udp.o bootp.o \
dhcpv6.o ethernet.o ipv4.o ndp.o tftp.o pxelinux.o
-LIBNETCFLAGS = $(QEMU_CFLAGS) $(CFLAGS) $(LIBC_INC) $(LIBNET_INC) \
+LIBNETCFLAGS = $(EXTRA_CFLAGS) $(CFLAGS) $(LIBC_INC) $(LIBNET_INC) \
-DDHCPARCH=0x1F -MMD -MP -MT $@ -MF $(@:%.o=%.d)
%.o : $(SLOF_DIR)/lib/libnet/%.c
--
2.36.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PULL 05/14] configure, pc-bios/vof: pass cross CFLAGS correctly
2022-06-24 8:27 [PULL 00/14] (Mostly) build system changes for 2022-06-24 Paolo Bonzini
` (3 preceding siblings ...)
2022-06-24 8:27 ` [PULL 04/14] configure, pc-bios/s390-ccw: " Paolo Bonzini
@ 2022-06-24 8:27 ` Paolo Bonzini
2022-06-24 8:27 ` [PULL 06/14] configure: allow more host/target combos to use the host compiler Paolo Bonzini
` (9 subsequent siblings)
14 siblings, 0 replies; 20+ messages in thread
From: Paolo Bonzini @ 2022-06-24 8:27 UTC (permalink / raw)
To: qemu-devel
Use the flags passed to the configure script for the ppc cross compiler,
which in fact default to those that are needed to get the 32-bit ISA.
Add the endianness flag so that it remains possible to use a ppc64le
compiler to compile VOF.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 13 ++++---------
pc-bios/vof/Makefile | 8 +++-----
2 files changed, 7 insertions(+), 14 deletions(-)
diff --git a/configure b/configure
index bf9282e2a1..8f3401a23e 100755
--- a/configure
+++ b/configure
@@ -1858,7 +1858,7 @@ fi
: ${cross_cc_hexagon="hexagon-unknown-linux-musl-clang"}
: ${cross_cc_cflags_hexagon="-mv67 -O2 -static"}
: ${cross_cc_cflags_i386="-m32"}
-: ${cross_cc_cflags_ppc="-m32"}
+: ${cross_cc_cflags_ppc="-m32 -mbig-endian"}
: ${cross_cc_cflags_ppc64="-m64 -mbig-endian"}
: ${cross_cc_ppc64le="$cross_cc_ppc64"}
: ${cross_cc_cflags_ppc64le="-m64 -mlittle-endian"}
@@ -2059,6 +2059,7 @@ probe_target_compiler() {
compute_target_variable $1 target_strip strip
case "$1:$cpu" in
i386:x86_64 | \
+ ppc*:ppc64 | \
"$cpu:$cpu")
: ${target_cc:=$cc}
: ${target_ccas:=$ccas}
@@ -2084,13 +2085,6 @@ probe_target_compiler() {
fi
}
-probe_target_compilers() {
- for i; do
- probe_target_compiler $i
- test -n "$target_cc" && return 0
- done
-}
-
write_target_makefile() {
if test -n "$target_cc"; then
echo "CC=$target_cc"
@@ -2265,12 +2259,13 @@ if test -n "$target_cc" &&
fi
fi
-probe_target_compilers ppc ppc64
+probe_target_compiler ppc
if test -n "$target_cc" && test "$softmmu" = yes; then
roms="$roms pc-bios/vof"
config_mak=pc-bios/vof/config.mak
echo "# Automatically generated by configure - do not modify" > $config_mak
echo "SRC_DIR=$source_path/pc-bios/vof" >> $config_mak
+ echo "EXTRA_CFLAGS=$target_cflags" >> $config_mak
write_target_makefile >> $config_mak
fi
diff --git a/pc-bios/vof/Makefile b/pc-bios/vof/Makefile
index 391ac0d600..8809c82768 100644
--- a/pc-bios/vof/Makefile
+++ b/pc-bios/vof/Makefile
@@ -2,15 +2,13 @@ include config.mak
VPATH=$(SRC_DIR)
all: vof.bin
-CC ?= $(CROSS)gcc
-LD ?= $(CROSS)ld
-OBJCOPY ?= $(CROSS)objcopy
+EXTRA_CFLAGS += -mcpu=power4
%.o: %.S
- $(CC) -m32 -mbig-endian -mcpu=power4 -c -o $@ $<
+ $(CC) $(EXTRA_CFLAGS) -c -o $@ $<
%.o: %.c
- $(CC) -m32 -mbig-endian -mcpu=power4 -c -fno-stack-protector -o $@ $<
+ $(CC) $(EXTRA_CFLAGS) -c -fno-stack-protector -o $@ $<
vof.elf: entry.o main.o ci.o bootmem.o libc.o
$(LD) -nostdlib -e_start -T$(SRC_DIR)/vof.lds -EB -o $@ $^
--
2.36.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PULL 06/14] configure: allow more host/target combos to use the host compiler
2022-06-24 8:27 [PULL 00/14] (Mostly) build system changes for 2022-06-24 Paolo Bonzini
` (4 preceding siblings ...)
2022-06-24 8:27 ` [PULL 05/14] configure, pc-bios/vof: " Paolo Bonzini
@ 2022-06-24 8:27 ` Paolo Bonzini
2022-06-24 8:27 ` [PULL 07/14] configure: write EXTRA_CFLAGS for all sub-Makefiles Paolo Bonzini
` (8 subsequent siblings)
14 siblings, 0 replies; 20+ messages in thread
From: Paolo Bonzini @ 2022-06-24 8:27 UTC (permalink / raw)
To: qemu-devel
Add more pairs of bi-arch compilers, so that it is not necessary to have
e.g. both little-endian and big-endian ARM compilers.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/configure b/configure
index 8f3401a23e..c9feb1a924 100755
--- a/configure
+++ b/configure
@@ -2058,8 +2058,12 @@ probe_target_compiler() {
compute_target_variable $1 target_ranlib ranlib
compute_target_variable $1 target_strip strip
case "$1:$cpu" in
+ aarch64_be:aarch64 | \
+ armeb:arm | \
i386:x86_64 | \
+ mips*:mips64 | \
ppc*:ppc64 | \
+ sparc:sparc64 | \
"$cpu:$cpu")
: ${target_cc:=$cc}
: ${target_ccas:=$ccas}
--
2.36.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PULL 07/14] configure: write EXTRA_CFLAGS for all sub-Makefiles
2022-06-24 8:27 [PULL 00/14] (Mostly) build system changes for 2022-06-24 Paolo Bonzini
` (5 preceding siblings ...)
2022-06-24 8:27 ` [PULL 06/14] configure: allow more host/target combos to use the host compiler Paolo Bonzini
@ 2022-06-24 8:27 ` Paolo Bonzini
2022-06-24 8:27 ` [PULL 08/14] tests/tcg: compile system emulation tests as freestanding Paolo Bonzini
` (7 subsequent siblings)
14 siblings, 0 replies; 20+ messages in thread
From: Paolo Bonzini @ 2022-06-24 8:27 UTC (permalink / raw)
To: qemu-devel
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/configure b/configure
index c9feb1a924..0fd2838e82 100755
--- a/configure
+++ b/configure
@@ -2090,6 +2090,7 @@ probe_target_compiler() {
}
write_target_makefile() {
+ echo "EXTRA_CFLAGS=$target_cflags"
if test -n "$target_cc"; then
echo "CC=$target_cc"
echo "CCAS=$target_ccas"
@@ -2118,6 +2119,7 @@ write_target_makefile() {
}
write_container_target_makefile() {
+ echo "EXTRA_CFLAGS=$target_cflags"
if test -n "$container_cross_cc"; then
echo "CC=\$(DOCKER_SCRIPT) cc --cc $container_cross_cc -i qemu/$container_image -s $source_path --"
echo "CCAS=\$(DOCKER_SCRIPT) cc --cc $container_cross_cc -i qemu/$container_image -s $source_path --"
@@ -2258,7 +2260,6 @@ if test -n "$target_cc" &&
echo "# Automatically generated by configure - do not modify" > $config_mak
echo "TOPSRC_DIR=$source_path" >> $config_mak
echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_mak
- echo "EXTRA_CFLAGS=$target_cflags" >> $config_mak
write_target_makefile >> $config_mak
fi
fi
@@ -2269,7 +2270,6 @@ if test -n "$target_cc" && test "$softmmu" = yes; then
config_mak=pc-bios/vof/config.mak
echo "# Automatically generated by configure - do not modify" > $config_mak
echo "SRC_DIR=$source_path/pc-bios/vof" >> $config_mak
- echo "EXTRA_CFLAGS=$target_cflags" >> $config_mak
write_target_makefile >> $config_mak
fi
@@ -2289,7 +2289,6 @@ if test -n "$target_cc" && test "$softmmu" = yes; then
config_mak=pc-bios/s390-ccw/config-host.mak
echo "# Automatically generated by configure - do not modify" > $config_mak
echo "SRC_PATH=$source_path/pc-bios/s390-ccw" >> $config_mak
- echo "EXTRA_CFLAGS=$target_cflags" >> $config_mak
write_target_makefile >> $config_mak
# SLOF is required for building the s390-ccw firmware on s390x,
# since it is using the libnet code from SLOF for network booting.
@@ -2604,7 +2603,6 @@ for target in $target_list; do
if test $got_cross_cc = yes; then
mkdir -p tests/tcg/$target
echo "QEMU=$PWD/$qemu" >> $config_target_mak
- echo "EXTRA_CFLAGS=$target_cflags" >> $config_target_mak
echo "run-tcg-tests-$target: $qemu\$(EXESUF)" >> $makefile
tcg_tests_targets="$tcg_tests_targets $target"
fi
--
2.36.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PULL 08/14] tests/tcg: compile system emulation tests as freestanding
2022-06-24 8:27 [PULL 00/14] (Mostly) build system changes for 2022-06-24 Paolo Bonzini
` (6 preceding siblings ...)
2022-06-24 8:27 ` [PULL 07/14] configure: write EXTRA_CFLAGS for all sub-Makefiles Paolo Bonzini
@ 2022-06-24 8:27 ` Paolo Bonzini
2022-06-24 8:27 ` [PULL 09/14] build: try both native and cross compilers for linux-user tests Paolo Bonzini
` (6 subsequent siblings)
14 siblings, 0 replies; 20+ messages in thread
From: Paolo Bonzini @ 2022-06-24 8:27 UTC (permalink / raw)
To: qemu-devel
System emulation tests do not run in a hosted environment, since they
do not link with libc. They should only use freestanding headers
(float.h, limits.h, stdarg.h, stddef.h, stdbool.h, stdint.h,
stdalign.h, stdnoreturn.h) and should be compiled with -ffreestanding
in order to use the compiler implementation of those headers
rather than the one in libc.
Some tests are using inttypes.h instead of stdint.h, so fix that.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
tests/tcg/Makefile.target | 1 +
tests/tcg/aarch64/system/pauth-3.c | 2 +-
tests/tcg/aarch64/system/semiconsole.c | 2 +-
tests/tcg/aarch64/system/semiheap.c | 2 +-
tests/tcg/multiarch/system/memory.c | 2 +-
5 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/tests/tcg/Makefile.target b/tests/tcg/Makefile.target
index f427a0304e..e68830af15 100644
--- a/tests/tcg/Makefile.target
+++ b/tests/tcg/Makefile.target
@@ -111,6 +111,7 @@ else
# For softmmu targets we include a different Makefile fragement as the
# build options for bare programs are usually pretty different. They
# are expected to provide their own build recipes.
+EXTRA_CFLAGS += -ffreestanding
-include $(SRC_PATH)/tests/tcg/minilib/Makefile.target
-include $(SRC_PATH)/tests/tcg/multiarch/system/Makefile.softmmu-target
-include $(SRC_PATH)/tests/tcg/$(TARGET_NAME)/Makefile.softmmu-target
diff --git a/tests/tcg/aarch64/system/pauth-3.c b/tests/tcg/aarch64/system/pauth-3.c
index 42eff4d5ea..77a467277b 100644
--- a/tests/tcg/aarch64/system/pauth-3.c
+++ b/tests/tcg/aarch64/system/pauth-3.c
@@ -1,4 +1,4 @@
-#include <inttypes.h>
+#include <stdint.h>
#include <minilib.h>
int main()
diff --git a/tests/tcg/aarch64/system/semiconsole.c b/tests/tcg/aarch64/system/semiconsole.c
index bfe7c9e26b..81324c639f 100644
--- a/tests/tcg/aarch64/system/semiconsole.c
+++ b/tests/tcg/aarch64/system/semiconsole.c
@@ -6,7 +6,7 @@
* SPDX-License-Identifier: GPL-2.0-or-later
*/
-#include <inttypes.h>
+#include <stdint.h>
#include <minilib.h>
#define SYS_READC 0x7
diff --git a/tests/tcg/aarch64/system/semiheap.c b/tests/tcg/aarch64/system/semiheap.c
index 4ed258476d..a254bd8982 100644
--- a/tests/tcg/aarch64/system/semiheap.c
+++ b/tests/tcg/aarch64/system/semiheap.c
@@ -6,7 +6,7 @@
* SPDX-License-Identifier: GPL-2.0-or-later
*/
-#include <inttypes.h>
+#include <stdint.h>
#include <stddef.h>
#include <minilib.h>
diff --git a/tests/tcg/multiarch/system/memory.c b/tests/tcg/multiarch/system/memory.c
index 41c7f66e2e..214f7d4f54 100644
--- a/tests/tcg/multiarch/system/memory.c
+++ b/tests/tcg/multiarch/system/memory.c
@@ -12,7 +12,7 @@
* - sign extension when loading
*/
-#include <inttypes.h>
+#include <stdint.h>
#include <stdbool.h>
#include <minilib.h>
--
2.36.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PULL 09/14] build: try both native and cross compilers for linux-user tests
2022-06-24 8:27 [PULL 00/14] (Mostly) build system changes for 2022-06-24 Paolo Bonzini
` (7 preceding siblings ...)
2022-06-24 8:27 ` [PULL 08/14] tests/tcg: compile system emulation tests as freestanding Paolo Bonzini
@ 2022-06-24 8:27 ` Paolo Bonzini
2022-06-24 8:27 ` [PULL 10/14] build: improve -fsanitize-coverage-allowlist check Paolo Bonzini
` (5 subsequent siblings)
14 siblings, 0 replies; 20+ messages in thread
From: Paolo Bonzini @ 2022-06-24 8:27 UTC (permalink / raw)
To: qemu-devel; +Cc: Matheus Kowalczuk Ferst
Configure is trying to fall back on cross compilers for targets that
can have bi-arch or bi-endian toolchains, but there are many corner
cases where just checking the name can go wrong. For example, the RHEL
ppc64le compiler is bi-arch and bi-endian, but multilibs are disabled.
Therefore it cannot be used to build 32-bit hosted binaries like the
linux-user TCG tests.
Trying the cross compiler first also does not work, and an example for
this is also ppc64le. The powerpc64-linux-gnu-gcc binary from the
cross-gcc package is theoretically multilib-friendly, but it cannot
find the CRT files on a ppc64le host, because they are not in the .../le
multilib subdirectory.
This can be fixed by testing both the native compiler and the cross
compiler, and proceeding with the first one that works. To do this,
move the compiler usability check from the tests/tcg snippet to inside
probe_target_compiler and, while at it, restrict it to just the user-mode
emulation tests; if a compiler is not able to build nostdlib freestanding
binaries the installation is broken.
Tested-by: Matheus Kowalczuk Ferst <matheus.ferst@eldorado.org.br>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 166 ++++++++++++++++++++++++++++++++----------------------
1 file changed, 100 insertions(+), 66 deletions(-)
diff --git a/configure b/configure
index 0fd2838e82..e719afb80b 100755
--- a/configure
+++ b/configure
@@ -1868,6 +1868,7 @@ fi
: ${cross_cc_cflags_x86_64="-m64"}
compute_target_variable() {
+ eval "$2="
if eval test -n "\"\${cross_prefix_$1}\""; then
if eval has "\"\${cross_prefix_$1}\$3\""; then
eval "$2=\"\${cross_prefix_$1}\$3\""
@@ -1875,8 +1876,21 @@ compute_target_variable() {
fi
}
+# probe_target_compiler TARGET TEST-PROGRAM
+#
+# Look for a compiler for the given target, either native or cross.
+# Set variables target_* if a compiler is found, and container_cross_*
+# if a Docker-based cross-compiler image is known for the target.
+# Set got_cross_cc to yes/no depending on whether a non-container-based
+# compiler was found.
+#
+# If TEST-PROGRAM is present, use it to test the usability of the
+# compiler, and also set build_static to "y" if static linking is
+# possible.
+#
probe_target_compiler() {
# reset all output variables
+ got_cross_cc=no
container_image=
container_hosts=
container_cross_cc=
@@ -1887,14 +1901,6 @@ probe_target_compiler() {
container_cross_objcopy=
container_cross_ranlib=
container_cross_strip=
- target_cc=
- target_ar=
- target_as=
- target_ld=
- target_nm=
- target_objcopy=
- target_ranlib=
- target_strip=
case $1 in
aarch64) container_hosts="x86_64 aarch64" ;;
@@ -2041,22 +2047,8 @@ probe_target_compiler() {
: ${container_cross_strip:=${container_cross_prefix}strip}
done
- eval "target_cflags=\${cross_cc_cflags_$1}"
- if eval test -n "\"\${cross_cc_$1}\""; then
- if eval has "\"\${cross_cc_$1}\""; then
- eval "target_cc=\"\${cross_cc_$1}\""
- fi
- else
- compute_target_variable $1 target_cc gcc
- fi
- target_ccas=$target_cc
- compute_target_variable $1 target_ar ar
- compute_target_variable $1 target_as as
- compute_target_variable $1 target_ld ld
- compute_target_variable $1 target_nm nm
- compute_target_variable $1 target_objcopy objcopy
- compute_target_variable $1 target_ranlib ranlib
- compute_target_variable $1 target_strip strip
+ local t try
+ try=cross
case "$1:$cpu" in
aarch64_be:aarch64 | \
armeb:arm | \
@@ -2065,27 +2057,89 @@ probe_target_compiler() {
ppc*:ppc64 | \
sparc:sparc64 | \
"$cpu:$cpu")
- : ${target_cc:=$cc}
- : ${target_ccas:=$ccas}
- : ${target_as:=$as}
- : ${target_ld:=$ld}
- : ${target_ar:=$ar}
- : ${target_as:=$as}
- : ${target_ld:=$ld}
- : ${target_nm:=$nm}
- : ${target_objcopy:=$objcopy}
- : ${target_ranlib:=$ranlib}
- : ${target_strip:=$strip}
- ;;
+ try='native cross' ;;
esac
- if test -n "$target_cc"; then
- case $1 in
- i386|x86_64)
- if $target_cc --version | grep -qi "clang"; then
- unset target_cc
+ eval "target_cflags=\${cross_cc_cflags_$1}"
+ for t in $try; do
+ case $t in
+ native)
+ target_cc=$cc
+ target_ccas=$ccas
+ target_ar=$ar
+ target_as=$as
+ target_ld=$ld
+ target_nm=$nm
+ target_objcopy=$objcopy
+ target_ranlib=$ranlib
+ target_strip=$strip
+ ;;
+ cross)
+ target_cc=
+ if eval test -n "\"\${cross_cc_$1}\""; then
+ if eval has "\"\${cross_cc_$1}\""; then
+ eval "target_cc=\"\${cross_cc_$1}\""
fi
- ;;
+ else
+ compute_target_variable $1 target_cc gcc
+ fi
+ target_ccas=$target_cc
+ compute_target_variable $1 target_ar ar
+ compute_target_variable $1 target_as as
+ compute_target_variable $1 target_ld ld
+ compute_target_variable $1 target_nm nm
+ compute_target_variable $1 target_objcopy objcopy
+ compute_target_variable $1 target_ranlib ranlib
+ compute_target_variable $1 target_strip strip
+ ;;
esac
+
+ if test -n "$target_cc"; then
+ case $1 in
+ i386|x86_64)
+ if $target_cc --version | grep -qi "clang"; then
+ continue
+ fi
+ ;;
+ esac
+ elif test -n "$target_as" && test -n "$target_ld"; then
+ # Special handling for assembler only targets
+ case $target in
+ tricore-softmmu)
+ build_static=
+ got_cross_cc=yes
+ break
+ ;;
+ *)
+ continue
+ ;;
+ esac
+ else
+ continue
+ fi
+
+ if test $# = 2 && do_compiler "$target_cc" $target_cflags -o $TMPE $TMPC -static ; then
+ build_static=y
+ got_cross_cc=yes
+ break
+ fi
+ if test $# = 1 || do_compiler "$target_cc" $target_cflags -o $TMPE $TMPC ; then
+ build_static=
+ got_cross_cc=yes
+ break
+ fi
+ done
+ if test $got_cross_cc != yes; then
+ build_static=
+ target_cc=
+ target_ccas=
+ target_cflags=
+ target_ar=
+ target_as=
+ target_ld=
+ target_nm=
+ target_objcopy=
+ target_ranlib=
+ target_strip=
fi
}
@@ -2488,9 +2542,10 @@ tcg_tests_targets=
for target in $target_list; do
arch=${target%%-*}
- probe_target_compiler ${arch}
config_target_mak=tests/tcg/config-$target.mak
+ write_c_skeleton
+
echo "# Automatically generated by configure - do not modify" > $config_target_mak
echo "TARGET_NAME=$arch" >> $config_target_mak
case $target in
@@ -2501,35 +2556,14 @@ for target in $target_list; do
*-softmmu)
test -f $source_path/tests/tcg/$arch/Makefile.softmmu-target || continue
qemu="qemu-system-$arch"
+ probe_target_compiler ${arch}
;;
*-linux-user|*-bsd-user)
qemu="qemu-$arch"
+ probe_target_compiler ${arch} $TMPC
;;
esac
- got_cross_cc=no
- unset build_static
-
- if test -n "$target_cc"; then
- write_c_skeleton
- if ! do_compiler "$target_cc" $target_cflags \
- -o $TMPE $TMPC -static ; then
- # For host systems we might get away with building without -static
- if do_compiler "$target_cc" $target_cflags \
- -o $TMPE $TMPC ; then
- got_cross_cc=yes
- fi
- else
- got_cross_cc=yes
- build_static=y
- fi
- elif test -n "$target_as" && test -n "$target_ld"; then
- # Special handling for assembler only tests
- case $target in
- tricore-softmmu) got_cross_cc=yes ;;
- esac
- fi
-
if test $got_cross_cc = yes; then
# Test for compiler features for optional tests. We only do this
# for cross compilers because ensuring the docker containers based
--
2.36.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PULL 10/14] build: improve -fsanitize-coverage-allowlist check
2022-06-24 8:27 [PULL 00/14] (Mostly) build system changes for 2022-06-24 Paolo Bonzini
` (8 preceding siblings ...)
2022-06-24 8:27 ` [PULL 09/14] build: try both native and cross compilers for linux-user tests Paolo Bonzini
@ 2022-06-24 8:27 ` Paolo Bonzini
2022-06-24 8:27 ` [PULL 11/14] fuzz: only use generic-fuzz targets on oss-fuzz Paolo Bonzini
` (4 subsequent siblings)
14 siblings, 0 replies; 20+ messages in thread
From: Paolo Bonzini @ 2022-06-24 8:27 UTC (permalink / raw)
To: qemu-devel; +Cc: Alexander Bulekov
From: Alexander Bulekov <alxndr@bu.edu>
The sancov filter check still fails when unused arguments are treated as
errors. To work around that, add a SanitizerCoverage flag to the
build-check.
Fixes: aa4f3a3b88 ("build: fix check for -fsanitize-coverage-allowlist")
Signed-off-by: Alexander Bulekov <alxndr@bu.edu>
Message-Id: <20220621204507.698711-1-alxndr@bu.edu>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
meson.build | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/meson.build b/meson.build
index 9efcb175d1..1b255f91ef 100644
--- a/meson.build
+++ b/meson.build
@@ -212,7 +212,8 @@ if get_option('fuzzing')
if cc.compiles('int main () { return 0; }',
name: '-fsanitize-coverage-allowlist=/dev/null',
- args: ['-fsanitize-coverage-allowlist=/dev/null'] )
+ args: ['-fsanitize-coverage-allowlist=/dev/null',
+ '-fsanitize-coverage=trace-pc'] )
add_global_arguments('-fsanitize-coverage-allowlist=instrumentation-filter',
native: false, language: ['c', 'cpp', 'objc'])
endif
--
2.36.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PULL 11/14] fuzz: only use generic-fuzz targets on oss-fuzz
2022-06-24 8:27 [PULL 00/14] (Mostly) build system changes for 2022-06-24 Paolo Bonzini
` (9 preceding siblings ...)
2022-06-24 8:27 ` [PULL 10/14] build: improve -fsanitize-coverage-allowlist check Paolo Bonzini
@ 2022-06-24 8:27 ` Paolo Bonzini
2022-06-24 8:27 ` [PULL 12/14] audio/dbus: fix building Paolo Bonzini
` (3 subsequent siblings)
14 siblings, 0 replies; 20+ messages in thread
From: Paolo Bonzini @ 2022-06-24 8:27 UTC (permalink / raw)
To: qemu-devel; +Cc: Alexander Bulekov, Darren Kenny
From: Alexander Bulekov <alxndr@bu.edu>
The non-generic-fuzz targets often time-out, or run out of memory.
Additionally, they create unreproducible bug-reports. It is possible
that this is resulting in failing coverage-reports on OSS-Fuzz. In the
future, these test-cases should be fixed, or removed.
Reviewed-by: Darren Kenny <darren.kenny@oracle.com>
Signed-off-by: Alexander Bulekov <alxndr@bu.edu>
Message-Id: <20220623125505.2137534-1-alxndr@bu.edu>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
scripts/oss-fuzz/build.sh | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/scripts/oss-fuzz/build.sh b/scripts/oss-fuzz/build.sh
index 98b56e0521..aaf485cb55 100755
--- a/scripts/oss-fuzz/build.sh
+++ b/scripts/oss-fuzz/build.sh
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/bash -e
#
# OSS-Fuzz build script. See:
# https://google.github.io/oss-fuzz/getting-started/new-project-guide/#buildsh
@@ -105,7 +105,7 @@ do
# to be configured. We have some generic-fuzz-{pc-q35, floppy, ...} targets
# that are thin wrappers around this target that set the required
# environment variables according to predefined configs.
- if [ "$target" != "generic-fuzz" ]; then
+ if [[ $target == "generic-fuzz-"* ]]; then
ln $base_copy \
"$DEST_DIR/qemu-fuzz-i386-target-$target"
fi
--
2.36.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PULL 12/14] audio/dbus: fix building
2022-06-24 8:27 [PULL 00/14] (Mostly) build system changes for 2022-06-24 Paolo Bonzini
` (10 preceding siblings ...)
2022-06-24 8:27 ` [PULL 11/14] fuzz: only use generic-fuzz targets on oss-fuzz Paolo Bonzini
@ 2022-06-24 8:27 ` Paolo Bonzini
2022-06-24 8:27 ` [PULL 13/14] meson.build: Require a recent version of libpng Paolo Bonzini
` (2 subsequent siblings)
14 siblings, 0 replies; 20+ messages in thread
From: Paolo Bonzini @ 2022-06-24 8:27 UTC (permalink / raw)
To: qemu-devel; +Cc: Marc-André Lureau
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Commit c9c847481 broken dbus audio module compilation with bad
'CONFIG_GIO' usage. Furthermore, it implied extra dependency on audio
module which aren't necessary.
The problem was that 'dbus_display' is not correctly automatically set
on MacOS, because opengl dependency wasn't taken into account.
Fixes: c9c847481 ("audio/dbus: Fix building with modules on macOS")
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-Id: <20220622154918.560870-1-marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
audio/meson.build | 2 +-
meson.build | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/audio/meson.build b/audio/meson.build
index 94dab16891..3abee90860 100644
--- a/audio/meson.build
+++ b/audio/meson.build
@@ -28,7 +28,7 @@ endforeach
if dbus_display
module_ss = ss.source_set()
- module_ss.add(when: [gio, pixman, opengl, 'CONFIG_GIO'], if_true: files('dbusaudio.c'))
+ module_ss.add(when: gio, if_true: files('dbusaudio.c'))
audio_modules += {'dbus': module_ss}
endif
diff --git a/meson.build b/meson.build
index 1b255f91ef..4b2a0b35cb 100644
--- a/meson.build
+++ b/meson.build
@@ -1653,6 +1653,8 @@ dbus_display = get_option('dbus_display') \
error_message: '-display dbus requires --enable-modules') \
.require(gdbus_codegen.found(),
error_message: '-display dbus requires gdbus-codegen') \
+ .require(opengl.found(),
+ error_message: '-display dbus requires epoxy/egl') \
.allowed()
have_virtfs = get_option('virtfs') \
--
2.36.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PULL 13/14] meson.build: Require a recent version of libpng
2022-06-24 8:27 [PULL 00/14] (Mostly) build system changes for 2022-06-24 Paolo Bonzini
` (11 preceding siblings ...)
2022-06-24 8:27 ` [PULL 12/14] audio/dbus: fix building Paolo Bonzini
@ 2022-06-24 8:27 ` Paolo Bonzini
2022-06-24 8:27 ` [PULL 14/14] accel: kvm: Fix memory leak in find_stats_descriptors Paolo Bonzini
2022-06-24 15:57 ` [PULL 00/14] (Mostly) build system changes for 2022-06-24 Richard Henderson
14 siblings, 0 replies; 20+ messages in thread
From: Paolo Bonzini @ 2022-06-24 8:27 UTC (permalink / raw)
To: qemu-devel; +Cc: Thomas Huth, Richard Henderson
From: Thomas Huth <thuth@redhat.com>
According to https://gitlab.com/qemu-project/qemu/-/issues/1080#note_998088246
QEMU does not compile with older versions of libpng, so we should check
for a good version in meson.build. According to repology.org, our supported
host target operating systems ship these versions:
Fedora 35: 1.6.37
CentOS 8 (RHEL-8): 1.6.34
Debian 11: 1.6.37
OpenSUSE Leap 15.3: 1.6.34
Ubuntu LTS 20.04: 1.6.37
FreeBSD Ports: 1.6.37
NetBSD pkgsrc: 1.6.37
OpenBSD Ports: 1.6.37
Homebrew: 1.6.37
MSYS2 mingw: 1.6.37
So it seem reasonable to require at least libpng version 1.6.34 for
our builds.
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1080
Signed-off-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220623174941.531196-1-thuth@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
meson.build | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/meson.build b/meson.build
index 4b2a0b35cb..bf8cfcd5f9 100644
--- a/meson.build
+++ b/meson.build
@@ -1211,7 +1211,7 @@ if gtkx11.found()
endif
png = not_found
if get_option('png').allowed() and have_system
- png = dependency('libpng', required: get_option('png'),
+ png = dependency('libpng', version: '>=1.6.34', required: get_option('png'),
method: 'pkg-config', kwargs: static_kwargs)
endif
vnc = not_found
--
2.36.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PULL 14/14] accel: kvm: Fix memory leak in find_stats_descriptors
2022-06-24 8:27 [PULL 00/14] (Mostly) build system changes for 2022-06-24 Paolo Bonzini
` (12 preceding siblings ...)
2022-06-24 8:27 ` [PULL 13/14] meson.build: Require a recent version of libpng Paolo Bonzini
@ 2022-06-24 8:27 ` Paolo Bonzini
2022-06-24 15:57 ` [PULL 00/14] (Mostly) build system changes for 2022-06-24 Richard Henderson
14 siblings, 0 replies; 20+ messages in thread
From: Paolo Bonzini @ 2022-06-24 8:27 UTC (permalink / raw)
To: qemu-devel; +Cc: Miaoqian Lin
From: Miaoqian Lin <linmq006@gmail.com>
This function doesn't release descriptors in one error path,
result in memory leak. Call g_free() to release it.
Fixes: cc01a3f4cadd ("kvm: Support for querying fd-based stats")
Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
Message-Id: <20220624063159.57411-1-linmq006@gmail.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
accel/kvm/kvm-all.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
index ba3210b1c1..ed8b6b896e 100644
--- a/accel/kvm/kvm-all.c
+++ b/accel/kvm/kvm-all.c
@@ -3891,6 +3891,7 @@ static StatsDescriptors *find_stats_descriptors(StatsTarget target, int stats_fd
error_setg(errp, "KVM stats: failed to read stats header: "
"expected %zu actual %zu",
sizeof(*kvm_stats_header), ret);
+ g_free(descriptors);
return NULL;
}
size_desc = sizeof(*kvm_stats_desc) + kvm_stats_header->name_size;
--
2.36.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PULL 00/14] (Mostly) build system changes for 2022-06-24
2022-06-24 8:27 [PULL 00/14] (Mostly) build system changes for 2022-06-24 Paolo Bonzini
` (13 preceding siblings ...)
2022-06-24 8:27 ` [PULL 14/14] accel: kvm: Fix memory leak in find_stats_descriptors Paolo Bonzini
@ 2022-06-24 15:57 ` Richard Henderson
2022-06-30 17:12 ` Paolo Bonzini
14 siblings, 1 reply; 20+ messages in thread
From: Richard Henderson @ 2022-06-24 15:57 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel
On 6/24/22 01:27, Paolo Bonzini wrote:
> The following changes since commit 2b049d2c8dc01de750410f8f1a4eac498c04c723:
>
> Merge tag 'pull-aspeed-20220622' of https://github.com/legoater/qemu into staging (2022-06-22 07:27:06 -0700)
>
> are available in the Git repository at:
>
> https://gitlab.com/bonzini/qemu.git tags/for-upstream
>
> for you to fetch changes up to 72da35fec9a9ba91a5b2cb9ee00843a94fa9413d:
>
> accel: kvm: Fix memory leak in find_stats_descriptors (2022-06-24 10:19:17 +0200)
>
> ----------------------------------------------------------------
> * fuzzing fixes
> * fix cross compilation CFLAGS and compiler choice
> * do not specify -bios option for tests/vm
> * miscellaneous fixes
Build failure here. I have ubuntu 22.04,
crossbuild-essential-arm64/jammy,jammy,now 12.9ubuntu3 all [installed]
crossbuild-essential-armhf/jammy,jammy,now 12.9ubuntu3 all [installed]
crossbuild-essential-i386/jammy,jammy,now 12.9ubuntu3 all [installed]
crossbuild-essential-mips64el/jammy,jammy,now 12.9 all [installed]
crossbuild-essential-ppc64el/jammy,jammy,now 12.9ubuntu3 all [installed]
crossbuild-essential-riscv64/jammy,jammy,now 12.9ubuntu3 all [installed]
crossbuild-essential-s390x/jammy,jammy,now 12.9ubuntu3 all [installed]
which is properly detected during configure,
Cross compilers
aarch64 : aarch64-linux-gnu-gcc
alpha : $(DOCKER_SCRIPT) cc --cc alpha-linux-gnu-gcc -i
qemu/debian-alpha-cross -s /home/rth/qemu-publish/src --
arm : arm-linux-gnueabihf-gcc
i386 : i686-linux-gnu-gcc
nios2 : $(DOCKER_SCRIPT) cc --cc nios2-linux-gnu-gcc -i
qemu/debian-nios2-cross -s /home/rth/qemu-publish/src --
x86_64 : cc
...
But then the i386 cross-compiler isn't used:
$ cat tests/tcg/config-i386-softmmu.mak
# Automatically generated by configure - do not modify
TARGET_NAME=i386
BUILD_STATIC=
EXTRA_CFLAGS=-m32
CC=cc
CCAS=cc
AR=ar
AS=as
LD=ld
NM=nm
OBJCOPY=objcopy
RANLIB=ranlib
STRIP=strip
QEMU=/home/rth/qemu-publish/bld/qemu-system-i386
leading to failure:
cc -nostdlib -ggdb -O0 -isystem /home/rth/qemu-publish/src/tests/tcg/minilib -m32
-ffreestanding /home/rth/qemu-publish/src/tests/tcg/multiarch/system/hello.c -o hello
-Wl,-T/home/rth/qemu-publish/src/tests/tcg/i386/system/kernel.ld -Wl,-melf_i386 -static
-nostdlib boot.o printf.o -lgcc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/11/libgcc.a when
searching for -lgcc
/usr/bin/ld: cannot find -lgcc: No such file or directory
collect2: error: ld returned 1 exit status
make[1]: *** [/home/rth/qemu-publish/src/tests/tcg/i386/Makefile.softmmu-target:32: hello]
Error 1
r~
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PULL 00/14] (Mostly) build system changes for 2022-06-24
2022-06-24 15:57 ` [PULL 00/14] (Mostly) build system changes for 2022-06-24 Richard Henderson
@ 2022-06-30 17:12 ` Paolo Bonzini
2022-06-30 17:32 ` Peter Maydell
0 siblings, 1 reply; 20+ messages in thread
From: Paolo Bonzini @ 2022-06-30 17:12 UTC (permalink / raw)
To: Richard Henderson; +Cc: qemu-devel
[-- Attachment #1: Type: text/plain, Size: 1501 bytes --]
Il ven 24 giu 2022, 17:57 Richard Henderson <richard.henderson@linaro.org>
ha scritto:
> But then the i386 cross-compiler isn't used:
>
Yeah, that was intentional. In theory a softmmu target is freestanding and
does not need anything beyond the compiler install, so configure defaults
to the native compiler, which is biarch. That however assumes that the
compiler install includes the libgcc for both architectures.
Does that mean that Ubuntu installs GCC without a 32-bit libgcc.a?
Paolo
> $ cat tests/tcg/config-i386-softmmu.mak
>
> # Automatically generated by configure - do not modify
>
> TARGET_NAME=i386
>
> BUILD_STATIC=
>
> EXTRA_CFLAGS=-m32
>
> CC=cc
>
> CCAS=cc
>
> AR=ar
>
> AS=as
>
> LD=ld
>
> NM=nm
>
> OBJCOPY=objcopy
>
> RANLIB=ranlib
>
> STRIP=strip
>
> QEMU=/home/rth/qemu-publish/bld/qemu-system-i386
>
>
> leading to failure:
>
> cc -nostdlib -ggdb -O0 -isystem
> /home/rth/qemu-publish/src/tests/tcg/minilib -m32
> -ffreestanding
> /home/rth/qemu-publish/src/tests/tcg/multiarch/system/hello.c -o hello
> -Wl,-T/home/rth/qemu-publish/src/tests/tcg/i386/system/kernel.ld
> -Wl,-melf_i386 -static
> -nostdlib boot.o printf.o -lgcc
>
> /usr/bin/ld: skipping incompatible
> /usr/lib/gcc/x86_64-linux-gnu/11/libgcc.a when
> searching for -lgcc
>
> /usr/bin/ld: cannot find -lgcc: No such file or directory
>
> collect2: error: ld returned 1 exit status
>
> make[1]: ***
> [/home/rth/qemu-publish/src/tests/tcg/i386/Makefile.softmmu-target:32:
> hello]
> Error 1
>
>
>
> r~
>
>
[-- Attachment #2: Type: text/html, Size: 2302 bytes --]
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PULL 00/14] (Mostly) build system changes for 2022-06-24
2022-06-30 17:12 ` Paolo Bonzini
@ 2022-06-30 17:32 ` Peter Maydell
2022-07-01 0:26 ` Richard Henderson
0 siblings, 1 reply; 20+ messages in thread
From: Peter Maydell @ 2022-06-30 17:32 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: Richard Henderson, qemu-devel
On Thu, 30 Jun 2022 at 18:14, Paolo Bonzini <pbonzini@redhat.com> wrote:
>
>
>
> Il ven 24 giu 2022, 17:57 Richard Henderson <richard.henderson@linaro.org> ha scritto:
>>
>> But then the i386 cross-compiler isn't used:
>
>
> Yeah, that was intentional. In theory a softmmu target is freestanding and does not need anything beyond the compiler install, so configure defaults to the native compiler, which is biarch. That however assumes that the compiler install includes the libgcc for both architectures.
>
> Does that mean that Ubuntu installs GCC without a 32-bit libgcc.a?
I think they package it in a separate package, eg lib32gcc-9-dev
(adjust package name to suit gcc version).
-- PMM
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PULL 00/14] (Mostly) build system changes for 2022-06-24
2022-06-30 17:32 ` Peter Maydell
@ 2022-07-01 0:26 ` Richard Henderson
2022-07-01 4:11 ` Paolo Bonzini
0 siblings, 1 reply; 20+ messages in thread
From: Richard Henderson @ 2022-07-01 0:26 UTC (permalink / raw)
To: Peter Maydell, Paolo Bonzini; +Cc: qemu-devel
On 6/30/22 23:02, Peter Maydell wrote:
> On Thu, 30 Jun 2022 at 18:14, Paolo Bonzini <pbonzini@redhat.com> wrote:
>>
>>
>>
>> Il ven 24 giu 2022, 17:57 Richard Henderson <richard.henderson@linaro.org> ha scritto:
>>>
>>> But then the i386 cross-compiler isn't used:
>>
>>
>> Yeah, that was intentional. In theory a softmmu target is freestanding and does not need anything beyond the compiler install, so configure defaults to the native compiler, which is biarch. That however assumes that the compiler install includes the libgcc for both architectures.
>>
>> Does that mean that Ubuntu installs GCC without a 32-bit libgcc.a?
>
> I think they package it in a separate package, eg lib32gcc-9-dev
> (adjust package name to suit gcc version).
It's there, as Peter says, but it's not installed with the build-essential meta-package,
and the crossbuild-essential-i386 package installs a different libgcc.
r~
^ permalink raw reply [flat|nested] 20+ messages in thread