• Ard Biesheuvel's avatar
    arm64/efi: efistub: jump to 'stext' directly, not through the header · 95b39596
    Ard Biesheuvel authored
    After the EFI stub has done its business, it jumps into the kernel by
    branching to offset #0 of the loaded Image, which is where it expects
    to find the header containing a 'branch to stext' instruction.
    
    However, the UEFI spec 2.1.1 states the following regarding PE/COFF
    image loading:
    "A UEFI image is loaded into memory through the LoadImage() Boot
    Service. This service loads an image with a PE32+ format into memory.
    This PE32+ loader is required to load all sections of the PE32+ image
    into memory."
    
    In other words, it is /not/ required to load parts of the image that are
    not covered by a PE/COFF section, so it may not have loaded the header
    at the expected offset, as it is not covered by any PE/COFF section.
    
    So instead, jump to 'stext' directly, which is at the base of the
    PE/COFF .text section, by supplying a symbol 'stext_offset' to
    efi-entry.o which contains the relative offset of stext into the Image.
    Also replace other open coded calculations of the same value with a
    reference to 'stext_offset'
    Acked-by: default avatarMark Rutland <mark.rutland@arm.com>
    Acked-by: default avatarRoy Franz <roy.franz@linaro.org>
    Signed-off-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
    95b39596
efi-entry.S 2.48 KB