[xen staging] x86/efi: move the logic to detect PE build support

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

[xen staging] x86/efi: move the logic to detect PE build support

commit 18cd4997d26b9df95dda87503e41c823279a07a0
Author:     Roger Pau Monné <[hidden email]>
AuthorDate: Tue Jul 31 10:24:22 2018 +0200
Commit:     Jan Beulich <[hidden email]>
CommitDate: Tue Jul 31 10:24:22 2018 +0200

    x86/efi: move the logic to detect PE build support
    So that it can be used by other components apart from the efi specific
    code. By moving the detection code creating a dummy efi/disabled file
    can be avoided.
    This is required so that the conditional used to define the efi symbol
    in the linker script can be removed and instead the definition of the
    efi symbol can be guarded using the preprocessor.
    The motivation behind this change is to be able to build Xen using lld
    (the LLVM linker), that at least on version 6.0.0 doesn't work
    properly with a DEFINED being used in a conditional expression:
    ld    -melf_x86_64_fbsd  -T xen.lds -N prelink.o --build-id=sha1 \
        /root/src/xen/xen/common/symbols-dummy.o -o /root/src/xen/xen/.xen-syms.0
    ld: error: xen.lds:233: symbol not found: efi
    Signed-off-by: Roger Pau Monné <[hidden email]>
    Reviewed-by: Jan Beulich <[hidden email]>
    Tested-by: Daniel Kiper <[hidden email]>
 .gitignore                |  1 -
 xen/arch/x86/Makefile     |  9 +++++++--
 xen/arch/x86/efi/Makefile | 11 +++--------
 xen/arch/x86/xen.lds.S    |  4 +++-
 4 files changed, 13 insertions(+), 12 deletions(-)

diff --git a/.gitignore b/.gitignore
index 55b78008c0..1625a8f0e7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -302,7 +302,6 @@ xen/arch/x86/boot/*.bin
diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile
index 5563c813dd..172685fb41 100644
--- a/xen/arch/x86/Makefile
+++ b/xen/arch/x86/Makefile
@@ -163,10 +163,15 @@ EFI_LDFLAGS += --minor-image-version=$(XEN_SUBVERSION)
 EFI_LDFLAGS += --major-os-version=2 --minor-os-version=0
 EFI_LDFLAGS += --major-subsystem-version=2 --minor-subsystem-version=0
+# Check if the build system supports PE.
+XEN_BUILD_PE := $(shell $(CC) $(filter-out $(CFLAGS-y) .%.d,$(CFLAGS)) -c efi/check.c -o efi/check.o 2>/dev/null && echo y)
+export XEN_BUILD_PE := $(if $(XEN_BUILD_PE),$(shell $(LD) -mi386pep --subsystem=10 -o efi/check.efi efi/check.o 2>/dev/null && echo y))
 $(TARGET).efi: VIRT_BASE = 0x$(shell $(NM) efi/relocs-dummy.o | sed -n 's, A VIRT_START$$,,p')
 $(TARGET).efi: ALT_BASE = 0x$(shell $(NM) efi/relocs-dummy.o | sed -n 's, A ALT_START$$,,p')
 # Don't use $(wildcard ...) here - at least make 3.80 expands this too early!
-$(TARGET).efi: guard = $(if $(shell echo efi/dis* | grep disabled),:)
+$(TARGET).efi: guard = $(if $(filter y,$(XEN_BUILD_PE)),,:)
 ifneq ($(build_id_linker),)
 ifeq ($(call ld-ver-build-id,$(LD) $(filter -m%,$(EFI_LDFLAGS))),y)
@@ -232,6 +237,6 @@ efi/mkreloc: efi/mkreloc.c
  rm -f asm-offsets.s *.lds boot/*.o boot/*~ boot/core boot/mkelf32
  rm -f $(BASEDIR)/.xen-syms.[0-9]* boot/.*.d
- rm -f $(BASEDIR)/.xen.efi.[0-9]* efi/*.efi efi/disabled efi/mkreloc
+ rm -f $(BASEDIR)/.xen.efi.[0-9]* efi/*.efi efi/mkreloc
  rm -f boot/cmdline.S boot/reloc.S boot/*.lnk boot/*.bin
  rm -f note.o
diff --git a/xen/arch/x86/efi/Makefile b/xen/arch/x86/efi/Makefile
index 3be9661108..918383b325 100644
--- a/xen/arch/x86/efi/Makefile
+++ b/xen/arch/x86/efi/Makefile
@@ -1,16 +1,11 @@
 CFLAGS += -fshort-wchar
-efi := y$(shell rm -f disabled)
-efi := $(if $(efi),$(shell $(CC) $(filter-out $(CFLAGS-y) .%.d,$(CFLAGS)) -c check.c 2>disabled && echo y))
-efi := $(if $(efi),$(shell $(LD) -mi386pep --subsystem=10 -o check.efi check.o 2>disabled && echo y))
-efi := $(if $(efi),$(shell rm disabled)y)
 %.o: %.ihex
  $(OBJCOPY) -I ihex -O binary $< $@
 boot.init.o: buildid.o
 obj-y := stub.o
-obj-$(efi) := boot.init.o compat.o relocs-dummy.o runtime.o
-extra-$(efi) += buildid.o
-nocov-$(efi) += stub.o
+obj-$(XEN_BUILD_PE) := boot.init.o compat.o relocs-dummy.o runtime.o
+extra-$(XEN_BUILD_PE) += buildid.o
+nocov-$(XEN_BUILD_PE) += stub.o
diff --git a/xen/arch/x86/xen.lds.S b/xen/arch/x86/xen.lds.S
index 326e885402..4a59467986 100644
--- a/xen/arch/x86/xen.lds.S
+++ b/xen/arch/x86/xen.lds.S
@@ -304,7 +304,9 @@ SECTIONS
   } :text
-  efi = DEFINED(efi) ? efi : .;
+#ifndef XEN_BUILD_PE
+  efi = .;
   /* Sections to be discarded */
   /DISCARD/ : {
generated by git-patchbot for /home/xen/git/xen.git#staging

Xen-changelog mailing list
[hidden email]