qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH for-2.7] pc-bios/optionrom: Fix OpenBSD build wi


From: Brad Smith
Subject: Re: [Qemu-devel] [PATCH for-2.7] pc-bios/optionrom: Fix OpenBSD build with better detection of linker emulation
Date: Wed, 10 Aug 2016 19:42:16 -0400
User-agent: Mozilla/5.0 (X11; OpenBSD amd64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0

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 <address@hidden>
---
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)$@")





reply via email to

[Prev in Thread] Current Thread [Next in Thread]