From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751407AbdFEOUa (ORCPT ); Mon, 5 Jun 2017 10:20:30 -0400 Received: from mail-oi0-f50.google.com ([209.85.218.50]:35544 "EHLO mail-oi0-f50.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751379AbdFEOU3 (ORCPT ); Mon, 5 Jun 2017 10:20:29 -0400 Date: Mon, 5 Jun 2017 15:20:26 +0100 From: Matt Fleming To: Jiri Slaby Cc: mingo@redhat.com, tglx@linutronix.de, hpa@zytor.com, x86@kernel.org, linux-kernel@vger.kernel.org, David Woodhouse Subject: Re: [PATCH 3/5] x86_64: boot, extract efi_pe_entry from startup_64 Message-ID: <20170605142026.GD3339@codeblueprint.co.uk> References: <20170531081243.5709-1-jslaby@suse.cz> <20170531081243.5709-3-jslaby@suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170531081243.5709-3-jslaby@suse.cz> User-Agent: Mutt/1.5.24+42 (6e565710a064) (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 > Cc: "H. Peter Anvin" > Cc: Thomas Gleixner > Cc: Ingo Molnar > Cc: > Cc: David Woodhouse > Cc: Matt Fleming > --- > arch/x86/boot/compressed/head_64.S | 112 ++++++++++++++++++------------------- > 1 file changed, 53 insertions(+), 59 deletions(-) Reviewed-by: Matt Fleming