From: Ard Biesheuvel <ardb@xxxxxxxxxx> Instead of a raw binary executable, embed an ELF build of the core kernel into the EFI zboot image. Given that the memory layout of the kernel executable is described by ELF program headers, this removes the need to rely on symbols injected into the build to describe things like the size of the text area, which are not accessible to other consumers of the EFI zboot format, e.g., the kexec loader. Given that the EFI zboot loader only decompresses those parts of the payload covered by PT_LOAD program headers, stripping the encapsulated ELF image is not strictly necessary, making the EFI zboot format suitable for distributing the bootable image and the debug symbols in a single compressed image. Signed-off-by: Ard Biesheuvel <ardb@xxxxxxxxxx> --- arch/arm64/boot/Makefile | 4 ---- arch/arm64/kernel/image-vars.h | 4 ---- drivers/firmware/efi/libstub/arm64.c | 4 ---- drivers/firmware/efi/libstub/zboot.lds | 6 ------ 4 files changed, 18 deletions(-) diff --git a/arch/arm64/boot/Makefile b/arch/arm64/boot/Makefile index b5a08333bc57..cfd76bcbb81f 100644 --- a/arch/arm64/boot/Makefile +++ b/arch/arm64/boot/Makefile @@ -46,12 +46,8 @@ $(obj)/Image.xz: $(obj)/Image FORCE $(obj)/image.fit: $(obj)/Image $(obj)/dts/dtbs-list FORCE $(call if_changed,fit) -EFI_ZBOOT_PAYLOAD := Image EFI_ZBOOT_BFD_TARGET := elf64-littleaarch64 EFI_ZBOOT_MACH_TYPE := ARM64 EFI_ZBOOT_FORWARD_CFI := $(CONFIG_ARM64_BTI_KERNEL) -EFI_ZBOOT_OBJCOPY_FLAGS = --add-symbol zboot_code_size=0x$$( \ - $(NM) vmlinux|grep _kernel_codesize|cut -d' ' -f1) - include $(srctree)/drivers/firmware/efi/libstub/Makefile.zboot diff --git a/arch/arm64/kernel/image-vars.h b/arch/arm64/kernel/image-vars.h index 8f5422ed1b75..7e1c3f1f1372 100644 --- a/arch/arm64/kernel/image-vars.h +++ b/arch/arm64/kernel/image-vars.h @@ -140,8 +140,4 @@ KVM_NVHE_ALIAS(kvm_protected_mode_initialized); #endif /* CONFIG_KVM */ -#ifdef CONFIG_EFI_ZBOOT -_kernel_codesize = ABSOLUTE(__inittext_end - _text); -#endif - #endif /* __ARM64_KERNEL_IMAGE_VARS_H */ diff --git a/drivers/firmware/efi/libstub/arm64.c b/drivers/firmware/efi/libstub/arm64.c index f6c8e1992e54..b339fa34d2f2 100644 --- a/drivers/firmware/efi/libstub/arm64.c +++ b/drivers/firmware/efi/libstub/arm64.c @@ -88,8 +88,6 @@ efi_status_t check_platform_features(void) #define DCTYPE "cvau" #endif -u32 __weak code_size; - void efi_cache_sync_image(unsigned long image_base, unsigned long alloc_size) { @@ -112,8 +110,6 @@ void efi_cache_sync_image(unsigned long image_base, asm("ic ialluis"); dsb(ish); isb(); - - efi_remap_image(image_base, alloc_size, code_size); } void __noreturn efi_enter_kernel(unsigned long entrypoint, diff --git a/drivers/firmware/efi/libstub/zboot.lds b/drivers/firmware/efi/libstub/zboot.lds index 9ecc57ff5b45..143597d0e5dc 100644 --- a/drivers/firmware/efi/libstub/zboot.lds +++ b/drivers/firmware/efi/libstub/zboot.lds @@ -2,8 +2,6 @@ ENTRY(__efistub_efi_zboot_header); -PROVIDE(zboot_code_size = ABSOLUTE(0)); - SECTIONS { .head : ALIGN(4096) { @@ -21,10 +19,6 @@ SECTIONS __efistub__gzdata_end = .; *(.rodata* .init.rodata* .srodata*) - . = ALIGN(4); - __efistub_code_size = .; - LONG(zboot_code_size); - _etext = ALIGN(4096); . = _etext; } -- 2.47.1.613.gc27f4b7a9f-goog