On Tue, 7 Jan 2020 at 15:01, Ard Biesheuvel <ard.biesheuvel@xxxxxxxxxx> wrote: > > On Tue, 7 Jan 2020 at 14:55, Arvind Sankar <nivedita@xxxxxxxxxxxx> wrote: > > > > This series performs GOT relocation before calling into C code for the > > EFI stub. While the stub does not currently require GOT relocation, it's > > quite easy to introduce code that will use the GOT on old toolchains, > > but not recent ones, which can lead to unexpected issues. > > > > This is based on > > https://git.kernel.org/pub/scm/linux/kernel/git/efi/efi.git/log/?h=next > > > > with commit 4169bb99cd70 ("efi/libstub/x86: use mandatory 16-byte stack > > alignment in mixed mode") reverted, as it caused a crash in mixed mode. > > > > Hi Arvind, > > I appreciate the effort, but I really don't think this is a good idea. > > A GOT is completely pointless in bare metal code, and fortunately, > modern toolchains make it easier to suppress GOT entries from being > emitted. So instead of adding back asm code that I just removed, I > think it would be better to investigate whether we can get rid of the > GOT entirely. > With the following added to arch/x86/boot/compressed/vmlinux.lds.S, the 64-bit kernel already links without error. ASSERT (_got == _egot, "GOT entries detected"); The 32-bit kernel produces a GOT with 3 entries: I'm trying to narrow down where they come from. > > > > > Arvind Sankar (3): > > x86/boot/compressed/64: Make adjust_got easier to use repeatedly > > x86/boot/compressed/32: Allow adjust_got to be called repeatedly > > x86/boot: Perform GOT relocation before calling EFI stub > > > > arch/x86/boot/compressed/eboot.c | 4 +- > > arch/x86/boot/compressed/head_32.S | 65 +++++++++++++++++++++---- > > arch/x86/boot/compressed/head_64.S | 76 +++++++++++++++++------------- > > 3 files changed, 99 insertions(+), 46 deletions(-) > > > > -- > > 2.24.1 > >