-m16 option is available only since GCC 4.9.0 [1]. That causes a build failure on centos-7 [2] that has GCC 4.8.5. Fallback to -m32 if -m16 is not available. 1. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59672 2. https://gitlab.com/bonzini/kvm-unit-tests/-/jobs/755368387 Fixes: 2616ad934e2 ("x86: realmode: Workaround clang issues") Signed-off-by: Roman Bolshakov <r.bolshakov@xxxxxxxxx> --- configure | 11 +++++++++++ x86/Makefile.common | 4 ++++ 2 files changed, 15 insertions(+) diff --git a/configure b/configure index f930543..7dc2e3b 100755 --- a/configure +++ b/configure @@ -16,6 +16,7 @@ pretty_print_stacks=yes environ_default=yes u32_long= wa_divide= +m16_support= vmm="qemu" errata_force=0 erratatxt="$srcdir/errata.txt" @@ -167,6 +168,15 @@ EOF rm -f lib-test.{o,S} fi +# check if -m16 is supported +if [ "$arch" = "i386" ] || [ "$arch" = "x86_64" ]; then + cat << EOF > lib-test.c +int f(int a, int b) { return a + b; } +EOF + m16_support=$("$cross_prefix$cc" -m16 -c lib-test.c >/dev/null 2>&1 && echo yes) + rm -f lib-test.{o,c} +fi + # require enhanced getopt getopt -T > /dev/null if [ $? -ne 4 ]; then @@ -224,6 +234,7 @@ ENVIRON_DEFAULT=$environ_default ERRATATXT=$erratatxt U32_LONG_FMT=$u32_long WA_DIVIDE=$wa_divide +M16_SUPPORT=$m16_support EOF cat <<EOF > lib/config.h diff --git a/x86/Makefile.common b/x86/Makefile.common index 5567d66..553bf49 100644 --- a/x86/Makefile.common +++ b/x86/Makefile.common @@ -72,7 +72,11 @@ $(TEST_DIR)/realmode.elf: $(TEST_DIR)/realmode.o $(CC) -m32 -nostdlib -o $@ -Wl,-m,elf_i386 \ -Wl,-T,$(SRCDIR)/$(TEST_DIR)/realmode.lds $^ +ifeq ($(M16_SUPPORT),yes) $(TEST_DIR)/realmode.o: bits = 16 +else +$(TEST_DIR)/realmode.o: bits = 32 +endif $(TEST_DIR)/kvmclock_test.elf: $(TEST_DIR)/kvmclock.o -- 2.28.0