• Jiri Slaby's avatar
    x86/boot/64: Extract efi_pe_entry() from startup_64() · 9e085cef
    Jiri Slaby authored
    Similarly to the 32-bit code, efi_pe_entry body() is somehow squashed into
    startup_64().
    
    In the old days, we forced startup_64() to start at offset 0x200 and efi_pe_entry()
    to start at 0x210. 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_64() into a separate function, we do so.
    
    We also annotate the function appropriatelly by ENTRY+ENDPROC.
    
    ABI offsets are preserved:
    
      0000000000000000 T startup_32
      0000000000000200 T startup_64
      0000000000000390 T efi64_stub_entry
    
    On the top-level, it looked like:
    
    	.org 0x200
    	ENTRY(startup_64)
    	#ifdef CONFIG_EFI_STUB		; start of inlined
    		jmp     preferred_addr
    	GLOBAL(efi_pe_entry)
    		... ; a lot of assembly (efi_pe_entry)
    		leaq    preferred_addr(%rax), %rax
    		jmp     *%rax
    	preferred_addr:
    	#endif				; end of inlined
    		... ; a lot of assembly (startup_64)
    	ENDPROC(startup_64)
    
    And it is now converted into:
    
    	.org 0x200
    	ENTRY(startup_64)
    		... ; a lot of assembly (startup_64)
    	ENDPROC(startup_64)
    
    	#ifdef CONFIG_EFI_STUB
    	ENTRY(efi_pe_entry)
    		... ; a lot of assembly (efi_pe_entry)
    		leaq    startup_64(%rax), %rax
    		jmp     *%rax
    	ENDPROC(efi_pe_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-2-jslaby@suse.czSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    9e085cef
head_64.S 11.7 KB