From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53569) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bXd8e-0003wA-TY for qemu-devel@nongnu.org; Wed, 10 Aug 2016 19:42:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bXd8c-0001AE-L3 for qemu-devel@nongnu.org; Wed, 10 Aug 2016 19:42:19 -0400 Received: from speedy.comstyle.com ([2001:470:1d:8c::2]:3503 helo=mail.comstyle.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bXd8c-0001A5-CM for qemu-devel@nongnu.org; Wed, 10 Aug 2016 19:42:18 -0400 References: <1470672688-6754-1-git-send-email-peter.maydell@linaro.org> From: Brad Smith Message-ID: <9bb2415e-3e74-af9f-e45b-b1d8c126b4be@comstyle.com> Date: Wed, 10 Aug 2016 19:42:16 -0400 MIME-Version: 1.0 In-Reply-To: <1470672688-6754-1-git-send-email-peter.maydell@linaro.org> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH for-2.7] pc-bios/optionrom: Fix OpenBSD build with better detection of linker emulation List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Peter Maydell , qemu-devel@nongnu.org Cc: Paolo Bonzini , Sean Bruno , patches@linaro.org On 08/08/16 12:11, Peter Maydell wrote: > The various host OSes are irritatingly variable about the name > of the linker emulation we need to pass to ld's -m option to > build the i386 option ROMs. Instead of doing this via a > CONFIG ifdef, check in configure whether any of the emulation > names we know about will work and pass the right answer through > to the makefile. If we can't find one, we fall back to not trying > to build the option ROMs, in the same way we would for a non-x86 > host platform. > > This is in particular necessary to unbreak the build on OpenBSD, > since it wants a different answer to FreeBSD and we don't have > an existing CONFIG_ variable that distinguishes the two. To add to this.. amd64 uses "elf_i386". Looking at i386 it uses elf_i386_obsd and that is the only emulation supported. So change the list of emulations to try to elf_i386 elf_i386_fbsd elf_i386_obsd i386pe Someone needs to take a look at what NetBSD / DragonFly are using. > Signed-off-by: Peter Maydell > --- > This works for Linux and for the Windows builds; I don't have any > BSD systems to test it on. Brad and Sean, can I ask you to test this > on OpenBSD and FreeBSD, please? > > (I think this is going to miss -rc2. Sorry about that; we'll > get OpenBSD builds fixed for -rc3.) > > configure | 12 +++++++++++- > pc-bios/optionrom/Makefile | 12 +----------- > 2 files changed, 12 insertions(+), 12 deletions(-) > > diff --git a/configure b/configure > index f57fcc6..7c744ad 100755 > --- a/configure > +++ b/configure > @@ -4699,7 +4699,16 @@ roms= > if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \ > "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \ > "$softmmu" = yes ; then > - roms="optionrom" > + # Different host OS linkers have different ideas about the name of the ELF > + # emulation. Linux and OpenBSD use 'elf_i386'; FreeBSD uses the _fbsd > + # variant; and Windows uses i386pe. > + for emu in elf_i386 elf_i386_fbsd i386pe; do > + if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then > + ld_i386_emulation="$emu" > + roms="optionrom" > + break > + fi > + done > fi > if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then > roms="$roms spapr-rtas" > @@ -5539,6 +5548,7 @@ fi > echo "LDFLAGS=$LDFLAGS" >> $config_host_mak > echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak > echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak > +echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak > echo "LIBS+=$LIBS" >> $config_host_mak > echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak > echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak > diff --git a/pc-bios/optionrom/Makefile b/pc-bios/optionrom/Makefile > index 24e175e..5bbe233 100644 > --- a/pc-bios/optionrom/Makefile > +++ b/pc-bios/optionrom/Makefile > @@ -41,18 +41,8 @@ build-all: multiboot.bin linuxboot.bin linuxboot_dma.bin kvmvapic.bin > %.o: %.S > $(call quiet-command,$(CPP) $(QEMU_INCLUDES) $(QEMU_DGFLAGS) -c -o - $< | $(AS) $(ASFLAGS) -o $@," AS $(TARGET_DIR)$@") > > -ifdef CONFIG_WIN32 > -LD_EMULATION = i386pe > -else > -ifdef CONFIG_BSD > -LD_EMULATION = elf_i386_fbsd > -else > -LD_EMULATION = elf_i386 > -endif > -endif > - > %.img: %.o > - $(call quiet-command,$(LD) $(LDFLAGS_NOPIE) -m $(LD_EMULATION) -Ttext 0 -e _start -s -o $@ $<," Building $(TARGET_DIR)$@") > + $(call quiet-command,$(LD) $(LDFLAGS_NOPIE) -m $(LD_I386_EMULATION) -Ttext 0 -e _start -s -o $@ $<," Building $(TARGET_DIR)$@") > > %.raw: %.img > $(call quiet-command,$(OBJCOPY) -O binary -j .text $< $@," Building $(TARGET_DIR)$@") >