Skip to contentSkip to conversation

Allow building EFI binaries on x86_64

PATCH New Heinrich Schuchardt 3 participants 6 messages May 18, 2018 – May 26, 2018 x86

lore
Share & tools
lore
#0 lore raw

cover Allow building EFI binaries on x86_64

With the patch series EFI binaries needed for the EFI selftests can be built on x86_64.

But we still lack setjmp support so we cannot activate the StartImage selftest.

We should handle this series via Alex's efi-next tree.

Heinrich Schuchardt (2):
efi_selftest: allow building relocation code on x86_64
efi_loader: build CRT0 and RELOC on x86_64

 arch/x86/config.mk    | 20 ++++++++++++++++----
 arch/x86/lib/Makefile | 12 +++++++++++-
 2 files changed, 27 insertions(+), 5 deletions(-)
Signature · 1 line
2.17.0
#1 lore raw

PATCH 1/2 efi_selftest: allow building relocation code on x86_64

Variables EFI_RELOC and EFI_CRT0 have to be defined to build the EFI unit tests. This patch ensures this for the x86 architecure.

If we compile with EFI_STUB, the bitness depends on CONFIG_EFI_STUB_64BIT. Otherwise the bitness depends on CONFIG_X86_64.

---
 arch/x86/config.mk | 20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)
arch/x86/config.mk +16 -4
index 97db03deeed..5f77f98e60a 100644
@@ -86,9 +86,9 @@ else
 PLATFORM_CPPFLAGS += -D__I386__
 endif
 
-ifneq ($(CONFIG_EFI_STUB)$(CONFIG_CMD_BOOTEFI_HELLO_COMPILE),)
+ifdef CONFIG_EFI_STUB
 
-ifneq ($(CONFIG_EFI_STUB_64BIT),)
+ifdef CONFIG_EFI_STUB_64BIT
 EFI_LDS := elf_x86_64_efi.lds
 EFI_CRT0 := crt0_x86_64_efi.o
 EFI_RELOC := reloc_x86_64_efi.o
@@ -98,10 +98,22 @@ EFI_CRT0 := crt0_ia32_efi.o
 EFI_RELOC := reloc_ia32_efi.o
 endif
 
+else
+
 ifdef CONFIG_X86_64
-EFI_TARGET := --target=efi-app-x86_64
+EFI_LDS := elf_x86_64_efi.lds
+EFI_CRT0 := crt0_x86_64_efi.o
+EFI_RELOC := reloc_x86_64_efi.o
 else
-EFI_TARGET := --target=efi-app-ia32
+EFI_LDS := elf_ia32_efi.lds
+EFI_CRT0 := crt0_ia32_efi.o
+EFI_RELOC := reloc_ia32_efi.o
+endif
+
 endif
 
+ifdef CONFIG_X86_64
+EFI_TARGET := --target=efi-app-x86_64
+else
+EFI_TARGET := --target=efi-app-ia32
 endif
Signature · 1 line
2.17.0
#2 lore raw

PATCH 1/2 efi_selftest: allow building relocation code on x86_64

Quoted 10 lines · Heinrich Schuchardt

Variables EFI_RELOC and EFI_CRT0 have to be defined to build the EFI unit tests. This patch ensures this for the x86 architecure.

If we compile with EFI_STUB, the bitness depends on CONFIG_EFI_STUB_64BIT. Otherwise the bitness depends on CONFIG_X86_64.

---
 arch/x86/config.mk | 20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)
#3 lore raw

PATCH 2/2 efi_loader: build CRT0 and RELOC on x86_64

In reply to Heinrich Schuchardt

The efi selftest and the hello application require CRT0 and RELOC to be built.

---
 arch/x86/lib/Makefile | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)
arch/x86/lib/Makefile +11 -1
index 51d451f9522..5a64f6eddc7 100644
@@ -68,8 +68,18 @@ extra-$(CONFIG_EFI_STUB_64BIT) += crt0_x86_64_efi.o reloc_x86_64_efi.o
 
 endif
 
-ifneq ($(CONFIG_EFI_STUB)$(CONFIG_CMD_BOOTEFI_HELLO_COMPILE),)
+ifdef CONFIG_EFI_STUB
+
 ifeq ($(CONFIG_$(SPL_)X86_64),)
 extra-y += $(EFI_CRT0) $(EFI_RELOC)
 endif
+
+else
+
+ifndef CONFIG_SPL_BUILD
+ifneq ($(CONFIG_CMD_BOOTEFI_SELFTEST)$(CONFIG_CMD_BOOTEFI_HELLO_COMPILE),)
+extra-y += $(EFI_CRT0) $(EFI_RELOC)
+endif
+endif
+
 endif
Signature · 1 line
2.17.0
#5 lore raw

PATCH 2/2 efi_loader: build CRT0 and RELOC on x86_64

In reply to Heinrich Schuchardt

Hi,

Quoted 5 lines · On Fri, 18 May 2018 19:12:20 +0200 Heinrich Schuchardt <[email protected]>…

The efi selftest and the hello application require CRT0 and RELOC to be built.

---

While we're on the topic of EFI_CRT0 and EFI_RELOC, does anybody happen to have an idea on how to fix parallel build failures due to helloworld.efi getting built before EFI_{CRT0,RELOC}? I've reported it previously at:

https://lists.denx.de/pipermail/u-boot/2018-March/323624.html

Pretty please? :)

Thanks,
Tuomas