Messages in this thread | | | Date | Mon, 5 Jun 2017 15:20:26 +0100 | From | Matt Fleming <> | Subject | Re: [PATCH 3/5] x86_64: boot, extract efi_pe_entry from startup_64 |
| |
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 <jslaby@suse.cz> > Cc: "H. Peter Anvin" <hpa@zytor.com> > Cc: Thomas Gleixner <tglx@linutronix.de> > Cc: Ingo Molnar <mingo@redhat.com> > Cc: <x86@kernel.org> > Cc: David Woodhouse <dwmw2@infradead.org> > Cc: Matt Fleming <matt@codeblueprint.co.uk> > --- > arch/x86/boot/compressed/head_64.S | 112 ++++++++++++++++++------------------- > 1 file changed, 53 insertions(+), 59 deletions(-)
Reviewed-by: Matt Fleming <matt@codeblueprint.co.uk>
| |