efi/zboot: arm64: Inject kernel code size symbol into the zboot payload
The EFI zboot code is not built as part of the kernel proper, like the ordinary EFI stub, but still needs access to symbols that are defined only internally in the kernel, and are left unexposed deliberately to avoid creating ABI inadvertently that we're stuck with later. So capture the kernel code size of the kernel image, and inject it as an ELF symbol into the object that contains the compressed payload, where it will be accessible to zboot code that needs it. Signed-off-by: Ard Biesheuvel <ardb@kernel.org> Acked-by: Mark Rutland <mark.rutland@arm.com>
This commit is contained in:
Родитель
538bc0f40b
Коммит
45dd403da8
|
@ -44,4 +44,7 @@ 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$(shell \
|
||||
$(NM) vmlinux|grep _kernel_codesize|cut -d' ' -f1)
|
||||
|
||||
include $(srctree)/drivers/firmware/efi/libstub/Makefile.zboot
|
||||
|
|
|
@ -108,4 +108,8 @@ 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 */
|
||||
|
|
|
@ -40,7 +40,7 @@ quiet_cmd_compwithsize = $(quiet_cmd_$(zboot-method-y))
|
|||
$(obj)/vmlinuz: $(obj)/vmlinux.bin FORCE
|
||||
$(call if_changed,compwithsize)
|
||||
|
||||
OBJCOPYFLAGS_vmlinuz.o := -I binary -O $(EFI_ZBOOT_BFD_TARGET) \
|
||||
OBJCOPYFLAGS_vmlinuz.o := -I binary -O $(EFI_ZBOOT_BFD_TARGET) $(EFI_ZBOOT_OBJCOPY_FLAGS) \
|
||||
--rename-section .data=.gzdata,load,alloc,readonly,contents
|
||||
$(obj)/vmlinuz.o: $(obj)/vmlinuz FORCE
|
||||
$(call if_changed,objcopy)
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
ENTRY(__efistub_efi_zboot_header);
|
||||
|
||||
PROVIDE(zboot_code_size = ABSOLUTE(0));
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.head : ALIGN(4096) {
|
||||
|
@ -17,6 +19,11 @@ SECTIONS
|
|||
*(.gzdata)
|
||||
__efistub__gzdata_end = .;
|
||||
*(.rodata* .init.rodata* .srodata*)
|
||||
|
||||
. = ALIGN(4);
|
||||
__efistub_code_size = .;
|
||||
LONG(zboot_code_size);
|
||||
|
||||
_etext = ALIGN(4096);
|
||||
. = _etext;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче