From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751371AbdFEOUT (ORCPT ); Mon, 5 Jun 2017 10:20:19 -0400 Received: from mail-oi0-f45.google.com ([209.85.218.45]:35369 "EHLO mail-oi0-f45.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751112AbdFEOUS (ORCPT ); Mon, 5 Jun 2017 10:20:18 -0400 Date: Mon, 5 Jun 2017 15:20:14 +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 2/5] x86_32: boot, extract efi_pe_entry from startup_32 Message-ID: <20170605142014.GC3339@codeblueprint.co.uk> References: <20170531081243.5709-1-jslaby@suse.cz> <20170531081243.5709-2-jslaby@suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170531081243.5709-2-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:40AM, Jiri Slaby wrote: > 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 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_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: > 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 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: Jiri Slaby > Cc: "H. Peter Anvin" > Cc: Thomas Gleixner > Cc: Ingo Molnar > Cc: > Cc: David Woodhouse > Cc: Matt Fleming > --- > arch/x86/boot/compressed/head_32.S | 129 ++++++++++++++++++------------------- > 1 file changed, 64 insertions(+), 65 deletions(-) Reviewed-by: Matt Fleming