[U-Boot] [PATCH v2 24/47] x86: Set up toolchain flags for running as EFI application

Bin Meng bmeng.cn at gmail.com
Mon Aug 3 17:50:31 CEST 2015


Hi Simon,

On Fri, Jul 31, 2015 at 11:31 PM, Simon Glass <sjg at chromium.org> wrote:
> From: Ben Stoltz <stoltz at google.com>
>
> Adjust the toolchain flags to build U-Boot as a relocatable shared library,
> as required by EFI.
>
> Signed-off-by: Ben Stoltz <stoltz at google.com>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
> Changes in v2:
> - Add a comment as to where LDFLAGS_EFI is used
> - Drop duplicate OBJCOPYFLAGS_EFI
> - Drop no-red-zone as it is not needed for i386
> - Rename CONFIG_ARCH_EFI to CONFIG_EFI_APP
> - Use toolchain instead of tool chain
>
>  arch/x86/config.mk | 35 ++++++++++++++++++++++++++++++++---
>  1 file changed, 32 insertions(+), 3 deletions(-)
>
> diff --git a/arch/x86/config.mk b/arch/x86/config.mk
> index 999143e..a1c0eb2 100644
> --- a/arch/x86/config.mk
> +++ b/arch/x86/config.mk
> @@ -8,19 +8,48 @@
>  CONFIG_STANDALONE_LOAD_ADDR ?= 0x40000
>
>  PLATFORM_CPPFLAGS += -fno-strict-aliasing
> -PLATFORM_CPPFLAGS += -mregparm=3
>  PLATFORM_CPPFLAGS += -fomit-frame-pointer
>  PF_CPPFLAGS_X86   := $(call cc-option, -fno-toplevel-reorder, \
>                        $(call cc-option, -fno-unit-at-a-time)) \
>                      $(call cc-option, -mpreferred-stack-boundary=2)
> +
>  PLATFORM_CPPFLAGS += $(PF_CPPFLAGS_X86)
>  PLATFORM_CPPFLAGS += -fno-dwarf2-cfi-asm
>  PLATFORM_CPPFLAGS += -march=i386 -m32
>
>  PLATFORM_RELFLAGS += -ffunction-sections -fvisibility=hidden
>
> -PLATFORM_LDFLAGS += --emit-relocs -Bsymbolic -Bsymbolic-functions -m elf_i386
> +PLATFORM_LDFLAGS += -Bsymbolic -Bsymbolic-functions
>
> -LDFLAGS_FINAL += --gc-sections -pie
>  LDFLAGS_FINAL += --wrap=__divdi3 --wrap=__udivdi3
>  LDFLAGS_FINAL += --wrap=__moddi3 --wrap=__umoddi3
> +
> +# This is used in the top-level Makefile which does not include
> +# PLATFORM_LDFLAGS

I see this is only used by building EFI payload. Can we remove this
from this patch and move it into the EFI payload patch? And rename the
variable to something like: LDFLAGS_EFIPAYLOAD to reflect this is only
used for payload?

> +LDFLAGS_EFI := -Bsymbolic -Bsymbolic-functions -shared --no-undefined
> +
> +OBJCOPYFLAGS_EFI := -j .text -j .sdata -j .data -j .dynamic -j .dynsym \
> +       -j .rel -j .rela -j .reloc
> +
> +CFLAGS_NON_EFI := -mregparm=3
> +CFLAGS_EFI := -fpic -fshort-wchar
> +
> +EFIARCH=ia32

Nits: please add space around =

> +
> +LDSCRIPT_EFI := $(srctree)/$(CPUDIR)/efi/elf_$(EFIARCH)_efi.lds
> +OBJCOPYFLAGS_EFI += --target=efi-app-$(EFIARCH)
> +
> +ifeq ($(CONFIG_EFI_APP),y)
> +
> +PLATFORM_CPPFLAGS += $(CFLAGS_EFI)
> +PLATFORM_LDFLAGS += -m elf_i386

Nits: '-m elf_i386' is always on for both cases, so we can remove '-m
elf_i386' here and just leave it in the original place above

> +LDFLAGS_FINAL += -znocombreloc -shared
> +LDSCRIPT := $(LDSCRIPT_EFI)
> +
> +else
> +
> +PLATFORM_CPPFLAGS += $(CFLAGS_NON_EFI)
> +PLATFORM_LDFLAGS += --emit-relocs -m elf_i386
> +LDFLAGS_FINAL += --gc-sections -pie
> +
> +endif
> --

Regards,
Bin


More information about the U-Boot mailing list