mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
x86/EFI: sanitize build logic
With changes done over time and as far as linking goes, the only special things about building with EFI support enabled are - the need for the dummy relocations object (for xen.gz uniformly in all build stages, for xen.efi in stage 1), - the special efi/buildid.o file, which can't be made part of efi/built_in.o, due to the extra linker options required for it. All other efi/*.o can be consumed from the built_in*.o files. In efi/Makefile, besides moving relocs-dummy.o to "extra", also properly split between obj-y and obj-bin-y. Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
This commit is contained in:
1 parent
347384331e
commit
de94e8b4f9
2 files changed
+19
-17
No files matched your search
+16
-15
@@ -113,28 +113,35 @@ $(TARGET): $(TARGET)-syms $(efi-y) boot/mkelf32
|
||||
{ echo "No Multiboot2 header found" >&2; false; }
|
||||
mv $(TMP) $(TARGET)
|
||||
|
||||
# Check if the compiler supports the MS ABI.
|
||||
export XEN_BUILD_EFI := $(shell $(CC) $(XEN_CFLAGS) -c efi/check.c -o efi/check.o 2>/dev/null && echo y)
|
||||
# Check if the linker supports PE.
|
||||
XEN_BUILD_PE := $(if $(XEN_BUILD_EFI),$(shell $(LD) -mi386pep --subsystem=10 -o efi/check.efi efi/check.o 2>/dev/null && echo y))
|
||||
CFLAGS-$(XEN_BUILD_EFI) += -DXEN_BUILD_EFI
|
||||
|
||||
ALL_OBJS := $(BASEDIR)/arch/x86/boot/built_in.o $(BASEDIR)/arch/x86/efi/built_in.o $(ALL_OBJS)
|
||||
EFI_OBJS-$(XEN_BUILD_EFI) := efi/relocs-dummy.o
|
||||
|
||||
ifeq ($(CONFIG_LTO),y)
|
||||
# Gather all LTO objects together
|
||||
prelink_lto.o: $(ALL_OBJS)
|
||||
$(LD_LTO) -r -o $@ $^
|
||||
|
||||
prelink-efi_lto.o: $(ALL_OBJS) efi/runtime.o efi/compat.o
|
||||
$(LD_LTO) -r -o $@ $(filter-out %/efi/built_in.o,$^)
|
||||
prelink-efi_lto.o: $(ALL_OBJS)
|
||||
$(LD_LTO) -r -o $@ $^
|
||||
|
||||
# Link it with all the binary objects
|
||||
prelink.o: $(patsubst %/built_in.o,%/built_in_bin.o,$(ALL_OBJS)) prelink_lto.o
|
||||
prelink.o: $(patsubst %/built_in.o,%/built_in_bin.o,$(ALL_OBJS)) prelink_lto.o $(EFI_OBJS-y)
|
||||
$(LD) $(XEN_LDFLAGS) -r -o $@ $^
|
||||
|
||||
prelink-efi.o: $(patsubst %/built_in.o,%/built_in_bin.o,$(ALL_OBJS)) prelink-efi_lto.o efi/boot.init.o
|
||||
prelink-efi.o: $(patsubst %/built_in.o,%/built_in_bin.o,$(ALL_OBJS)) prelink-efi_lto.o
|
||||
$(LD) $(XEN_LDFLAGS) -r -o $@ $^
|
||||
else
|
||||
prelink.o: $(ALL_OBJS)
|
||||
prelink.o: $(ALL_OBJS) $(EFI_OBJS-y)
|
||||
$(LD) $(XEN_LDFLAGS) -r -o $@ $^
|
||||
|
||||
prelink-efi.o: $(ALL_OBJS) efi/boot.init.o efi/runtime.o efi/compat.o
|
||||
$(LD) $(XEN_LDFLAGS) -r -o $@ $(filter-out %/efi/built_in.o,$^)
|
||||
prelink-efi.o: $(ALL_OBJS)
|
||||
$(LD) $(XEN_LDFLAGS) -r -o $@ $^
|
||||
endif
|
||||
|
||||
$(TARGET)-syms: prelink.o xen.lds
|
||||
@@ -171,12 +178,6 @@ 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 compiler supports the MS ABI.
|
||||
export XEN_BUILD_EFI := $(shell $(CC) $(XEN_CFLAGS) -c efi/check.c -o efi/check.o 2>/dev/null && echo y)
|
||||
# Check if the linker supports PE.
|
||||
XEN_BUILD_PE := $(if $(XEN_BUILD_EFI),$(shell $(LD) -mi386pep --subsystem=10 -o efi/check.efi efi/check.o 2>/dev/null && echo y))
|
||||
CFLAGS-$(XEN_BUILD_EFI) += -DXEN_BUILD_EFI
|
||||
|
||||
$(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')
|
||||
|
||||
@@ -223,8 +224,8 @@ $(TARGET).efi: FORCE
|
||||
echo '$(if $(filter y,$(XEN_BUILD_EFI)),xen.efi generation,EFI support) disabled'
|
||||
endif
|
||||
|
||||
efi/boot.init.o efi/runtime.o efi/compat.o efi/buildid.o efi/relocs-dummy.o: $(BASEDIR)/arch/x86/efi/built_in.o
|
||||
efi/boot.init.o efi/runtime.o efi/compat.o efi/buildid.o efi/relocs-dummy.o: ;
|
||||
efi/buildid.o efi/relocs-dummy.o: $(BASEDIR)/arch/x86/efi/built_in.o
|
||||
efi/buildid.o efi/relocs-dummy.o: ;
|
||||
|
||||
asm-offsets.s: $(TARGET_SUBARCH)/asm-offsets.c $(BASEDIR)/include/asm-x86/asm-macros.h
|
||||
$(CC) $(filter-out -Wa$(comma)% -flto,$(c_flags)) -S -o $@ $<
|
||||
|
||||
@@ -14,6 +14,7 @@ $(call cc-option-add,cflags-stack-boundary,CC,-mpreferred-stack-boundary=4)
|
||||
$(EFIOBJ): CFLAGS-stack-boundary := $(cflags-stack-boundary)
|
||||
|
||||
obj-y := stub.o
|
||||
obj-$(XEN_BUILD_EFI) := $(EFIOBJ) relocs-dummy.o
|
||||
extra-$(XEN_BUILD_EFI) += buildid.o
|
||||
obj-$(XEN_BUILD_EFI) := $(filter-out %.init.o,$(EFIOBJ))
|
||||
obj-bin-$(XEN_BUILD_EFI) := $(filter %.init.o,$(EFIOBJ))
|
||||
extra-$(XEN_BUILD_EFI) += buildid.o relocs-dummy.o
|
||||
nocov-$(XEN_BUILD_EFI) += stub.o
|
||||