On Wed, 31 May, at 10:12:41AM, Jiri Slaby wrote: > 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 in 99f857db8857 ("x86, build: > Dynamically find entry points in compressed startup code") long time > ago. > > The way it is now makes the code less readable and illogical. And 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 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: Jiri Slaby <jsl...@suse.cz> > Cc: "H. Peter Anvin" <h...@zytor.com> > Cc: Thomas Gleixner <t...@linutronix.de> > Cc: Ingo Molnar <mi...@redhat.com> > Cc: <x...@kernel.org> > Cc: David Woodhouse <dw...@infradead.org> > Cc: Matt Fleming <m...@codeblueprint.co.uk> > --- > arch/x86/boot/compressed/head_64.S | 112 > ++++++++++++++++++------------------- > 1 file changed, 53 insertions(+), 59 deletions(-)
Reviewed-by: Matt Fleming <m...@codeblueprint.co.uk>