• Jiri Slaby's avatar
    x86/boot/32: Extract efi_pe_entry() from startup_32() · f4dee0bb
    Jiri Slaby authored
    The efi_pe_entry() body is somehow squashed into startup_32(). In the old days,
    we forced startup_32() to start at offset 0x00 and efi_pe_entry() to start
    at 0x10.
    
    But this requirement was removed long time ago, in:
    
      99f857db ("x86, build: Dynamically find entry points in compressed startup code")
    
    The way it is now makes the code less readable and illogical. Given
    we can now safely extract the inlined efi_pe_entry() body from
    startup_32() into a separate function, we do so and we separate it to two
    functions as they are marked already: efi_pe_entry() + efi32_stub_entry().
    
    We also annotate the functions appropriatelly by ENTRY+ENDPROC.
    
    ABI offset is preserved:
    
      0000   128 FUNC    GLOBAL DEFAULT    6 startup_32
      0080    60 FUNC    GLOBAL DEFAULT    6 efi_pe_entry
      00bc    68 FUNC    GLOBAL DEFAULT    6 efi32_stub_entry
    
    On the top-level, it looked like this:
    
    	ENTRY(startup_32)
    	#ifdef CONFIG_EFI_STUB		; start of inlined
    		jmp     preferred_addr
    	ENTRY(efi_pe_entry)
    		... ; a lot of assembly (efi_pe_entry)
    	ENTRY(efi32_stub_entry)
    		... ; a lot of assembly (efi32_stub_entry)
    		leal    preferred_addr(%eax), %eax
    		jmp     *%eax
    	preferred_addr:
    	#endif				; end of inlined
    		... ; a lot of assembly (startup_32)
    	ENDPROC(startup_32)
    
    And it is now converted into:
    
    	ENTRY(startup_32)
    		... ; a lot of assembly (startup_32)
    	ENDPROC(startup_32)
    
    	#ifdef CONFIG_EFI_STUB
    	ENTRY(efi_pe_entry)
    		... ; a lot of assembly (efi_pe_entry)
    	ENDPROC(efi_pe_entry)
    
    	ENTRY(efi32_stub_entry)
    		... ; a lot of assembly (efi32_stub_entry)
    		leal    startup_32(%eax), %eax
    		jmp     *%eax
    	ENDPROC(efi32_stub_entry)
    	#endif
    Signed-off-by: default avatarJiri Slaby <jslaby@suse.cz>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Brian Gerst <brgerst@gmail.com>
    Cc: David Woodhouse <dwmw2@infradead.org>
    Cc: Denys Vlasenko <dvlasenk@redhat.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Josh Poimboeuf <jpoimboe@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Matt Fleming <matt@codeblueprint.co.uk>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: ard.biesheuvel@linaro.org
    Cc: linux-efi@vger.kernel.org
    Link: http://lkml.kernel.org/r/20170824073327.4129-1-jslaby@suse.czSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    f4dee0bb
head_32.S 6.09 KB