|
From: | Paolo Bonzini |
Subject: | Re: [PATCH 2/6] configure, pc-bios/optionrom: pass cross CFLAGS correctly |
Date: | Wed, 22 Jun 2022 11:31:04 +0200 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.10.0 |
On 6/21/22 16:55, Richard Henderson wrote:
On 6/21/22 00:51, Paolo Bonzini wrote: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 -gquiet-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) -m16Hmm. I'm not sure about this. Given that EXTRA_CFLAGS is going to be e.g. -m32 or empty, being immediately overwritten to -m16, I don't quite see the point.
I added it mostly for consistency with the other pc-bios subdirectories, and because it can also be overridden with --cross-cflags-i386 though.
Even for the default -m32, however, there would be a reason to have $(EXTRA_FLAGS) in there. I have played with removing the direct use of "ld -m" in the build of pc-bios/optionrom, and stumbled on a weird GCC configuration issue. The problem is that some hosts pick the right linker emulation when given -m16, but others don't:
$ gcc -dumpspecs ... *link: ... %{m16|m32|mx32:;:-m elf_x86_64} %{m16|m32:-m elf_i386} # x86_64-w64-mingw32-gcc ... *link: %{!m32:-m i386pep} %{m32:-m i386pe} ...The error is in GCC's gcc/config/i386/mingw-w64.h, which provides a MULTILIB_DEFAULTS #define but does not rely on it:
#undef SPEC_32 #undef SPEC_64 #if TARGET_64BIT_DEFAULT #define SPEC_32 "m32" // should be m16|m32 #define SPEC_64 "!m32" // should be m64 #else #define SPEC_32 "!m64" // should be m16|m32 #define SPEC_64 "m64" #endifSo you need -m32 -m16 on 64-bit hosts! For the "working" specs the -m16 would override -m32, while on the broken ones -m32 is for the linker and -m16 is for the compiler.
Paolo
[Prev in Thread] | Current Thread | [Next in Thread] |